{# table.twig - Универсальный компонент таблицы с AJAX-загрузкой Параметры: - id: ID контейнера таблицы (обязательно) - url: URL для AJAX-загрузки данных (обязательно) - perPage: Количество записей на странице (по умолчанию 10) - columns: Конфигурация колонок Пример: columns: { name: { label: 'Имя', width: '40%' }, email: { label: 'Email' } } - items: Массив объектов для отображения - actionsConfig: Конфигурация действий строки Пример: actionsConfig: [ { label: 'Ред.', url: '/clients/edit/{id}', icon: 'bi bi-pencil', class: 'btn-outline-primary' }, { label: 'Удалить', url: '/clients/delete/{id}', icon: 'bi bi-trash', class: 'btn-outline-danger' } ] - emptyMessage: Сообщение при отсутствии данных - emptyActionUrl: URL для кнопки действия - emptyActionLabel: Текст кнопки - emptyIcon: FontAwesome иконка - tableClass: Дополнительные классы для таблицы #}
{# Заголовок таблицы #} {{ include('@components/table/table_header.twig', { columns: columns, sort: sort|default(''), order: order|default('asc'), filters: filters|default({}), actions: actions|default(false) }) }} {# Тело таблицы #} {% if items is defined and items|length > 0 %} {% for item in items %} {# Рендерим каждую колонку #} {% for key, column in columns %} {% endfor %} {# Колонка действий #} {% if actionsConfig is defined and actionsConfig|length > 0 %} {% endif %} {% endfor %} {% else %} {# Пустое состояние #} {% endif %} {# Футер с пагинацией #}
{{ render_cell(item, key, column)|raw }} {{ render_actions(item, actionsConfig)|raw }}
{% if emptyIcon is defined and emptyIcon %}
{% endif %}

{{ emptyMessage|default('Нет данных') }}

{% if emptyActionUrl is defined and emptyActionUrl %} {% if emptyActionIcon is defined and emptyActionIcon %} {% endif %} {{ emptyActionLabel|default('Добавить') }} {% endif %}
{{ include('@components/table/pagination.twig', { pagination: pagerDetails, id: id }) }}