Не многие обращали внимание, что например в 5 друале, формированием внешнего вида ЛЮБОЙ страницы занимается функция
theme('page')
Вроде бы что тут такого?
Но достаточно заглянуть в эту функцию чтобы понять, что именно в
function phptemplate_page
осуществляется вызов функций темизации для breadcrumb, сообщений, блоков и так далее, причем делается это независимо от того нужно это в шаблоне или нет.
Если Вы, как разработчик четко знаете что Вам нужно на странице, то перехватив функцию формирования страницы на себя например (function theme_name_page ), вы можете в отдельных случаях сократить время формирования страницы почти В ДВА РАЗА.
Как пример - стартовая страница на которой отсутствуют регионы и как следствие блоки.
То что описано ниже характерно для 5 ветки друпала. В 6 версии друпала делается нечто похожее организацией своей препроцесс функции формирования страницы.
Комментарии
Что, правда что ли? Думаю, каждый, у кого опыт работы с Друпалом больший, чем установка пары модулей через админку, знает об этом. http://api.drupal.ru/api/function/theme/6
З.Ы. И слово "немногие" пишется вместе.
Подождите, но ведь если я сделаю функцию
phptemplate_preprocess_page(&$vars)
то она ведь отработает уже после функции
template_preprocess_page(&$vars)
то есть все функции, которые в ней вызываются все равно отработают, и я могу только внести изменения и добавить свои переменные. Так где же выигрыш, где снижается нагрузка?
http://api.drupal.ru/api/function/hook_theme/6
'override preprocess functions'
Ага, значит если выставить в true 'override preprocess functions' в хуке hook_theme, то можно избежать этого?
Например, как перекрыть шаблон всех страниц, чтобы не генерить стандартные переменные? Что-то типа такого?
<?php
my_theme_theme($existing, $type, $theme, $path) {
return array(
'my_page' => array(
'arguments' => array('override preprocess functions' => true),
),
);
}
?>
А теперь выключаем идиота и включаем мозг
Конечно все знают как определять свои функции тем. Неочевидность в другом:
Спроси у любого, какие переменные передаются в шаблон, и он тебе скажет что вот такие(content links sidebar breadcrumb и т.д.), не отдавая себе отчета в том, что эти переменные туда передаются ТОЛЬКО в случае если ты используешь дефолтовую функцию _page.
Не подозревая, что эта функция, выполняет целую кучу вещей которые часто не нужны.
И что материалы по темизации друпала, создают ЛОЖНОЕ впечатление будто бы есть стандартный неизменный набор передаваемых переменных. Который можно дополнять, но никак не уменьшать.
Да, Demimurych, спасибо, я вот не знал, не было необходимости в этом пока. Пример как под 6-ку это делать не помешал бы(на будущее), penexe.