У меня есть несколько .tpl.php файлов для узлов, полей CCK и Представлений theming. Эти шаблонные файлы имеют большую логику в них, чтобы переместить вещи, ссылки полосы, создать новые ссылки, и т.д. Я понимаю, что это - плохая разработка и не "Путь Drupal".
Если я понимаю правильно, "Путь Drupal" состоит в том, чтобы использовать функции препроцессора в Вашем template.php
файл, чтобы управлять переменными и добавить новые переменные. Несколько вопросов об этом:
content-field-field_transmission_make_model.tpl
, как я назвал бы функцию препроцессора?Для общего обзора вы должны прочитать об управлении переменными в функциях препроцессора .
Что касается соглашения об именах, это обычно довольно просто, но в вашем текущем примере есть уловка (см. Ниже):
Сигнатура функций предварительной обработки должна быть
{{1} } [yourModuleName | yourThemeName] _preprocess_ [themeFunctionName] (& $ variables)
, поэтому реализация одного для шаблона страницы в файле темы template.php приведет к
themeName_preprocess_page (& $ переменных)
В большинстве случаев имя функции темы будет именем файла * .tpl.php без окончания .tpl.php и с подчеркиванием вместо дефисов. Но есть загвоздка , если файл шаблона выбирается на основе предложений шаблона , поскольку функция предварительной обработки может быть реализована только для базового имени, а не для дополнительных предложений! (Предложения для альтернативных файлов шаблонов добавляются в сами функции предварительной обработки.)
Ваш текущий пример является одним из таких случаев, поскольку content-field-field_transmission_make_model.tpl.php
является таким предложением, с базовое имя - content-field.tpl.php
, а соответствующая функция темы - content_field
.Таким образом, вам нужно будет реализовать функцию предварительной обработки с именем yourThemeName_preprocess_content_field (& $ variables)
, и внутри нее проверить доступные записи в массиве $ variables, чтобы проверить, действительно ли вас вызывают для 'field_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
должно было измениться (все записи верхнего уровня в массиве $ variables будут преобразованы в отдельные переменные для файла шаблона, названные в честь индекса массива).
Что касается вашего второго вопроса, основное использование функций предварительной обработки одинаково для всех файлов шаблонов, но имейте в виду: