home

Ручная сортировка в каталоге

Иногда возникает необходимость ручной сортировки ресурсов в каталоге, чтобы поднять определенные ресурсы выше.

Ранее для возможности автоматических сортировок была создана цепочка правил в 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.

field_sort_manual.png

Если такого поля нет, создайте его в ручном режиме admin/structure/types/manage/subj/fields путем добавления поля с машинным именем field_sort_manual и типом "связь с материалом". При этом выберите также все типы нод, которые смогут участвовать в сортировке.

Убедитесь, что в настройках поля отмечены все типы материалов, для которых вы хотите разрешить ручную сортировку. Если какого-то типа нет, добавьте его в ручном режиме admin/structure/types/manage/subj/fields/field_sort_manual.

field_sort_manual_note_types.png

Использование ручной сортировки[править]

Теперь перейдите в папку, в которой вы хотите отсортировать в ручном режиме все или только часть ресурсов.

Перейдите в режим редактирования папки.

В поле ручной сортировке введите названия нод в том порядке, в котором вы хотите, чтобы они были упорядочены.

Сохраните папку.

field_sort_manual_edit_example.png

Как работает правило ручной сортировки 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.