xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Вывести Views в вкладке определённого типа материала

Опубликовано в

Пример вывода Views в вкладке материала типа article:

  1. Создаём представление с дисплеем Page и адресом node/%/my-view:

  2. В настройках пункта меню выбираем тип Menu tab и прописываем заголовок таба:

  3. Добавляем контекстный фильтр по Content: nid с следующими настройками:
    — When the filter value is not in the url = Show "Page not found"
    — Specify validation criteria = Включить
    — Validator = Content
    — Content types = Article

Profit:

Если контекстный фильтр по nid не нужен, то вместо него можно использовать контекстный фильтр Global: Null.

Замечание: такой способ добавляет десятку лишних SQL запросов на страницах нод всех типов. Способ ограничить видимость вкладки программно:

/**
 * Implements hook_menu_alter();
 */
function MODULENAME_menu_alter(&$items) {
  if (isset($items['node/%/my-view'])) {
    $items['node/%/clearance']['access callback'] = 'MODULENAME_tab_access';
  }
}
 
/**
 * Implements hook_module_implements_alter().
 */
function MODULENAME_module_implements_alter(&$implementations, $hook) {
  if ($hook == 'menu_alter') {
    $group = $implementations['MODULENAME'];
    unset($implementations['MODULENAME']);
    $implementations['MODULENAME'] = $group;
  }
}
 
/**
 * Tab access callback.
 */
function MODULENAME_tab_access() {
  $node = node_load(arg(1));
  if ($node->type == 'YOUR_NODE_TYPE') {
    return call_user_func_array('views_access', func_get_args());
  }
}

Опцию Specify validation criteria в контекстном фильтре нужно будет отключить.

Написанное актуально для Views 3
Похожие записи

Комментарии RSS

"Гениально, Шеф!"
ушло в закладки. спасибо.

Супер!! Спасибо за статью.

Почему то хук не работает. я создал модуль и вставил код, заменил MODULENAME на имя модуля и YOUR_NODE_TYPE на имя машинное имя типа материала, но вкладки все равно во всех нодах. Что я мог не учесть ?

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании