Поток комментариев, начинающийся здесь, описывает эффективный обходной путь. 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 ИЛИ ...)), мне пришлось переместить «Содержимое: Опубликованный (Да)» в новая группа фильтров (с помощью диалогового окна «И / или переупорядочить»). Обратите внимание, что пользовательский интерфейс не отображал фильтр «Содержимое: Опубликовано (Да)» по-другому после того, как я переместил его в новую группу (других групп не было), но в объекте запроса, который был передан в hook_views_query_alter()
него, переместился это из группы 0 в группу 1, в результате чего код в вышеупомянутых функциях больше не влияет на него.