Для темизации поля, нужно скопировать файл modules/field/theme/field.tpl.php
в папку templates
вашей темы и дать ему новое имя согласно одному из шаблонов:
-
field--FIELD-TYPE.tpl.php — шаблон будет применён ко всем полям типа
FIELD_TYPE
. Например, чтобы темизировать все поля типа Image, нужно создать шаблон с именемfield--image.php
. -
field--FIELD-NAME.tpl.php — шаблон будет применён к полю с именем
FIELD_NAME
. Например, чтобы темизировать поле с именемfield_images
, нужно создать шаблон с именемfield--field-images.tpl.php
. -
field--BUNDLE.tpl.php — шаблон будет применён ко всем полям добавленных к сущности с типом
BUNDLE
. Например, чтобы темизировать все поля в материале типаpage
, нужно создать шаблон с именемfield--page.tpl.php
. -
field--FIELD-NAME--BUNDLE.tpl.php — шаблон будет применён только к полю
FIELD_NAME
, которое добавлено к сущности с типомBUNDLE
. Например, чтобы темизировать полеfield_images
в материале типаpage
, нужно создать шаблон с именемfield--field-images--page.tpl.php
.
После того, как шаблон скопирован и переименован, нужно сбросить кэш и отредактировать созданный файл. Описание всех доступных переменных находятся в комментариях шаблона.
Видео (смотреть с конца третьей минуты):
[video:http://www.youtube.com/watch?v=sxZQqgvJk3s]
Комментарии
Шаблон поля обычно содержит всего несколько строчек. Поэтому такой код удобней оформить в виде theme функции в template.php, чтобы не делать лишних "инклудов".
в смысле переопределить в hook_theme и написать свои функции?
Нет, hook_theme не нужен.
Например, для темизации поля с именем field_images достаточно в template.php добавить такую функцию
Имена этих функций похожи на имена соответствующих шаблонов. Только вместо дефисов нужно подставлять нижнее подчеркивание.
круто
В примере букву s в имя функции надо добавить.
mytheme_field__field_images
Кстати, это работает для всех шаблонов, даже page.tpl.php при необходимости можно заменить, на theme_page().
Хотя тут конечно, надо не перестараться. Если тема делается для того, кто далёк от php, то использовать шаблоны предпочтительней, хотя бы потому, что они не так устрашающе выглядят, как template.php.
как раз пригодилось =)
Спасибо! Отличная статья!
Хочу еще добавить - если вам надо темизировать не вывод поля, а элемент формы, то похоже единственный способ - использовать хук _form_element
Спасибо, а можно ли темизировать поле body? какой нужен шаблон? Или как функкцию в template.php для этого назвать?
ПО поводу темизации body - все решилось само собой. в 4-й Омеге это не сделаешь, там файл field.tpl.php не используется для темизации body, данные для этого поля берутся из файла field.theme.inc.этим объясняется интересная особенность классов для body - в их именах вместо дефисов - подчеркивания.
Как добавить в тегу img свой класс?
Нашел такой пример.
Или есть вариант более правильный?
Или как вариант просто перед выводом img добавить
$item['field_image']['#attributes']['class'][0] = 'your_class'
Получим
https://www.drupal.org/project/image_class
Спасибо, супер! Модуль это хорошо, если надо много и часто выполнять действия, но ради установки одного класса ставить модуль, на мой взгляд это не рационально :-)
Подскажите!
Как добавить свой класс для тег
поля image?
Нужно программно создать поле типа " Ссылка на термин"
Не знаю в какой теме спросить, спрошу тут. я программно создаю словари таксономии и мне нужно, что бы при создании словаря я типе метериала создавалось поле типа " ссылка на термин".
как создать поле я нашел в гугле но как создать именно "ссылку на термин" не нашел.
спасите!
А можно ли сделать шаблон поля который использовался только при определенных условиях? Скажем вид ноды "полный" шаблон вывода один, вид вывода "анонс" используем другой шаблон для поля.
http://xandeadx.ru/blog/drupal/409
Добавить комментарий