Сортировка Sortable
Делаем самую простую сортировку с помощью трейта Sortable из Winter CMS. Данный трейт просто задаёт порядковый номер (1, 2, 3, 4, 5, ...) каждому экземпляру модели. Собственно по этому порядковому номеру потом и сортируется коллекция при запросе.
Моделе, экземпляры которой будут сортироваться, нужно добавить поле sort_order
. Определение поля (столбца в таблице базы данных) выглядит так:
$table->integer('sort_order')->default(0);
Добавляем трейт Sortable
в модель:
class Album extends Model
{
use \Winter\Storm\Database\Traits\Sortable;
}
При добавлении этого признака в существующую модель с уже заполнеными ранее данными, потребуется полю sort_order
присвоить значения, прежде чем этот трейт заработает правильно. Для этого для каждой строки необходимо вручную проставить значения полю sort_order
или же можно выполнить SQL-запрос в котором полю sort_order
присвоить значение из поля id
. Тем самым значения будут уникальны для каждой записи. Пример такого запроса:
UPDATE myvendor_myplugin_mymodelrecords SET sort_order = id
Далее реализуем интерфейс сортировки в бэкенде Winter CMS.
В контроллер добавляем поведение сортировки и конфигурационный файл для неё:
namespace AuthorName\Gallery\Controllers;
class Albums extends Controller
{
public $implement = [
\Backend\Behaviors\ReorderController::class,
];
public $reorderConfig = 'config_reorder.yaml';
// ...
}
В папке контроллера создаём файл config_reorder.yaml
со следующими данными:
# ===================================
# Reorder Behavior Config
# ===================================
# Reorder Title
title: Сортировка альбомов
# Attribute name
nameFrom: name
# Model Class name
modelClass: AuthorName\Gallery\Models\Album
# Toolbar widget configuration
toolbar:
# Partial for toolbar buttons
buttons: reorder_toolbar
Расшифровка полей из данного файла конфига:
-
title
– заголовок страницы сортировки; -
nameFrom
– поле модели из которого будет браться название для сортируемых элементов; -
modelClass
– модель, экземпляры которой сортируются; -
toolbar/buttons
– путь к паршилу html-разметки тулбара выводимого над списком сортировки.
Создаём новый файл reorder.php
cо следующим содержимым:
<?= $this->reorderRender() ?>
Далее создаём файл _reorder_toolbar.php
. Это будет тулбар на странице сортировки. В нём ссылка в виде кнопки, которая позволяет вернуться к списку экземпляров модели. Содержимое файла:
<div data-control="toolbar">
<a href="<?= Backend::url('authorname/gallery/albums') ?>" class="btn btn-primary wn-icon-caret-left">Вернутся к списку альбомов</a>
</div>
На этом сортировка полностью реализована. Осталось добавить в интерфейс ссылку которая будет вести на страницу сортировки. Для этого в файл _list_toolbar.php
расположенный в папке контроллера добавляем кнопку:
<a
href="<?= Backend::url('authorname/gallery/albums/reorder') ?>"
class="btn btn-default wn-icon-sort"
>
Сортировать альбомы
</a>
Добавлять нужно во внутрь дива тулбара в подходящее вам место среди других кнопок.
*** Войдите чтобы писать комментарии.