Сортировка в друпаловых вьюсах по несортирующимся в принципе полям
Опять я сочинил вьюс в 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.




Обзор AgeStar NSB3AS1T NAS для 3.5" SATA HDD
Комментариев и оценок: 183
Обзор AgeStar NSB3AS1T NAS для 3.5" SATA HDD - сетевого хранилища на базе 3.5" SATA HDD с возможностью подключения по USB. 10/100 Mbit, SATA 3.5"
AgeStar FUBCP USB2.0 to IDE/SATA Adapter
Комментариев и оценок: 93
AgeStar FUBCP - подключение IDE или SATA 2.5",3.5" или 5.25" устройств через USB
Обзор жесткого диска HDD 2ТБ Western Digital WD20EARS
Комментариев и оценок: 73
Краткий обзор жесткого диска HDD 2ТБ Western Digital WD20EARS-00MVWB0 с фотографиями и тестами производительности.Многофункциональное устройство Canon LaserBase MF3228
Комментариев и оценок: 52
Многофункциональное устройство Canon LaserBase MF3228. Описание, впечатления от работы, ссылка на драйвера.
AgeStar SUB2O1 2.5" SATA External Enclosure
Комментариев и оценок: 51
Обзор с картинками и тестами AgeStar SUB201 - внешней USB коробки для 2.5" SATA винчестеров.