Як використовувати контекстний фільтр подань АБО?


18

Після перегляду мережі та SE деякий час, мені здається, немає хорошого рішення поєднувати 2 contextual filtersз АБО (а не за замовчуванням І).

У цій публікації згадується хак PHP, і ця публікація містить деякі посилання на проблему , в якій зазначається нещодавня зміна поглядів 7.x-3.1 . Він також згадує, що використовується hook_views_query_alter(&$view, &$query)для зміни вигляду.

Хтось має робочий приклад чи краще рішення?


Я не думаю, що є кращого рішення на даний момент. Як сказано в темах, які ви вказали, це, очевидно, триває питання. Я натрапив на ту ж проблему цього тижня, і мені довелося знайти вирішення вкладень. Але потім, він не дає змішаного списку, а два пов'язаних, що не відповідає всім потребам.
Графзеро

Відповіді:



7

Нитка коментарів, що починається тут, описує ефективне вирішення. MotoTribe пов'язаний з тією ж ниткою, але на момент його запитання на цій сторінці не було жодного робочого прикладу. Зараз є наступне:

У своєму модулі реалізуйте hook_views_api():

function MODULENAME_views_api() {
  return array(
    'api' => 3,
  );
}

Потім додайте новий файл у свій модуль під назвою MODULENAME.views.inc та hook_views_query_alter()виконайте такі дії:

function MODULENAME_views_query_alter(&$view, &$query) {
  if ($view->name == 'whatever_your_view_is_called') {
    $query->where[0]['type'] = 'OR';
  }
}

Також пам’ятайте про це застереження:

Мабуть, фільтр "Вміст: Опубліковано (Так)", який постачається з кожним переглядом, вважається частиною тієї ж групи фільтрів, що і контекстуальні фільтри (група 0). Тож для того, щоб мій погляд відображав лише опубліковані вузли, які належать до будь-якої з груп, визначених контекстуальними фільтрами (опубліковані AND (arg1 АБО arg2 OR АБО ...)), мені довелося перемістити "Вміст: Опубліковано (Так)" у нова група фільтрів (використовуючи діалогове вікно "І / Або переставити"). Зауважте, що інтерфейс користувача не відображав фільтр "Вміст: Опубліковано (Так)" інакше після того, як я перемістив його в нову групу (інших груп не було), але в об'єкт запиту, який передається hook_views_query_alter()йому, перемістився він із групи 0 в групу 1, внаслідок чого код у вищезазначених функціях більше не впливає на нього.


1
Краще хоча б перефразовувати відповідність посилань на питання ОП. Відповіді лише на посилання не рекомендуються, оскільки посилання можуть не зберігатися.
Triskelion

@Triskelion: Ах, ви абсолютно праві. Я відредагував свою відповідь, щоб виправити це.
coredumperror

4

Існує модуль, який змінює обробники Views, щоб зробити контекстні фільтри, які використовуються з OR замість AND: Контекстуючі фільтри Views АБО


Я хочу створити перегляд із вмістом від "поточний користувач" + "Вміст від позначених користувачем (поточний користувач позначив, використовуючи follow flag [user])"
Umair

2

Ситуація з контекстними фільтрами та групами фільтрів справді кричуща. Ось тема на тему Toppic, яка має те саме рішення, що і @CoreDumpError.

https://drupal.org/node/1451218

Крім того, ось модуль, який може допомогти вирішити конфліктні контекстуальні та відкриті фільтри ... Перегляд "Гармонізатор фільтру"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.