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




Решал нечто подобное в прошлом. Получил, что работает в несколько шагов:
Заменить первое поле в вашем 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) и создать удобный путь в панировочных сухарях, чтобы пользователь мог перемещаться.