Как использовать тематические препроцессорные функции для моих собственных шаблонов?

StackOverflow https://stackoverflow.com/questions/2383865

Вопрос

У меня есть несколько файлов .tpl.php для узлов, полей CCK и их просмотров. Эти шаблонные файлы имеют много логики в них, чтобы перемещать вещи вокруг, полосу ссылок, создавать новые ссылки и т. Д. Я понимаю, что это плохое развитие, а не «Драпал Путь».

Если я правильно понимаю, «Путь Drupal» - использовать предпроцессорные функции в вашем template.php Файл для манипулирования переменными и добавлять новые переменные. Несколько вопросов о том:

  • Есть ли соглашение об именах для создания функции препроцессора для конкретной темы? Например, если у меня есть шаблон поля CCK content-field-field_transmission_make_model.tpl, Как бы я назвал функцию препроцессора?
  • Могу ли я использовать шаблонные препроцессорные функции для шаблонов узлов, шаблоны поля CCK и шаблоны просмотров? У них есть разные методы модификации переменных шаблонов или добавления новых?
Это было полезно?

Решение

Для общего обзора вы должны Читайте на манипулирующих переменные в пределах предпроектных функций.


Что касается Конвенции именования, это обычно довольно просто, но есть улов для вашего текущего примера (см. Ниже):

Подпись функций для предварительной обработки должна быть

[yourModuleName|yourThemeName]_preprocess_[themeFunctionName](&$variables)

поэтому реализация одного для шаблона страницы в файле Template.php приведет к

themeName_preprocess_page(&$variables)

Большую часть времени имя функции темы будет именем файла * .tpl.php, без окончания .tpl.php и с подчеркиванием вместо дефисов. Но есть поймать Если файл шаблона выбран на базе Предложения шаблонов, Поскольку функция предварительной обработки может быть реализована только для базового имени, а не для дополнительных предложений! (Предложения для альтернативных файлов шаблонов добавляются в самих функциях для предварительной обработки.)

Ваш текущий пример является одним из тех случаев, как content-field-field_transmission_make_model.tpl.php это предложение, с базовым именем content-field.tpl.php, и соответствующая тематическая функция content_field. Отказ Так что вам придется реализовать функцию предварительной обработки имени yourThemeName_preprocess_content_field(&$variables), И внутри, которые проверяют доступные записи в массиве в $ Prixblics, чтобы проверить, на самом деле вы называете «File_Transmission_Make_Model», а не для совершенно другого поля CCK, например:

function yourThemeName_preprocess_content_field(&$variables) {
  // Are we called for the right field?
  if ('field_transmission_make_model' == $variables['field_name']) {
    // Yes, add/manipulate entries within the variables array
    $variables['new_entry'] = 'A useless new variable';
    $variables['label'] = 'A useless change of the existing label variable';
  }
}

(Примечание: непроверенный код, остерегайтесь опечатки)

После этого должна быть новая переменная $new_entry Быть доступным в вашем шаблонном файле и содержимое $label Переменная должна измениться (все записи верхнего уровня в массиве в $ Prixbly будут превращены в отдельные переменные для файла шаблона, названного после индекса массива).


Что касается вашего второго вопроса, базовое использование функций для предварительной обработки одинаково для всех файлов шаблонов, но знать:

  • Функции для предварительной обработки доступны только для тематических вызовов, которые используют файлы * .tpl.php, нет Для темы функций
  • Содержание массива $ Prixblics сильно зависит от того, что получает тематику
  • Другие модули могут также реализовать функции предварительной обработки, и они будут называться один за другим, поэтому, если вы хотите изменить то, что добавляется другим модулем, вы можете сделать только, если ваша реализация вызывается после этого (которая не будет Проблема в вашем случае, поскольку реализации в теме называются всеми реализациями в модулях - просто хотел упомянуть, что могут быть много реализации одновременно)

Другие советы

Чтобы выяснить, насколько наша функция предварительной обработки должна быть названа, нам нужно знать, какой файл шаблона или функция темы. один отличный способ сделать это, используя Тема разработчик модуль.

Вот видео, которое подробно объясняет это - http://buildamodule.com/video/drupal-theming-essentials-template-files-teMe-function-function-vundensides-and-preprocessing-functions-pourcepressing-bunctions-

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top