Сортировка в друпаловых вьюсах по несортирующимся в принципе полям
Опять я сочинил вьюс в Drupal, в котором нельзя задать нужный мне параметр сортировки. Обычно это что-то связанное с файлами или таксономией. В конкретном отдельно взятом вьюсе я упёрся рогами в сортировку по CCK-полю, которое базировалось на многоязычной таксономии и содержало в себе буквально 3 значения в виде закодированного языка. Выборка во views'е выводилась как хотела и заказчик стоял на своём (любимая пытка Бормана (с) анекдот).
Срочно пришлось изобретать велосипед с кубическими колёсами, т.к. более друго решения нагуглить в разумные сроки не удалось.
Итак. Велосипед в студию.
Идея: сортирую сам при выводе результата работы вьюса. По дороге стараюсь максимально избавиться от html-тэгов, что-бы несколько облегчить работу серверу в момент создания кэша вьюса.
Для удаления лишнего хлама нужно создать специальный шаблон для поля (названия файлов шаблонов можно посмотреть в самом вьюсе). Или прописаться в готовый, что я и сделал. В кишках модуля views ищу views-view-field.tpl.php, копирую в папку своей темы.
В самом начале внедряю свой код методом if($view->name=='my_mega_super_puper_views'){ 'bla-bla-bla' }else{ 'стандартный обработчик шаблона' }. В коде выношу в сад весь html как класс и оставляю только необходимый минимум.
Так. Отдельно взятую строку почистил от излишеств.
Следом нужно добыть все строки значений и выполнить для них сортировку. Для этого иду в папку многострадального модуля views и добываю там файл, который символизирует собой нужный мне шаблон для вывода строк. У меня это оказался views-view-unformatted.tpl.php, который я опять-же копирую в папку темы.
Методом if($view->name=='my_mega_super_puper_views')..., описанным выше, дописываю логику сортировки строк своего многострадального вьюса.
Получилась примерно такая конструкция:
if($view->name=='my_mega_super_puper_views'){
$aRows=array();
foreach($rows as $id=>$row){
$aRows[strip_tags($row)]=$row;
}
ksort($aRows);
foreach($aRows as $id=>$row){
echo $row.' ';
}
}else{
//Стандартный обработчки
}
Киляю все кэши, ресканю темплэйты и наслаждаюсь результатом.
На выходе должны быть ссылки на некие файлы с анчором в виде кода языка. Чего у меня и получилось. Ипользуется совместно с вызовом подчиненных вьюсов из большого мега вьюса, т.к. друпал не позволяет строить очень сложные отношения между данными cck.


