Убрать дубликаты из вывода views

Если в результате настройки вьюс у вас стали дублироваться строки, и вы уже пробовали зайти в настройках вьюсины в раздел "Прочее" -> "Настройки запроса" -> "Уникальность", поставить там галочку, но она всё равно не помогает - тогда можно использовать этот хитрый сниппет для решения проблемы:
Заходите туда же, в "Прочее" -> "Настройки запроса"

там в поле "Комментарий запроса" пишете "groupby:node.nid" без кавычек, сохраняете, затем в свой кастомный модуль вставляете этот сниппет:

/**
 *  Found this trick on theoleschool.com.
 *  
 *  Description: Allows the view developer to specify the query
 *  group by action in the query comments. Great way to force the
 *  removal of duplicates.
 *  
 *  Just go into your query comments and type in "groupby:" with
 *  that colon followed by the field you want to group by.
 * 
 *  Examples...
 *  groupby:node.nid
 *  groupby:file_managed_file_usage.fid
 * 
 *  Ref-Comment: http://theoleschool.com/comment/496#comment-496
 *  Ref-Article: http://theoleschool.com/blog/using-hookviewsalter-add-group-statement
 */
function mymodule_query_alter(QueryAlterableInterface $query) {
  if ($query->hasTag('views')) {
    static $count;
    $view =& $query->getMetaData('view');
 
    if (strstr($groupby = $view->query->options['query_comment'], 'groupby')) {
      list($action, $field) = explode(':', $groupby);
 
      if (strlen($field) > 0) {
        $query->groupBy($field);
      }
    }
  }
}

вместо mymodule нужно конечно написать название модуля, куда вы вставляете этот сниппет. Обновляете кеш, и вуаля - строки выводятся только уникальные.

Удачи!

Комментарии

Добавить комментарий