# =========================================================================== #
# NG CMS // Плагины // XMenu                                            #
# =========================================================================== #

# Плагин XMenu для NG-CMS (TWIG only) с поддержкой статических страниц

## Описание

Плагин XMenu предоставляет расширенные возможности создания и управления меню на сайте через TWIG-шаблоны,
 включая поддержку как категорий новостей, так и статических страниц.

## Основные возможности

- Поддержка 9 независимых меню
- Гибкая настройка отображения категорий и статических страниц
- Возможность кеширования для ускорения работы
- Поддержка разных шаблонов для каждого меню
- Показ количества новостей в категориях (опционально)
- Интеграция со статическими страницами NG-CMS

## Установка

1. Загрузите папку плагина в `/engine/plugins/`
2. Активируйте плагин в админ-панели:  
   **Настройки → Плагины → XMenu → Активировать**
3. Настройте привязку категорий и статических страниц к меню:  
   **Настройки → XMenu → Конфигурация**

## Настройка плагина

После установки перейдите в **Настройки → XMenu**:

### Основные настройки:

- Привязка категорий и статических страниц к меню:
  - `#` — элемент отображается в меню
  - `_` — элемент скрыт

### Дополнительные настройки:

| Настройка | Описание | Значения |
|-----------|----------|----------|
| **Источник шаблонов** | Откуда загружать TWIG-шаблоны | `0` – Шаблон сайта<br>`1` – Плагин |
| **Кеширование** | Ускорение загрузки меню | `1` – Включено<br>`0` – Выключено |
| **Время жизни кеша** | Через сколько секунд обновлять кеш | По умолчанию `3600` (1 час) |
| **Показывать статические страницы** | Включить статические страницы в меню | `1` – Да<br>`0` – Нет |

## Вывод меню в шаблоне

Используйте TWIG-функцию `callPlugin()`:

```twig
{{ callPlugin('xmenu.show', {
    menu_id: 1,             // ID меню (1-9)
    template: 'custom_menu', // Имя шаблона (необязательно)
    show_news: 1,           // Показывать кол-во новостей (1/0)
    show_static: 1,         // Показывать статические страницы (1/0)
    debug: 0                // Режим отладки (1/0)
}) }}
```

### Параметры вызова:

| Параметр | Обязательный? | Значение по умолчанию | Описание |
|----------|--------------|----------------------|----------|
| `menu_id` | Да | — | Номер меню (1-9) |
| `template` | Нет | `xmenu` | Имя TWIG-шаблона |
| `show_news` | Нет | `1` | Показывать кол-во новостей (1 – да, 0 – нет) |
| `show_static` | Нет | `1` | Показывать статические страницы (1 – да, 0 – нет) |
| `debug` | Нет | `0` | Логирование ошибок (1 – включить) |

## Шаблоны

Плагин ищет шаблоны в двух местах (в порядке приоритета):
1. Шаблон сайта: `/templates/ВАШ_ШАБЛОН/plugins/xmenu/`
2. Плагин: `/engine/plugins/xmenu/tpl/`

### Доступные шаблоны:
- `xmenu.tpl` – стандартный шаблон (используется по умолчанию)
- Можно создавать свои шаблоны, например: `custom_menu.tpl`

## Переменные в TWIG-шаблоне

Внутри шаблона доступны:

| Переменная | Тип | Описание |
|------------|-----|----------|
| `items` | array | Массив элементов меню |
| `items[].type` | string | Тип элемента (`category` или `static`) |
| `items[].id` | int | ID элемента |
| `items[].name` | string | Название элемента |
| `items[].url` | string | Ссылка на элемент |
| `items[].active` | bool | Активен ли элемент (true/false) |
| `items[].news_count` | int | Количество новостей в категории (только для type=category) |
| `items[].alt_name` | string | Альтернативное имя (только для type=static) |
| `menu_id` | int | ID текущего меню |
| `show_news` | bool | Показывать ли кол-во новостей |
| `show_static` | bool | Показывать ли статические страницы |
| `tpl_url` | string | Путь к папке с шаблонами |

## Пример TWIG-шаблона (xmenu.tpl)

```twig
<ul class="xmenu menu-{{ menu_id }}">
    {% for item in items %}
        <li class="{{ item.type }} {{ item.active ? 'active' : '' }}">
            <a href="{{ item.url }}" title="{{ item.name }}">
                {{ item.name }}
                {% if item.type == 'category' and show_news and item.news_count > 0 %}
                    <span class="news-count">({{ item.news_count }})</span>
                {% endif %}
            </a>
        </li>
    {% endfor %}
</ul>

<style>
    .xmenu .static { color: #4a6ea9; }
    .xmenu .category { color: #333; }
    .xmenu .active { font-weight: bold; }
    .news-count { font-size: 0.8em; color: #666; }
</style>
```

## Особенности работы со статическими страницами

1. Ссылки генерируются в том же формате, что и в административной панели NG-CMS
2. Поддерживаются все параметры статических страниц (altname и id)
3. Автоматически определяется правильный формат URL в зависимости от конфигурации маршрутизации

## Итог

Плагин XMenu предоставляет:
- Полноценную поддержку как категорий, так и статических страниц
- Гибкие настройки через админку
- Поддержку кеширования для повышения производительности
- Возможность создания произвольных шаблонов под любой дизайн
- Полный контроль над меню через TWIG

Идеальное решение для современных сайтов на NG-CMS! 🚀