Вы здесь

Как вывести материалы не отмеченные ни одним термином из словаря

0

Имеется такая структура views, основанная на контекстных фильтрах:

http://МОЙСАЙТ/cat1/cat2/cat3/cat4/cat5

Можно вывести все материалы из любой категории (например, вывести материалы содержащие определенный термин из cat1, cat2, cat5 и все термины из cat3 и cat4):

http://МОЙСАЙТ/term1/term2/vse/vse/term5

Подскажите, как вывести все материалы не помеченные ни одним термином словаря cat2 (т.е. чтобы контекстный фильтр vse для данного словаря работал наоборот - выводил не помеченные материалы):

http://МОЙСАЙТ/term1/vse/term3/term4/term5
Версия Drupal: 
7.x
Категория: 
Taxonomy API
Связанные проекты: 
Views
Вопрос задан 11.01.2016 - 23:16

Ответы

0
<?php

function hook_views_query_alter(&$view, &$query) {
  if ($view->name == 'SOMEVIEW') {
    if ($view->args[1] == 'excluded') {
      // Здесь модифицируем наш query, удалив связку для term2 и исключаем через join-ы этот term
/*      $join = new views_join();
      $join->table = '';
      $join->field = 'my_field';
      $join->left_table = 'left_table';
      $join->left_field = 'left_field';
      $join->type = 'left';
      $join->extra = array(
          array(
              'field' => 'bundle',
              'value' => 'user',
          )
      );
      $query->add_relationship('relationship_name', $join, 'node');*/
    }
  }
}
Ответ дан 12.01.2016 - 04:14

Спасибо!

Сделал так, вроде работает как надо:

function MODULE_views_query_alter(&$view, &$query) {
  if ($view->name == 'SOMEVIEW') {
    if ($view->args[1] == 'vse') {
    foreach ($query->where as &$where_group) {
      foreach ($where_group['conditions'] as &$condition) {
        if ($condition['value'] === 'vse') {
          $condition['value'] = NULL;
          $condition['operator'] = 'IS NULL';
        }
      }
    }
    }
  }
}
Комментарий оставлен 12.01.2016 - 06:55
0

Есть опция exclude в настройках контекстных фильтров.

Ответ дан 12.01.2016 - 13:25