## Шаблон usermenu.tpl

Шаблон используется для генерации пользовательского меню.

Если пользователь не залогинен - краткое меню авторизации.
Если пользователь залогинен - ссылки на выход, редактирование своего профиля и админ-панель сайта.

В зависимости от используемого режима (форма авторизации/меню пользователя) доступен разный набор переменных и блоков.

## Доступные переменные

Блоки:

{% if (global.flags.isLogged) %} "Панель пользователя" {% else %} "Форма авторизации" {% endif %} - Содержимое обоих блоков "панель пользователя" и "Форма авторизации".
{% if not (global.flags.isLogged) %} "Форма авторизации" {% endif %} - Содержимое блока только "Форма авторизации".
{% if (global.flags.isLogged) %} "Панель пользователя" {% endif %} - Содержимое блока только "панель пользователя".

### Доступные переменные блока "Форма авторизации"

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

| Переменная          | Описание                                                           |
| ------------------- | ------------------------------------------------------------------ |
| `{{ form_action }}` | URL формы-обработчика                                              |
| `{{ redirect }}`    | Значение для скрытого поля redirect (возврат на исходную страницу) |
| `{{ reg_link }}`    | Ссылка на страницу регистрации                                     |
| `{{ lost_link }}`   | Ссылка на восстановление пароля                                    |

#### Поля формы

Форма должна использовать метод **POST** и содержать следующие поля:

| Имя поля   | Тип      | Описание                           |
| ---------- | -------- | ---------------------------------- |
| `redirect` | hidden   | Содержит значение `{{ redirect }}` |
| `username` | text     | Поле для ввода логина              |
| `password` | password | Поле для ввода пароля              |

#### Языковые переменные

| Переменная                   | Описание                               |
| ---------------------------- | -------------------------------------- |
| `{{ lang['name'] }}`         | Текст-описание для поля username       |
| `{{ lang['password'] }}`     | Текст-описание для поля password       |
| `{{ lang['login'] }}`        | Текст для кнопки "войти"               |
| `{{ lang['registration'] }}` | Текст для ссылки "регистрация"         |
| `{{ lang['lostpassword'] }}` | Текст для ссылки "восстановить пароль" |

### Доступные переменные блока "Панель пользователя"

#### Переменные пользователя

| Переменная               | Описание                                               |
| ------------------------ | ------------------------------------------------------ |
| `{{ global.user.name }}` | Отображаемое имя (логин) пользователя                  |
| `{{ pthumb_url }}`       | Ссылка на уменьшенную фотографию пользователя          |
| `{{ avatar_url }}`       | Ссылка на иконку пользователя (поддержка gravatar.com) |

#### Административные ссылки

| Переменная           | Описание                     | Требуемое право             |
| -------------------- | ---------------------------- | --------------------------- |
| `{{ admin_url }}`    | Ссылка на админ-панель       | `isPerm()`                  |
| `{{ addnews_link }}` | Ссылка на добавление новости | `isPerm('#admin:news:add')` |

#### Пользовательские ссылки

| Переменная           | Описание                       | Примечание              |
| -------------------- | ------------------------------ | ----------------------- |
| `{{ profile_link }}` | Ссылка на профиль пользователя | Требует плагин uprofile |
| `{{ logout_link }}`  | Ссылка для выхода из аккаунта  | -                       |

#### Языковые переменные

| Переменная                 | Описание                 |
| -------------------------- | ------------------------ |
| `{{ lang['adminpanel'] }}` | Текст "Админ-панель"     |
| `{{ lang['addnews'] }}`    | Текст "Добавить новость" |
| `{{ lang['myprofile'] }}`  | Текст "Мой профиль"      |
| `{{ lang['logout'] }}`     | Текст "Завершить сеанс!" |

## Проверка прав доступа

Для проверки прав доступа используется функция `isPerm()`. Каждая функция админ-панели требует отдельной проверки!

### Синтаксис

```twig
{% if isPerm() %}
    {# Общий доступ к админ-панели #}
{% endif %}

{% if isPerm('#admin:news:add') %}
    {# Право на добавление новостей #}
{% endif %}

{% if isPerm('#admin:news:edit') %}
    {# Право на редактирование новостей #}
{% endif %}
```

### Важные правила

**⚠️ КРИТИЧЕСКИ ВАЖНО:** Проверяйте права **отдельно** для каждой функции админ-панели!

- `isPerm()` - проверяет только **общий доступ** к админ-панели
- `isPerm('#admin:news:add')` - проверяет право **добавления новостей**
- `isPerm('#admin:news:edit')` - проверяет право **редактирования новостей**

**Нельзя группировать** разные права в одном блоке `{% if isPerm() %}`:

```twig
{# ❌ НЕПРАВИЛЬНО - все ссылки показываются при наличии любого права #}
{% if isPerm() %}
    <a href="{{ admin_url }}">Админ-панель</a>
    <a href="{{ addnews_link }}">Добавить новость</a>
{% endif %}

{# ✅ ПРАВИЛЬНО - каждое право проверяется отдельно #}
{% if isPerm() %}
    <a href="{{ admin_url }}">Админ-панель</a>
{% endif %}
{% if isPerm('#admin:news:add') %}
    <a href="{{ addnews_link }}">Добавить новость</a>
{% endif %}
```

