Есть drupal 5, модуль views 1.8 и вьюшка с полями "Год" и "Цена". Нужно сделать динамическую сортировку по указанным полям. То есть ссылки, которыми пользователь сможет сортировать содержимое вьюхи как ему вздумается.
Насколько я понимаю, динамическая сортировка модулем поддерживается только для вьюх в табличном виде. Но табличный вид принципиально не устраивает по соображениям форматирования.
Готовых вариантов решения для этих версий софта пока не нашёл, поэтому закралась мысль каким-то образом перехватывать вывод вьюхи своим обработчиком, насильно его сортировать и выдавать пользователю. Не очень понятно только куда можно подоткнуть обработчик для всего этого дела. Может мне кто-нибудь помочь дельным советом?
Комментарии
Хорошая штука - форум: сам спросил - сам ответил.
В общем, я помог себе сам. В действительности всё оказалось несложно, а по сравнению с вариантами, которые находились гуглом - даже изящно.
Итак, у меня была вьюха страничного вида, которая выводила несколько полей с заголовками. Табличное представление меня принципиально не устраивало, тк в нём заголовки полей выносятся в шапку таблицы. А нужно было иметь пару Заголовок: Значение, и при этом дать пользователю две ссылки, которыми он смог бы сортировать вывод вьюхи по одному из двух полей.
Для начала при настройке вьюхи я указал в критериях сортировки поля, по которым пользователь будет иметь возможность упорядочивать вывод.
Вторым шагом я создал ссылки, которыми пользователь будет это делать. Мне они нужны были в заголовке страницы, соответственно, раскрываем пункт "Заголовок" в настройках страничного вида и вписываем туда такой код:
<b>Упорядочить по:</b><a href="#" onclick="window.location.href='?sort=price'">Цена</a><b>|</b><a href="#" onclick="window.location.href='?sort=year'">Год выпуска</a>
</div>
Не забываем при этом убедиться, что формат ввода под этим полем выставлен в Full HTML.
Код создаёт две ссылки, которые никуда не ведут, но при клике на них срабатывает JavaScript, который прописывает в адресную строку параметр sort с нужным значением и по созданной ссылке переходит.
Дальше мне нужен обработчик этого кода, который и создаётся третьим шагом. Идём в раздел "Аргументы", раскрываем "Аргументы обработки кода" и рисуем туда следующий фрагмент (без тегов <?php и ?>):
<?php
switch ($_GET['sort']) {
case 'price':
unset($view->sort['0']);
$view->sort[1]['sortorder'] = 'ASC';
break;
case 'year':
unset($view->sort['1']);
$view->sort['0']['sortorder'] = 'ASC';
break;
default:
unset($view->sort['0']);
unset($view->sort['1']);
break;
}
?>
Этим кодом я смотрю что вьюхе передано методом GET, ожидая увидеть тот самый параметр sort, который мы прописывали выше. И в зависимости от ситуации что-нибудь делаю с критериями сортировки: если значение sort равно price (у меня это сортировка по цене), то убираю первый критерий сортировки и задаю порядок для второго; если sort равен year (второй критерий), то убираю первый критерий и задаю порядок для второго; если sort равен чему-то другому или его нет совсем, то убираю оба критерия, тк задачи что-либо сортировать без вмешательства пользователя у меня не было.
Итого - 17 строк кода. В принципе, логичнее задавать порядок сортировки в самих критериях и сократить код до 15 строк, да и выглядеть оно будет краше )
Эхх, жаль для Views 2.12 не подходит(
а как для 2 и 3 вьювс такое смудрить?
ничего не изменилось за год для 6 друпала для 2 или 3 вьюхи?