Как правильно вызывать пользовательскую функцию темы в Drupal? - PullRequest
2 голосов
/ 29 марта 2011

У меня есть собственная тема, которую мы назовем «MyTheme». В файле template.php у меня есть функция с именем «MyTheme_MyFunction».

В моем page.tpl.php я должен быть в состоянии сделать это:

<?php print theme('MyFunction'); ?>

Или я должен сделать это:

<?php print MyTheme_Function(); ?>

Я знаю, что последнее работает, но разве не должно работать и первое?

Ответы [ 3 ]

4 голосов
/ 29 марта 2011

Использовать theme ()

Вы должны всегда вызывать функции вашей темы через функцию theme(), как показано в первом примере: theme('MyFunction').Если вы этого не сделаете, вы наносите вред системе тем Drupal и не позволяете другим разработчикам модулей эффективно переопределять ваш вывод.

При написании собственных функций темы не забывайте использовать hook_theme(объяснено здесь ), чтобы зарегистрировать функцию вашей темы в реестре тем.Если вы этого не сделаете, вызов theme('MyFunction') не сработает.Никогда не повредит очистить кеши после первоначальной регистрации функции.

Пример того, почему это важно

Например, в файле template.php вашей темы вы можете определить свою собственную функцию theme_image дляпереопределить, как ядро ​​Drupal обрабатывает изображения.Вы назовете свою функцию name_of_theme_image и начнете работать, переопределяя то, что она возвращает.Если бы theme_image не всегда вызывалось как theme('image'), вы бы не смогли использовать это переопределенное поведение, потому что theme() действует как единственная точка входа и делегатор функций темы.То же самое относится и к функциям вашей темы.

1 голос
/ 29 марта 2011

Первый, безусловно, работает, но для этого вам нужно сообщить Drupal о функции вашей темы в hook_theme () (т.е. MyTheme_theme () в template.php вашей темы), а затем очистить кеш темы.

Подробнее см. http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_theme/6.

0 голосов
/ 30 марта 2011

Вы можете использовать перехват страницы предварительной обработки

function themename_preprocess_page(&$variables) { <br /> $variables['custom_name'] = function_name(); <br /> }

Тогда в page.tpl.php вы можете использовать Вот как переменные передаются в файлы TPL.

Аналогично для node.tpl.php вы можете использовать

function themename_preprocess_node(&$variables) {</p> <p>}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...