Как вызвать функцию предварительной обработки моей темы для определенного поля? - PullRequest
7 голосов
/ 28 сентября 2011

Я нахожусь на Drupal 7, и у меня есть специальный файл tpl.php для содержимого field_image: "field - field_image.tpl.php".Мне нужно создать функцию предварительной обработки для этого поля и для моей темы.

Предположим, что моя тема называется "Моя тема"

Она должна выглядеть как

function my_theme_preprocess_field(&$variables, $hook) {
  $variables['classes_array'][] = 'aClassName';
}

, ноэто не работаетЯ не прав.Но где?

Спасибо

Ответы [ 3 ]

16 голосов
/ 28 сентября 2011

Вы можете использовать template_preprocess_field() (как вы делаете в коде выше), но просто проверьте, подходит ли вам конкретное поле:

function my_theme_preprocess_field(&$variables, $hook) {
  $element = $variables['element'];
  if (isset($element['#field_name'])) {
    if ($element['#field_name'] == 'field_image') {
      $variables['classes_array'][] = 'aClassName';
    }
  }
}

Как только выРеализованный хук, не забудьте очистить кеш, реализации хуков кешируются в Drupal 7, поэтому не будут подняты, пока кеш не очищен.

4 голосов
/ 26 марта 2013

Вы можете объявить mytheme_preprocess_field(&$variables, $hook) в файле template.php вашей темы, где вы можете проверить свое поле и выполнить операции над его меткой или разметкой, добавить классы, что угодно. Таким образом, вам не понадобятся специфичные для поля данные. - например.

function mytheme_preprocess_field(&$variables, $hook) {
  if ($variables['element']['#field_name'] == 'field_machine_name') {
        $variables['items'][0]['#markup'] = 'add custom markup';
  }
}

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 29 сентября 2011

В drupal 7 вы можете переписать вывод поля в template_preprocess_node (), изменив значение поля "#markup".

Также вы можете использовать regexp для изменения того, что вы хотите в содержимом страницы:)

...