Модуль Views — мощный инструмент в копилке друпалера. Конструктор позволяет создавать условия, перекрывающие большую часть потребностей в практических задачах. Есть возможность связывания с дополнительными сущностями и контекстом выполнения представления.
Далее мы рассмотрим случай, когда этих средств недостаточно и требуется добавить собственные условия в запрос (query) представления (views).
Изменить запрос можно с помощью зацепки hook_views_query_alter(&$view, &$query), где достаточно поменять свойства объекта $query для достижения ваших целей.
Условия представлены в виде массива, который отражает структуру условий из конструктора views.
Пример набора условий во views состоящих из двух групп:
… и его представление в объекте query:
Чтобы задать дополнительное условие, требуется указать три параметра и группу. Например, перепишем условие во второй группе:
1 2 3 4 5 6 |
// номера групп в массиве начинаются с 1 $query->where[2]['conditions'][0] = array( 'field' => 'node.nid IN (1,2,3)', 'value' => array(), 'operator' => 'formula', ); |
На первый взгляд кажется, что условия базируются на Database Drupal API https://www.drupal.org/docs/7/api/database-api/dynamic-queries/conditional-clauses. Но это не так.
Использованный в примере оператор formula — даёт максимальную свободу в формулировках условий, фактически позволяя вам добавлять выражения на sql. Это несет определенные риски, и ответственность за то, что вы там пишите, полностью ложится на ваши плечи. Тогда как другие операторы ограничены в применении, связаны с типом конкретного поля, проходят ряд проверок и т.п.