Нитка коментарів, що починається тут, описує ефективне вирішення. 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, внаслідок чого код у вищезазначених функціях більше не впливає на нього.