2010-02-05 6 views
1

У меня есть блок блоков «Об авторе» в Drupal. Это связано с user_id создателя текущего узла, который отлично работает.Показывать только представление определенного типа контента в Drupal

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

Может ли кто-нибудь помочь мне?

ответ

3

Я рекомендую использовать pathauto, чтобы дать каждому узлу типа префикс общего URL (а хорошая идея в любом случае), поэтому вы можете использовать простое ограничение видимости пути. Например, вы установили шаблон пути типа контента на «article/[title]», а затем установили путь к блоку в «article/*»

+0

Мне нравится этот подход, потому что это менее вероятно, перерыв после обновления до новой версии Друпала. – FlorianH

0

Просто создайте свое представление, перейдите на страницу конфигурации блока и используйте php для правил видимости блока. Для того, чтобы показать блок только на определенных типах контента, использование:

<?php 
$match = FALSE; 
$types = array('story' => 1, 'page' => 1); 
if (arg(0) == 'node' && is_numeric(arg(1))) { 
    $nid = arg(1); 
    $node = node_load(array('nid' => $nid)); 
    $type = $node->type; 
    if (isset($types[$type])) { 
    $match = TRUE; 
    } 
} 
return $match; 
?> 

Этот код взят из drupal.org, Overview-approach to block visibility

1

no, вы можете использовать валидатор аргументов представления в представлении.

ex. Как вы ограничите представление значением uid пользователя? »Смысл, как может любое данное представление видеть только зарегистрированный пользователь, которому принадлежит этот контент.

Вот код проверки аргумента PHP.

global $user; return $argument[0] == $user->uid; 
0

Лучше:

<?php 
$match = FALSE; 
$types = array('story' => 1, 'page' => 1); 
if (arg(0) == 'node' && is_numeric(arg(1))) { 
    $nid = arg(1); 
    $node = node_load($nid); 
    $type = $node->type; 
    if (isset($types[$type])) { 
    $match = TRUE; 
    } 
} 
return $match; 
?> 
+0

Почему это лучше? –