Сортировка в друпаловых вьюсах по несортирующимся в принципе полям

Опять я сочинил вьюс в 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.

Тэги:

CCK Drupal Drupal 6 howto Views Проблемы Решения Сортировка Таксономия
RSSAdd to Google

Обсуждение:

Как вам материальчик? *



















Тема:

Мысль:

Как звать-то:

Почта:

PS: Комментарии публикуются только после проверки модератором.

PPS: E-mail'ы не публикуются.

* обязательные поля