Сгруппированный вид для наборов данных в виде списка администраторов сонаты

Мне интересно, есть ли простой способ реализовать групповое представление для наборов данных, сгруппированных по его «корневому» элементу. Допустим, у меня есть "физическое лицо". Многие люди могут иметь «корневого» человека, которому они принадлежат. Поэтому я бы добавил ссылку на само физическое лицо.

Теперь я не хочу отображать всех людей в виде плоского списка. Вместо этого я хочу отображать только каждого корневого человека, и при щелчке по этому набору данных открывается аккордеон с подчиненными лицами ... как это возможно?

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

Может ли кто-нибудь дать мне подсказку, какому подходу мне следует придерживаться? Если бы я мог повторно использовать большую часть функций администратора сонаты, особенно шаблоны ...

Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
472
1

Ответы 1

Решал нечто подобное в прошлом. Получил, что работает в несколько шагов:

Заменить первое поле в вашем Datagrid

С помощью этого кода вы говорите, что хотите использовать my_custom_template.html.twig для визуализации этого поля (в вашем классе администратора).

protected function configureListFields(ListMapper $list)
{
    $list->add('yourFirstField', null, ['template' => 'my_custom_template.html.twig'])
}

Включите фильтрацию для yourFirstField

Подготовьте фильтрацию для вашего родительского поля (в вашем классе администратора)

protected function configureDatagridFilters(DatagridMapper $filter)
{
    $filter->add('parent');
}

Напишите собственный шаблон для первого поля

Затем в вашем настраиваемом шаблоне, который вы используете, чтобы установить значение фильтра при нажатии на ссылку.

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %} 
{% block field %}
    {% if object.isRoot %}
        <a href = "{{ path('your_route_list", {'filter[name][parent]': object.id} }}">{{ object.name }}</a>
    {% else %}
        {{ object.name }}
    {% endif %}
{% endblock %}

Позже вы можете переопределить службу построения панировочных сухарей (https://sonata-project.org/bundles/admin/master/doc/reference/breadcrumbs.html) и создать удобный путь в панировочных сухарях, чтобы пользователь мог перемещаться.

Другие вопросы по теме