Начинаю постигать хуки views. И это очень интересно.
Есть поле которое формируется из php кода. И по нему не получается сделать сортировку.
Последовательно попробовал сделать темизацию. То есть на этапе view-views--field изменять массив $view.
Попробовал хуки hook_view_pre_render и hook_view_pre_build.
Типа такого
if ($view->name == "object_type") {
for ($i=0; $i<=count($view->result)-1;$i++)
{
$view->result[$i]->objects_kitchen=function_na_php($view->result[$i]->id);
}
}
Но я так понимаю сортировка результата идет еще на этапе выполнения sql запроса.
Или все таки сортируется уже массив $view?
Комментарии
Конечно сортировка идет во время запроса, так что изменять надо сам запрос с помощью хука
hook_views_query_alter
например http://www.agileapproach.com/blog-entry/using-hookviewsqueryalter-change...
Тут фишка в том, что поле можно сформировать только из php.
Есть вариант в процессе hook_view_pre_render пересортировать $view->result после изменения. Только как это сделать. В $view->result попадают записи после разбивки на страницы.
Неужели нельзя переопределить сортировку на массив результата sql запроса?
Можно сделать так.
перехватить формирование запроса через hook_view_pre_execute.
Переделать первоначальный sql запрос, убрав ограничения pager.
Поместить результат во временную таблицу, через функцию db_query_temporary
Обработать временную таблицу функцией на php.
Переделать sql запрос, заменив имя таблицы на временную.
Запустить sql запрос.
Как вы думаете. Этот вариант рабочий?
Или буду сильные потери в производительности?
Похоже, что что-то не то делаете, надо модифицировать запрос к базе. Хук, который я указал, позволяет это делать, можно изменить запрос как угодно, добавить поля, если требуется тоже можно. $query это объект, со свойствами fields, sort, ... Добавьте в него все, что нужно, и вьюз это выведет.
Если без php никак, то может имеет смысл создать новую таблицу в базе и заносить в нее эти данные и интегрировать ее со вьюзом через хук views_data