Всем привет!
Подскажите кто сталкивался.
Задача: отсортировать ноды по количеству картинок (картинка - это поле типа 'Файл'). С начала идут ноды с большим количеством картинок, в конце без.
В 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'); нет.
Комментарии
если вьюс 3, то через агрегацию это можно сделать
Посмотри тут
P.S. Вместо print, print_r лучше используй функционал модуля Devel,
а именно функции dsm(); или dprint_r();
Решил.
Сделал свой модуль. Помогла эта статья http://druit.ru/blogs/views/143.
Модуль сообщяет Views о том что можно сортировать по заданному полю(в моём случае по полю field_img_fid из таблицы БД content_field_img).
В файле sortimages.views.inc
/**
* Реализует 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 в колонке "Критерии сортировки" выберем наше поле.
В приложении сам модуль(вдруг кому понадобится).