Пользовательские настройки: добавление новых опций в блок выбора количества элементов в Sonata Admin Bundle 3.57

Sonata Admin Bundle 3.57 – это набор инструментов для управления административной частью веб-приложения на основе Symfony framework. Этот пакет предоставляет множество готовых компонентов для создания админ-панели, включая блок выбора количества элементов на странице списка.

При использовании стандартного представления этого блока, пользователь может выбрать только опции, которые были заранее определены в коде приложения. Но что делать, если вам нужно добавить новые опции выбора количества элементов на странице?

Для этой цели Sonata Admin Bundle 3.57 предлагает несколько способов настройки блока выбора количества элементов.

Добавление настроек в админ-класс

Первый способ заключается в добавлении новых опций в секцию pager в админ-классе:

// src/Admin/PostAdmin.php

use Sonata\AdminBundle\Admin\AbstractAdmin;

class PostAdmin extends AbstractAdmin
{
    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper
            ->addIdentifier('title')
            ->add('author')
            ->add('category');

        $this->datagridValues['_per_page'] = [10, 25, 50, 100];
    }
}

В этом примере мы добавили новые опции выбора количества элементов на странице, передав массив значений в секцию pager в метод datagridValues. Пользователь теперь может выбрать одно из значений 10, 25, 50 или 100.

Создание пользовательского темплейта

Если вы хотите создать полностью настраиваемый блок выбора количества элементов, вы можете создать собственный темплейт. Для этого нужно выполнить следующие шаги:

  1. Создать файл list_per_page.html.twig в папке templates/CRUD. В этом файле вы можете задать свой дизайн для блока выбора количества элементов и установить доступные опции:
{% extends '@SonataAdmin/CRUD/list_outer_rows.html.twig' %}

{% block pager %}
    <div class="form-inline">
        {% transchoice "items_per_page" count=filter.getDataPager().count %}
            {{ 'showing'|transchoice({'1': '%count%', '2': '%count%'}, filter.getDataPager().count) }}
        {% endtranschoice %}

        {% for value, options in admin.datagrid.filters.per_page.choices %}
            <a href="{{ admin.generateUrl('list', admin.getFilterParameters({'_per_page': value})) }}" class="btn btn-default{% if value == admin.datagrid.filters.per_page.value %} active{% endif %}">
                {{ value }}
            </a>
        {% endfor %}
    </div>
{% endblock %}
  1. Указать в админ-классе путь к созданному темплейту:
// src/Admin/PostAdmin.php

use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Route\RouteCollection;

class PostAdmin extends AbstractAdmin
{
    protected function configureRoutes(RouteCollection $collection)
    {
        $collection->add('list', $this->getRouterIdParameter().'/list', [
            '_controller' => $this->getBaseControllerName().':list',
            '_twig_template' => 'CRUD/list_per_page.html.twig'
        ]);
    }
}

В этом примере мы переопределили стандартный маршрут list и указали новый темплейт в параметре _twig_template.

Использование этого метода позволяет реализовать полностью настраиваемый блок выбора количества элементов на странице.

Заключение

Sonata Admin Bundle 3.57 предоставляет простые и эффективные способы настройки блока выбора количества элементов на странице списка. Вы можете выбрать наиболее удобный для вас способ в зависимости от требований к вашему веб-приложению.

Смотри также: