Как определить тип содержимого страницы для страниц, не являющихся узлами?
Я пытаюсь изменить свою тему page.tpl.php
, чтобы не показывать определенные регионы при отображении контента из основного модуля форума.
<?php if (!$node->type == 'forum'): ?>
<div id="sidebar"><?php print $sidebar; ?></div>
<?php endif; ?>
Это прекрасно работает, когда я показываю фактические узлы форума, но не тогда, когда я показываю страницы со списками форумов (/форум, /форум/1 и т.д.), Поскольку эти страницы на самом деле не являются узлами.
Как я могу определить, будет ли страница определенным типом контента, чтобы я мог использовать условные операторы в page.tpl.php
?
Редактировать: Несколько быстрых разъяснений. Работа с $node->type
проста для страниц, которые на самом деле используют узлы. Однако при работе с представлениями или в случае модуля форума содержимое не основано на узлах (оно вызывается с помощью forum-topic-list.tpl.php
и $node
равно нулю). Из-за этого невозможно программно определить, действительно ли страница является форумом (поскольку на самом деле это не узел). Я пытаюсь найти способ обойти это.
Редактирование 2: Возможно (клуджи?) решение: Включение этого в theme_preprocess_page
работает. Но это лучший способ сделать это?
// Determine if page is a forum
$node = $vars['node'];
$template = $vars['template_files'][0];
if ($template == 'page-forum' || $node->type == 'forum') {
$vars['is_forum'] = TRUE;
}
2 answers
Используйте template_preprocess() для обнаружения узла на странице и передайте дополнительную переменную в качестве флага в файл шаблона, например:
$variables['display_region'] = TRUE;
Возможно, панели тоже могут вам помочь.
Страницы не имеют типа контента, только узлы. Вы пытаетесь сделать здесь что-то программно, что на самом деле очень легко сделать с помощью пользовательского интерфейса Drupal.
Я бы предложил вместо того, чтобы скрывать область боковой панели на страницах, не относящихся к форуму, в шаблоне страницы, просто установите видимость блоков боковой панели, чтобы они отображались только на страницах форума:
forum
forum/*
Тогда вам нужно всего лишь просто проверить, есть ли содержимое боковой панели в шаблоне вашей страницы
if($sidebar):
Более подробная информация о настройках видимости блоков здесь: http://drupal.org/node/21870