Ответ 1
Для общего обзора вы должны читать при манипулировании переменными в функциях препроцесса.
Что касается соглашения об именах, это обычно довольно просто, но в вашем текущем примере есть уловка (см. ниже):
Подпрограмма функций перед обработкой должна быть
[yourModuleName|yourThemeName]_preprocess_[themeFunctionName](&$variables)
поэтому реализация одного для шаблона страницы в файле тем шаблона template.php приведет к
themeName_preprocess_page(&$variables)
В большинстве случаев имя функции темы будет именем файла *.tpl.php без окончания .tpl.php и с символами подчеркивания вместо дефисов. Но есть catch, если файл шаблона выбирается на основе предложений шаблона, поскольку функция препроцесса может только быть реализованы для базового имени, а не для дополнительных предложений! (Предложения по альтернативным файлам шаблонов добавляются в самих функциях препроцесса.)
Ваш текущий пример - один из таких случаев, поскольку 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
должно быть изменено (все записи верхнего уровня в массиве $переменных будут преобразованы в отдельные переменные для файла шаблона, названного в честь индекса массива).
Что касается вашего второго вопроса, то основное использование функций препроцесса одинаково для всех файлов шаблонов, но имейте в виду:
- Функции препроцесса доступны только для вызовов тем, которые используют файлы *.tpl.php, не для функций темы
- Содержимое массива $переменных сильно варьируется в зависимости от того, что получает themed
- Другие модули также могут реализовывать функции препроцесса, и они будут вызываться один за другим, поэтому, если вы хотите изменить что-то, добавляемое другим модулем, вы можете сделать это, только если после этого вызывается вызов не будет проблемой в вашем случае, поскольку реализации внутри темы вызывается после всех реализаций внутри модулей - просто хотелось бы упомянуть, что может быть много реализаций сразу)