Добрый день.
Мне необходимо сделать некоторые изменения в функции template_preprocess_calendar_datebox().
Это функция модуля calendar.
Для этого:
1. Я копирую функция template_preprocess_calendar_datebox в в каталог текущей темы, файл template.php.
2. Переименовую функцию template_reprocess_calendar_datebox в phptemplate_preprocess_calendar_datebox.
3. Делаю необходимые изменения во вновь созданной копии функции.
Ничего не работает.
Как правильно изменить функцию?
Комментарии
Никак, все правильно, кроме того что надо еще и кеш сбрасывать, theme функции кешируются!!!
хм.
Очистил кеш в Performance не заработало.
Нужно ли кроме того, что я поместил тело функции phptemplate_preprocess_calendar_datebox в template.php, дополнительно где-то определять данную функцию?
Как вариант выключить тему, а потом включить.
Кеш с админки это кеш, а здесь нужно выполнить drupal_rebuild_theme_registry(), например добавить в начало template.php и после однократного открытия сайта - убрать. Или как я написал выше, выключить тему, включив гарланд и вновь включить.
hook_theme_registry_alter
позволит отключить нужную preprocess функцию.Т.е., по-моему, если мы хотим добавить новую переменную, то используем phptemplate_preprocess_...
А если хотим отключить переменные, то поможет только
hook_theme_registry_alter
, что избавит нас от лишнего шага в формировании переменных. Кстати, я сам только недавно узнал про этот хук (знающие люди недавно подсказали на форуме).Человеку переопределить функцию нужно, а не отклюсчить переменную.
Что вы понимаете под переопределнием функции?
Если пользоваться такой схемой как
template_preprocess_calendar_datebox
,phptemplate_preprocess_calendar_datebox
... то в итоге мы не переопределим функцию, а только добавим вычисления, т.е. в итоге Друпал будет каждый раз гонять две функции. И тут могут быть проблемы, когда на первом этапе (template_preprocess_calendar_datebox
) будут происходить ненужные нам действия, которые мы никак не сможем избежать, так вызовphptemplate_preprocess_calendar_datebox
ничего не изменит, а только пополнит функционалом.А
hook_theme_registry_alter
как раз позволяет отключить любой ненужный шаг, что как раз и позволяет переопределять функционал...Не согласен,
phptemplate_preprocess_calendar_datebox
как раз переопределяет функцию, т.е. если есть phptemplate то template_preprocess не будет вызываться, вот если в своем модуле написать маймодуль_preprocess то тогда эта функция вызовется вслед за template_preprocess, а так четкое переопределение поскольку надо полностью скопировать код исходной функции в template.phpНет, не совсем так.
template_preprocess_hook вызовется в первую очередь:) А потом вызовется функция phptemplate_preprocess_hook...
Как доказательство, пример можно увидеть в template.php того же Гарланда. Там есть такой код:
$vars['tabs2'] = menu_secondary_local_tasks();
// Hook into color.module
if (module_exists('color')) {
_color_page_alter($vars);
}
}
Но ведь это не значит, что не будет вызываться template_preprocess_page, где определены все переменные страницы...