Пример модуля для Views, добавляющий критерий сортировки по заранее определённой формуле.
Views 2
/**
* Implements hook_views_api()
*/
function modulename_views_api() {
return array('api' => 2);
}
/**
* Implements hook_views_data()
*/
function modulename_views_data() {
return array(
'views' => array(
'mysort' => array(
'title' => t('Sort by formula'),
'group' => t('Global'),
'sort' => array(
'handler' => 'views_handler_sort_formula',
'formula' => 'node.changed - node.created', // Формула или подзапрос
),
),
),
);
}
Views 3
В третьей версии немного сложнее, так как из ядра удалили хэндлер views_handler_sort_formula
и поэтому придётся написать его аналог:
modulename.module
/**
* Implements of hook_views_api().
*/
function modulename_views_api() {
return array('api' => 3);
}
modulename.views.inc
/**
* Implements hook_views_data()
*/
function modulename_views_data() {
return array(
'views' => array(
'mysort' => array(
'title' => t('Sort by formula'),
'group' => t('Global'),
'sort' => array(
'handler' => 'modulename_handler_sort_mysort',
),
),
),
);
}
modulename_handler_sort_mysort.inc
class modulename_handler_sort_mysort extends views_handler_sort {
function query() {
$this->ensure_my_table();
$this->query->add_orderby(NULL, 'node.changed - node.created', $this->options['order'], 'formula_result');
}
}
modulename.info
...
files[] = modulename_handler_sort_mysort.inc
SQL запрос, сгенерированный Views, будет выглядеть приблизительно так:
SELECT (node.changed - node.created) AS formula_result
ORDER BY formula_result
Подробнее у гракера.
Написанное актуально для
Views 2, Views 3
Похожие записи
- Views сортировка по выражению/условию/формуле
- Необязательное значение одной из дат в раскрытом фильтре с оператором BETWEEN
- Как расширить функционал фильтр-плагина Views? (добавляем возможность фильтровать числовые поля по нескольким значениям)
- Экспорт представления Views в код
- Программно добавить шапку или подвал в представление
Добавить комментарий