Иногда возникает необходимость ручной сортировки ресурсов в каталоге, чтобы поднять определенные ресурсы выше.
Ранее для возможности автоматических сортировок была создана цепочка правил в field_config (см. https://elibsystem.ru/node/398), но эти правила были автоматическими, т.е. не предполагали возможности ручного указания какому ресурсу за каким следовать.
В то время, как иногда такая необходимость возникает.
Для решения этой проблемы создано поле в папке каталога, где можно указать ручную сортировку. Но работает эта сортировка сложнее, чем может показаться. Поэтому здесь объясняется как она работает.
Содержание
Включение ручной сортировки[править]
Ручная сортировка точно также действует в рамках цепочки правил. Т.е. в поле field_config в массив sort надо добавить правило про ручную сортировку, причем его лучше указать слева, чтобы оно срабатывало первым:
{ sort: ['manual_top', 'rating_desc', 'childrens', 'title_asc'] }
Есть два режима ручной сортировки: 'manual' и 'manual_top'. Разница между ними в том, что 'manual' сортирует только ресурсы, для которых в ручном режиме задан порядок сортировки, 'manual_top' поднимает все перечисленные в ручной сортировке ресурсы вверх и затем их сортирует между собой.
По умолчанию ручная сортировка 'manual_top' уже включена первой и дополнительно в field_config добавлять ничего не надо.
Поле field_sort_manual[править]
У ноды типа "папка каталога" должно быть поле field_sort_manual. Проверьте, что оно есть по URL: admin/structure/types/manage/subj/fields/field_sort_manual.
Если такого поля нет, создайте его в ручном режиме admin/structure/types/manage/subj/fields путем добавления поля с машинным именем field_sort_manual и типом "связь с материалом". При этом выберите также все типы нод, которые смогут участвовать в сортировке.
Убедитесь, что в настройках поля отмечены все типы материалов, для которых вы хотите разрешить ручную сортировку. Если какого-то типа нет, добавьте его в ручном режиме admin/structure/types/manage/subj/fields/field_sort_manual.
Использование ручной сортировки[править]
Теперь перейдите в папку, в которой вы хотите отсортировать в ручном режиме все или только часть ресурсов.
Перейдите в режим редактирования папки.
В поле ручной сортировке введите названия нод в том порядке, в котором вы хотите, чтобы они были упорядочены.
Сохраните папку.
Как работает правило ручной сортировки manual[править]
Чтобы решить какой из двух ресурсов будет выше, А или Б, смотрится есть ли ОБА этих ресурса в поле field_sort_manual и если оба там есть, то кто будет выше А или Б определяется порядком в поле field_sort_manual.
Важно, что если один из сравниваемых ресурсов не находится в field_sort_manual, то правило сортировать эти два ресурса не будет и произойдет переход к применению следующего правила.
Как работает правило ручной сортировки manual_top[править]
Чтобы решить какой из двух ресурсов будет выше, А или Б, смотрится есть ли ОБА этих ресурса в поле field_sort_manual и если оба там есть, то кто будет выше А или Б определяется порядком в поле field_sort_manual.
Если и А и Б не входят в поле field_sort_manual, они не сортируются и применяется следующее правило.
Если из А или Б только один ресурс указан в ручной сортировке, он поднимается вверх.
Т.о. manual_top поднимает вверх все ресурсы, указанные в ручной сортировке и сортирует их в указанном порядке, а ресурсы не входящие в field_sort_manual оказываются ниже и для них применяются следующие правила цепочки сортировки.
Если при попытке заполнить поле ручной сортировки вы не видите ресурсы[править]
Может быть так, что вы пытаетесь заполнить поле ручной сортировки некоторым ресурсом, но автодополнение не показывает его. Если это произошло, то администратор должен добавить ваш тип ресурса в те, которые могут участвовать в ручной сортировке на странице admin/structure/types/manage/subj/fields/field_sort_manual.