### Основные варианты использования

| Проверка                                  | Описание                        |
| ----------------------------------------- | ------------------------------- |
| `{% if isPerm() %}`                       | Общий доступ к админ-панели     |
| `{% if isPerm('#admin:news:add') %}`      | Право добавления новостей       |
| `{% if isPerm('#admin:news:edit') %}`     | Право редактирования новостей   |
| `{% if isPerm('#admin:news:moderate') %}` | Право модерации новостей        |
| `{% if isPerm('#admin:categories') %}`    | Право управления категориями    |
| `{% if isPerm('#admin:users') %}`         | Право управления пользователями |
| `{% if isPerm('#admin:config') %}`        | Право изменения настроек        |
| `{% if isPerm('#admin:plugins') %}`       | Право управления плагинами      |

## Пример заполнения шаблона

В примере показан минимальный набор для полнофункциональной работы с правильной проверкой прав:

```twig
{% if (global.flags.isLogged) %}
    <div class="user-menu">
        <p>Привет, {{ global.user.name }}!</p>

        {# Ссылка на админ-панель - проверяем общий доступ #}
        {% if isPerm() %}
            <a href="{{ admin_url }}" target="_blank">{{ lang['adminpanel'] }}</a>
        {% endif %}

        {# Ссылка на добавление новости - проверяем ОТДЕЛЬНО право добавления #}
        {% if isPerm('#admin:news:add') %}
            <a href="{{ addnews_link }}">{{ lang['addnews'] }}</a>
        {% endif %}

        {# Ссылка на профиль #}
        <a href="{{ profile_link }}">{{ lang['myprofile'] }}</a>

        {# Ссылка на выход #}
        <a href="{{ logout_link }}">{{ lang['logout'] }}</a>
    </div>
{% else %}
    {# Форма авторизации для неавторизованных пользователей #}
    <form name="login" method="post" action="{{ form_action }}" id="login">
        <input type="hidden" name="redirect" value="{{ redirect }}" />

        <label>
            {{ lang['name'] }}:
            <input type="text" name="username" required />
        </label>

        <label>
            {{ lang['password'] }}:
            <input type="password" name="password" required />
        </label>

        <button type="submit">{{ lang['login'] }}</button>

        <div class="auth-links">
            <a href="{{ reg_link }}">{{ lang['registration'] }}</a>
            <a href="{{ lost_link }}">{{ lang['lostpassword'] }}</a>
        </div>
    </form>
{% endif %}
```

## Расширенный пример с дополнительными правами

Пример с проверкой нескольких прав для разных элементов меню:

```twig
{% if (global.flags.isLogged) %}
    <nav class="admin-menu">
        {# Общий доступ к админ-панели #}
        {% if isPerm() %}
            <a href="{{ admin_url }}" class="menu-item">
                <i class="icon-dashboard"></i> Админ-панель
            </a>
        {% endif %}

        {# Управление новостями - несколько отдельных проверок #}
        {% if isPerm('#admin:news:add') %}
            <a href="{{ addnews_link }}" class="menu-item">
                <i class="icon-plus"></i> Добавить новость
            </a>
        {% endif %}

        {% if isPerm('#admin:news:moderate') %}
            <a href="/admin/news/moderate" class="menu-item">
                <i class="icon-check"></i> Модерация новостей
            </a>
        {% endif %}

        {# Управление категориями #}
        {% if isPerm('#admin:categories') %}
            <a href="/admin/categories" class="menu-item">
                <i class="icon-folder"></i> Категории
            </a>
        {% endif %}

        {# Управление пользователями #}
        {% if isPerm('#admin:users') %}
            <a href="/admin/users" class="menu-item">
                <i class="icon-users"></i> Пользователи
            </a>
        {% endif %}

        {# Настройки системы #}
        {% if isPerm('#admin:config') %}
            <a href="/admin/config" class="menu-item">
                <i class="icon-settings"></i> Настройки
            </a>
        {% endif %}

        {# Плагины для пользователя #}
        {% if pluginIsActive('bookmarks') %}
            <a href="/bookmarks" class="menu-item">
                <i class="icon-bookmark"></i> Закладки
            </a>
        {% endif %}

        {# Стандартные ссылки #}
        <a href="{{ profile_link }}" class="menu-item">
            <i class="icon-user"></i> {{ lang['myprofile'] }}
        </a>

        <a href="{{ logout_link }}" class="menu-item">
            <i class="icon-logout"></i> {{ lang['logout'] }}
        </a>
    </nav>
{% endif %}
```

## Примечания

> **Примечание:** Функция `isPerm()` проверяет права на основе настроек в админ-панели (раздел "Управление пользователями" → "Группы пользователей").

> **Внимание:** Устаревший синтаксис `[if-have-perm]...[/if-have-perm]` больше не поддерживается. Используйте `{% if isPerm() %}...{% endif %}`.

## См. также

- [Шаблонизатор TWIG](twig.md) - полное руководство по использованию TWIG
- [Управление пользователями](../users.md) - настройка групп и прав доступа
- [Справочник Twig-переменных](../twig-variables.md) - все доступные переменные
- [Главный шаблон (main.tpl)](main.tpl.md) - основной шаблон сайта
