Дополнительный настройки

Сортировка по умолчанию

По умолчанию ресурсы сортируются по id.

Для изменения установить свойства $sortBy и $sortDirection в компоненте.

app/Http/Livewire/Admin/News/NewsList.php
<?php

namespace App\Http\Livewire\Admin\News;

use WebVovan\RockCms\Http\Livewire\ResourceListComponent;

class NewsList extends ResourceListComponent
{
    // Поле для сортировки
    public string $sortBy = 'title';
    
    // Направление сортировки
    public string $sortDirection = 'acs';
    
    ...
}

Количество ресурсов на странице

По умолчанию выводится 10 ресурсов на странице.

Для изменения установите свойство $perPage.

app/Http/Livewire/Admin/News/NewsList.php
<?php

namespace App\Http\Livewire\Admin\News;

use WebVovan\RockCms\Http\Livewire\ResourceListComponent;

class NewsList extends ResourceListComponent
{
    // Количество ресурсов на странице [5, 10, 15]
    public int $perPage = 10;
    
    ...
}

Пользовательские обработчики сортировки

Для настройки собственных обработчиков для сортировки полей используйте метод setSortHandlers().

Это может быть полезно если, к примеру, сайт мультиязычный и все переводы модели хранятся в отдельной таблице (как это реализовано в пакете astrotomic/laravel-translatable). В таком случае не получится просто отсортировать ресурсы по полю title и нужно будет использовать метод сортировки от создателей пакета.

app/Http/Livewire/Admin/News/NewsList.php
<?php

namespace App\Http\Livewire\Admin\News;

use WebVovan\RockCms\Http\Livewire\ResourceListComponent;

class NewsList extends ResourceListComponent
{
    ...
    
    /**
     * Установка обработчиков для сортировки
     *
     * @return array
     */
    public function setSortHandlers(): array
    {
        return [
            'title' => fn($builder, string $sortBy, string $sortDirection) => $builder->orderByTranslation($sortBy, $sortDirection),
        ];
    }

    ...
}

Пользовательские обработчики поиска

Если в свойстве $search указаны поля, которые загружаются через отношения, то для поиска по ним нужно добавить собственные функции в методе setSearchHandlers().

Ниже пример поиска по полю с мультиязычным заголовком (используется пакет astrotomic/laravel-translatable).

app/Http/Livewire/Admin/News/NewsList.php
<?php

namespace App\Http\Livewire\Admin\News;

use WebVovan\RockCms\Http\Livewire\ResourceListComponent;

class NewsList extends ResourceListComponent
{
    ...

    /**
     * Установка обработчиков для поиска
     *
     * @return array
     */
    public function setSearchHandlers(): array
    {
        return [
            'title' => fn($builder, string $field, string $searchWord) => $builder->whereTranslationLike($field, '%' . $searchWord . '%'),
        ];
    }
}

Last updated