Есть в OctoberCMS такая полезная штука — бихевиор для ручной сортировки моделей. Например, чтобы перетаскиванием отсортировать категории по значимости (и вложенности). Использовать его для своих моделей — очень просто, вот страничка в документации. Подключаем бихевиор к классу-контроллеру, заполняем конфиг, а в модели используем трейт Sortable
(или NestedTree
). А что такое бихевиор, можно тоже прочитать в доках.
Но проблема в том, что из коробки можно заставить этот бихевиор работать только на одном уровне. Вот есть все экземпляры модели одного класса — можно их отсортировать. А мне нужно сделать интерфейс для сортировки фотографий, принадлежащих альбомам. То есть отсортировать только фотокарточки внутри отдельно взятого альбома, без всех остальных.
Бихевиор ReorderController
для этого использовать не получится, придется строить сортировку вручную. Однако если покопаться, как устроен ReorderController
, его шаблоны и трейт Sortable
, можно сделать свою сортировку по аналогии и даже не дублировать какую-то часть кода. Об этом и поговорим.