ShvetsGroup

 

RSS Следите за нашим блогом и будьте в курсе последних новостей.

 
  • аватар: neochief
5 комментариев

Оптимизируем Друпал: Видимость блоков

Для больших друпаловских сайтов обычная вещь иметь большое количество регионов для блоков. Разные регионы для разных разделов тоже частая практика. В общем случае, вы имеете шаблон главной страницы (page-front.tpl.php), где вы водите большую часть разнообразных регионов, и шаблон рядовых страниц, где количество регионов не так велико (page.tpl.php):

Определение новых регионов супер простое, нужно всего лишь добавить новую запись в .info файл вашей темы:

regions[ad_top] = Ad Top
regions[ad_bottom] = Ad Bottom
regions[front_sidebar] = Front Sidebar
regions[sidebar_ad] = Sidebar Ad
regions[content] = Content
regions[feature_a] = Feature A
regions[feature_b] = Feature B
regions[feature_c] = Feature C
regions[feature_d] = Feature D

А затем «отпечатать» регион  в нужном месте шаблона таким вот кодом:

<?php
print $feature_a; 
?>

Не хотите показывать регион  "Feature A" в page.tpl.php? Нет проблем! Просто не выводите регион в шаблоне! Вот... Правильно?

Оказывается, за всей этой простотой кроется одна заковырка. Даже если вы не выводите регион в шаблоне, он все-равно рендерится при подготовке страницы, так как друпал не может знать заранее, выведете ли вы регион на страницу или нет. Посему, в худшем случае, загрузка рядовых страниц у вас будет настолько же тяжела, как и загрузка главной страницы.

Решением проблем является явное ограничение видимости блоков для конкретных путей сайта, либо ограничение показа для определенных ролей. Кроме того, полезным будет применение модуля Block Page Visibility для более гибкого управления видимостью блоков.

Комментарии

Anonymous
5 ноября, 2009

Спасибо за пост. Неочевидные и крайне полезные вещи вы пишете. Вчера еще уточнял в джаббере, теперь и тут отмечусь. Это Дубовской Александр, "здравствуйте" вам из далекого Ростова-на-Дону :) Знакомым девелоперам и коллегам в студии дал почитать - крайне познавательно.

dedas
19 ноября, 2009

Отменный сайтик И Drupal тоже нормальный движок. Хотя и люблю ДЛЕ

Sinkora
29 ноября, 2009

Спасибо за статью!

Вот попробовал посмотреть модуль "Block Page Visibility"... Посмотрел и решил, что смогу решать задачи и без него. Но, как только я отключил этот модуль, у меня перестали отображаться все страницы сайта! Т.е., как я понял, все страницы, на которых были блоки, теперь не работают! Не знаю пока как сделать откат... Сайт реально работающий. Надеюсь, что скоро решу проблему, или кто-нибудь оперативно подскажет решение...

С уважением,
Евгений.

Sinkora
2 декабря, 2009

Проблема возникла при отключении модуля. У него есть такой хук:

function bpv_disable() {
$sql = "UPDATE blocks SET pages = '' WHERE status=1 AND theme='%s'";
db_query($sql, variable_get('theme_default', 'garland'));
variable_del('bpv_default');
}

После чего в таблице {blocks} значения полей pages были удалены этим модулем. Пришлось вручную восстанавливать эти данные.

И еще был замечен один глюк у Друпала. Если мы на странице настройки блока в поле "Установки видимости для страницы" отметим второй пункт "Показывать только на перечисленных страницах" и в то же время не укажем ни одной страницы для отображения блока, то в результате сайт перестанет работать - будет белый экран на всех страницах, где есть вывод блоков в шаблоне...

Так что нужно осторожно пользоваться модулем "Block Page Visibility" (обязательно нужно прочитать README.txt перед использованием:)).

И еще о блоках. Я пока не смог понять, как можно с помощью всеми известного хука hook_block динамически менять вес блока в зависимости от страниц, на которых он выводится.

Т.е., как я понимаю, мы можем сделать, например, такое:

function hook_block($op='list', $delta=0, $edit=array()) {
switch ($op) {
case 'list':
$block[0]['weight'] = 1;
$block[0]['pages'] = 'blog/*';
return $blocks;
}
}

Но мы не можем в этом хуке сделать так, чтобы, например, на страницах 'blog/*' вес данного блока был равен 1, а на странице 'forum/*' имел другое значение (например, равное 2)... Возможно, скорее всего, есть разумные решения такой задачи, но только пока еще я не думал особо над этим...

yuyucvfg
16 декабря, 2010

This year designer handbags has been all about the small handbag, which makes it no surprise that 1 of the hottest trends this season is the very small clutch bag. Obviously, clutch baggage will generally meet the other trends of the period, from rolex watches the deeply-hued colours of purple and green, to pleats and lace and python and far more! Metallics are large on and off the runway correct now, so a stylish very small clutch in a very shiny, textured style will burberry be the perfect of-the-moment item.Totally adore texturized handbags? If so, you're in luck. This year or so saw much more handbags created tag heuer in diverse textures and patterns. Handbags with sequins, studs, jewels, beads or anything that you can imagine are sizzling, scorching, scorching! For the fashion divas coach who aren’t too sure about the texturized bag, it is possible to play it subtle with the crackled leather look. These bags aren't overdone with studs and jewels, but they still stand out in a fashionable tag heuer watches crowd with a soft and supple crackled leather texture.One more massive trend in purses and shoes suitable gucci wallets now are lace accented items. Beautiful luggage with lace detailing adds just the perfect touch of femininity to any outfit. Pair these romantic pieces with darker colors armani and you'll be able to wear the romantic rocker appear all period lengthy.

Хотите что-то добавить?

CAPTCHA
Если вы — спам-робот, вам вряд ли удастся пройти этот тест.