Сортируем материалы как термины
Я думаю каждый Drupal'ер знаком с интерфейсом "перетаскивания" блоков, меню или терминов реализуемых Друпалом.
Очень удобно, правда?
Было бы неплохо использовать подобный функционал для ранжирования материалов.
В продолжении поста смотрим как это можно реализовать.
Настройка для администратора
Вся эта "красота" работает благодаря Drag'n'Drop библиотеке, зашитой в ядро Drupal. Вот нашел её форк на гите: tabledrag.js.
В этом примере мы рассмотрим вариант использования подобного интерфейса с помощью модуля DraggableViews.
Предполагаю Вы уже скачали и установили этот модуль, и поэтому, переходим дальше.
Создаем обычное представление, по материалам, с выводом содержимого таблицей, всех результатов без пагинатора. Скриншот добавления представления.
Добавляем поле "NID", скрываем его и выводим первым в списке полей.
Добавляем поле "Draggableviews: Содержимое", со стандартными настройками:
Теперь добавим в критерии сортировки "Draggableviews: Вес":
Настройки оставляем как есть:
Сохраняем представление. Скриншот готового представления.
Можем перейти на страницу представления, перетащить материалы в нужные места и сохранить. Материалы будут выводится в том порядке, в котором мы их сохранили.
В этом представлении администратор сможет устанавливать порядок вывода содержимого.
Очень важно! Нельзя использовать фильтры и пагинатор в представлении сортировки, иначе модуль не будет сохранять результаты правильно.
Представление для пользователей
Мы можем вывести материалы в этом же порядке и в других представлениях.
Для этого создаем представление по материалам, с нужными нам настройками, или просто заходим в уже имеющееся представление, содержимое которого нужно вывести в "нужном" порядке.
В критериях сортировки добавляем, уже знакомый нам "Draggableviews: Вес". В его настройках выбираем созданное в первом шаге представление в качестве основной сортировки:
Обязательно нужно сделать эту сортировку первой в списке!
Все, можно сохранять представление и смотреть результат.
Использование пользовательских полей
Очень полезная функция данного модуля заключается в возможности использования собственного поля в качестве источника веса.
Таким образом, можно вручную задавать вес материала, при его редактировании.
Для этого нужно просто добавить материалу поле типа "Целое число" (Integer):
В представлении (для администратора) заменить сортировку "Draggableviews: Вес" на сортировку по созданному полю.
Теперь, в настройках полей представления, в поле "Draggableviews: Содержимое", меняем сортировщик (Sort handler) с Native на FieldAPI. В качестве поля выбираем добавленное до этого в сортировку.
Ну, а в качестве сортировки представления для пользователей, просто указываем наше поле веса, вместо "Draggableviews: Вес".
Комментарии
Спасибо за отличную подробную статью. DraggableViews мне всегда казался каким через чур мудреным, я использовал модуль Weight, в котором нет сортировки перетаскиванием. Попробую DraggableViews.