{# table.twig - Универсальный компонент таблицы с AJAX-загрузкой Параметры: - id: ID контейнера таблицы (обязательно) - url: URL для AJAX-загрузки данных (обязательно) - perPage: Количество записей на странице (по умолчанию 10) - columns: Ассоциативный массив ['name' => ['label' => 'Name', 'width' => '40%']] - sort: Текущий столбец сортировки - order: Направление сортировки - filters: Текущие значения фильтров - items: Массив объектов модели (автоматический рендеринг) - rows: Предварительно построенные строки (устаревший формат, для совместимости) - emptyMessage: Сообщение при отсутствии данных - emptyActionUrl: URL для кнопки действия (опционально) - emptyActionLabel: Текст кнопки действия (опционально) - emptyIcon: FontAwesome иконка (опционально) - tableClass: Дополнительные классы для таблицы #} {% set hasRows = (rows is defined and rows|length > 0) or (items is defined and items|length > 0) %}
{# Заголовок таблицы #} {{ include('@components/table/table_header.twig', { columns: columns, sort: sort|default(''), order: order|default('asc'), filters: filters|default({}), actions: actions|default(false) }) }} {# Тело таблицы #} {% if hasRows %} {% if rows is defined and rows|length > 0 %} {# Старый формат: предварительно построенные строки #} {% for row in rows %} {% for cell in row.cells %} {% endfor %} {% if row.actions is defined %} {% endif %} {% endfor %} {% elseif items is defined and items|length > 0 %} {# Новый формат: автоматический рендеринг из объектов модели #} {% set columnKeys = columns|keys %} {% for item in items %} {# Ячейки данных #} {% for columnKey in columnKeys %} {% endfor %} {# Колонка действий #} {% if actions is defined and actions %} {% endif %} {% endfor %} {% endif %} {% else %} {# Пустое состояние #} {% endif %}
{{ cell.content|raw }} {{ row.actions|raw }}
{{ attribute(item, columnKey)|default('—') }} {% if item.actions is defined %}{{ item.actions|raw }}{% endif %}
{% 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 }) }}