Агрегация views по заголовку материала

Опубликовано 2014.09.25

Сделать традиционный group by в запросе вьюса не так просто. Вьюс группирует все поля. Для отдельных полей в настройках агрегации можно задать тип "среднее", "максимум", "минимум" и так далее. А если нужно сгруппировать материалы по строке? Например по заголовку или строковому cck полю? Стандартная агрегация вьюса с этим не справится, по крайней мере я не смог этого сделать в интерфейсе представления. Поальтерить запрос вьюса через hook_views_query_alter тоже не получится. Придётся альтерить весь запрос. В семёрке(скорей всего будет работать и в восьмёрке) это можно сделать с помощью хука hook_query_alter() Выглядеть это будет так:
  1. function mymodule_query_alter(QueryAlterableInterface $query) {
  2. if(isset($query->alterMetaData)) {
  3. if(isset($query->alterMetaData['view'])) {
  4. if($query->alterMetaData['view']->name == 'taxonomy_term_katalog'){
  5. $query->groupBy('title');
  6. }
  7. }
  8. }
  9. }
В этом примере мой модуль имеет имя mymodule и вьюс, который я агрегирую имеет имя taxonomy_term_katalog.