Показывать представление только для определенного типа контента в Drupal

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

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

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


person Paul    schedule 05.02.2010    source источник


Ответы (4)


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

person Scott Reynen    schedule 05.02.2010
comment
Мне нравится этот подход, потому что он вряд ли сломается после обновления до более новой версии drupal. - person FlorianH; 06.02.2010

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

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

Вот код PHP-валидатора Views Argument.

global $user; return $argument[0] == $user->uid;
person windmaomao    schedule 24.05.2012

Просто создайте свое представление, перейдите на страницу конфигурации блока и используйте 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, Обзор - подход к блокировке видимости

person marcvangend    schedule 05.02.2010

Лучше:

<?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;
?>
person user4628243    schedule 03.03.2015