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

04.05.2014

Пример вывода 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
Похожие записи

Комментарии

I amdroid
15.05.2014, 00:59

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

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

Добавить комментарий