Как определить тип содержимого страницы для страниц, не являющихся узлами?


Я пытаюсь изменить свою тему 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;
}
 5
Author: Andrew, 2011-07-16

2 answers

Используйте template_preprocess() для обнаружения узла на странице и передайте дополнительную переменную в качестве флага в файл шаблона, например:

$variables['display_region'] = TRUE;

Возможно, панели тоже могут вам помочь.

 2
Author: Codium, 2011-07-16 20:43:43

Страницы не имеют типа контента, только узлы. Вы пытаетесь сделать здесь что-то программно, что на самом деле очень легко сделать с помощью пользовательского интерфейса Drupal.

Я бы предложил вместо того, чтобы скрывать область боковой панели на страницах, не относящихся к форуму, в шаблоне страницы, просто установите видимость блоков боковой панели, чтобы они отображались только на страницах форума:

forum
forum/*

Тогда вам нужно всего лишь просто проверить, есть ли содержимое боковой панели в шаблоне вашей страницы

if($sidebar):

Более подробная информация о настройках видимости блоков здесь: http://drupal.org/node/21870

 0
Author: sheena_d, 2011-12-16 01:56:19