tip's & trick's или неочевидный прием для увеличения производитенльости.

Главные вкладки

Аватар пользователя Demimurych Demimurych 19 сентября 2009 в 23:21

Не многие обращали внимание, что например в 5 друале, формированием внешнего вида ЛЮБОЙ страницы занимается функция
theme('page')

Вроде бы что тут такого?

Но достаточно заглянуть в эту функцию чтобы понять, что именно в
function phptemplate_page

осуществляется вызов функций темизации для breadcrumb, сообщений, блоков и так далее, причем делается это независимо от того нужно это в шаблоне или нет.

Если Вы, как разработчик четко знаете что Вам нужно на странице, то перехватив функцию формирования страницы на себя например (function theme_name_page ), вы можете в отдельных случаях сократить время формирования страницы почти В ДВА РАЗА.

Как пример - стартовая страница на которой отсутствуют регионы и как следствие блоки.

То что описано ниже характерно для 5 ветки друпала. В 6 версии друпала делается нечто похожее организацией своей препроцесс функции формирования страницы.

Комментарии

Аватар пользователя Математический Ахмед Математический Ахмед 20 сентября 2009 в 0:09

Demimurych wrote:
Не многие обращали внимание

Что, правда что ли? Думаю, каждый, у кого опыт работы с Друпалом больший, чем установка пары модулей через админку, знает об этом. http://api.drupal.ru/api/function/theme/6

З.Ы. И слово "немногие" пишется вместе.

Аватар пользователя gorr gorr 20 сентября 2009 в 11:53

Подождите, но ведь если я сделаю функцию
phptemplate_preprocess_page(&$vars)
то она ведь отработает уже после функции
template_preprocess_page(&$vars)
то есть все функции, которые в ней вызываются все равно отработают, и я могу только внести изменения и добавить свои переменные. Так где же выигрыш, где снижается нагрузка?

Аватар пользователя penexe penexe 20 сентября 2009 в 12:09

"gorr" wrote:
Подождите, но ведь если я сделаю функцию
phptemplate_preprocess_page(&$vars)
то она ведь отработает уже после функции
template_preprocess_page(&$vars)
то есть все функции, которые в ней вызываются все равно отработают, и я могу только внести изменения и добавить свои переменные. Так где же выигрыш, где снижается нагрузка?

http://api.drupal.ru/api/function/hook_theme/6
'override preprocess functions'

Аватар пользователя gorr gorr 20 сентября 2009 в 13:21

Ага, значит если выставить в 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),
),
);
}
?>

Аватар пользователя Demimurych Demimurych 20 сентября 2009 в 13:41

"Математический Ахмед" wrote:
Что, правда что ли? Думаю, каждый, у кого опыт работы с Друпалом больший, чем установка пары модулей через админку, знает об этом. http://api.drupal.ru/api/function/theme/6
З.Ы. И слово "немногие" пишется вместе.

А теперь выключаем идиота и включаем мозг

Конечно все знают как определять свои функции тем. Неочевидность в другом:

Спроси у любого, какие переменные передаются в шаблон, и он тебе скажет что вот такие(content links sidebar breadcrumb и т.д.), не отдавая себе отчета в том, что эти переменные туда передаются ТОЛЬКО в случае если ты используешь дефолтовую функцию _page.
Не подозревая, что эта функция, выполняет целую кучу вещей которые часто не нужны.

И что материалы по темизации друпала, создают ЛОЖНОЕ впечатление будто бы есть стандартный неизменный набор передаваемых переменных. Который можно дополнять, но никак не уменьшать.

Аватар пользователя gorr gorr 20 сентября 2009 в 14:16

Да, Demimurych, спасибо, я вот не знал, не было необходимости в этом пока. Пример как под 6-ку это делать не помешал бы(на будущее), penexe.