Сортировка по картинкам в views

Главные вкладки

Аватар пользователя RCalos RCalos 9 октября 2012 в 12:24

Всем привет!
Подскажите кто сталкивался.
Задача: отсортировать ноды по количеству картинок (картинка - это поле типа 'Файл'). С начала идут ноды с большим количеством картинок, в конце без.
В views не получается это сделать, есть сортировка только по картинка-дельта, это типа по группам картинок (их у меня нет).
Пытаюсь реализовать через хук hook_views_query_alter
Создал папку в каталоге модуля.
В нем два файла sortviews5.info и sortviews5.module
В файле sortviews5.module
-----------------------------------

<?php/** 
* Implements hook_views_query_alter(). 
*/ 
//print('11111'); 
function sortviews5_views_query_alter(&$view, &$query) { 
//print('22222'); 
// Изменяем фильтр у вьюса с названием page_5s 
if ($view->name == 'page_5s') { 
// Присоединяем к запросу таблицу content_field_img 
$join = new views_join(); 
$join->construct('content_field_img', 'node', 'vid', 'field_img_fid'); 
$query->add_relationship('content_field_img', $join, 'node'); 

// Добавляем группировку по картинкам 
$query->add_groupby('field_img_fid'); 

} ?>

-----------------------------------

Ничего. print('11111'); выводится а вот print('22222'); нет.

Комментарии

Аватар пользователя RCalos RCalos 10 ноября 2015 в 11:48

Решил.
Сделал свой модуль. Помогла эта статья http://druit.ru/blogs/views/143.
Модуль сообщяет Views о том что можно сортировать по заданному полю(в моём случае по полю field_img_fid из таблицы БД content_field_img).
В файле sortimages.views.inc

<?php
/**
 * Реализует hook_views_data()
 * рассказывает модулю Views про нашу таблицу
 *
 * @return array - информация о таблицах
 */

function sortimages_views_data() {
  $data = array();
  $data['content_field_img'] = array(
    'table' => array(
      'group' => t('SortImages'),
    ),
    'field_img_fid' => array(
      'title' => t('Kartinki'),
      'help' => t('sortirovka po kartinkam'),
      'sort' => array(
        'handler' => 'views_handler_sort',
      ),
    ),
  );
  //join to node
  $data['content_field_img']['table']['join']['node'] = array(
    'left_field' => 'nid',
    'field' => 'nid',
  );
  return $data;
}

После включения модуля идем в views в колонке "Критерии сортировки" выберем наше поле.
В приложении сам модуль(вдруг кому понадобится).