{# calendar.twig - Универсальный компонент календаря Параметры: - events: Массив событий Пример: events: [ { id: 1, title: 'Событие 1', date: '2026-01-15', color: '#3B82F6', url: '/path/to/event' } ] - currentMonth: Текущий месяц в формате YYYY-MM - prevMonth: URL или параметр для предыдущего месяца - nextMonth: URL или параметр для следующего месяца - eventComponent: Имя Twig компонента для рендеринга событий (опционально) - onEventClick: JavaScript функция при клике на событие (опционально) - showLegend: Показывать легенду (опционально, по умолчанию true) - legend: Массив для легенды (опционально) Пример: legend: [ { name: 'Этап 1', color: '#3B82F6' } ] #} {# Навигация по месяцам #} {% if showNavigation|default(true) %}
Предыдущий
{{ monthName }}
Следующий
{% endif %} {# Календарь #}
{# Дни недели #}
{% for day in ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'] %}
{{ day }}
{% endfor %}
{# Сетка календаря #}
{# Пустые ячейки до первого дня #} {% for i in 0..(firstDayOfWeek - 1) %}
{% endfor %} {# Дни месяца #} {% for day in 1..daysInMonth %} {% set dateStr = currentMonth ~ '-' ~ (day < 10 ? '0' ~ day : day) %} {% set dayEvents = eventsByDate[dateStr]|default([]) %} {% set isToday = dateStr == today %}
{{ day }}
{% for event in dayEvents|slice(0, 3) %} {% if eventComponent is defined %} {{ include(eventComponent, {event: event}) }} {% else %} {{ include('@components/calendar/default_event.twig', {event: event, onEventClick: onEventClick|default('')}) }} {% endif %} {% endfor %} {% if dayEvents|length > 3 %}
+{{ dayEvents|length - 3 }} ещё
{% endif %}
{% endfor %} {# Пустые ячейки после последнего дня #} {% set remainingCells = 7 - ((firstDayOfWeek + daysInMonth) % 7) %} {% if remainingCells < 7 %} {% for i in 1..remainingCells %}
{% endfor %} {% endif %}
{# Легенда #} {% if showLegend|default(true) and (legend is defined or events is defined) %}
Легенда
{% if legend is defined %} {% for item in legend %} {{ item.name }} {% endfor %} {% else %} {# Автоматическая легенда из типов событий #} {% set uniqueColors = {} %} {% for event in events %} {% if event.color is defined and event.color not in uniqueColors %} {{ event.title }} {% set uniqueColors = uniqueColors|merge([event.color]) %} {% endif %} {% endfor %} {% endif %}
{% endif %}