# Интеграция с навигацией в Plesk

Plesk SDK API позволяет описать способ структурирования страниц расширения и того, как пользователи могут перемещаться между ними. Чтобы лучше понять доступные опции, давайте рассмотрим различные элементы навигации в Plesk.

Панель пути

Этот элемент отображает иерархию путей, определяющую, где находится просматриваемая страница в навигационной структуре, и позволяет перемещаться вверх по это структуре. Обратите внимание, что панель пути работает не так, как строка навигации – она не показывает просмотренные страницы в порядке их просмотра (например, Домашняя страница > Домены> Домашняя страница > Инструменты и настройки > Журнал операций > Домашняя страница).

Заголовок

В большинстве случаев этот элемент отображает имя текущей страницы, за исключением страниц «Обзор объекта», на которых он отображает имя текущего объекта. На страницах «Свойства объекта», дополнительно к имени текущего объекта, он отображает текущую операцию, выполняемую над объектом, и позволяет вернуться на страницу «Обзор объекта» (так, как бы это делалось с помощью строки навигации).

Переключатель объектов

Этот элемент отображается на страницах «Обзор объекта» и «Свойства объекта» и позволяет переключаться между текущими объектами (например, доменами) без необходимости перехода на страницу, содержащую полный список этих объектов.

Вкладки

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

Окно поиска

Этот элемент позволяет переходить напрямую на конкретную страницу без необходимости выполнения последовательности переходов между страницами.

Главное меню навигации

Смотрите главу Добавление персональных кнопок, чтобы узнать, как взаимодействовать с этим элементом.

Для описания навигационной структуры вашего расширения используйте класс pm_Hook_Navigation. Этот хук должен содержать описание метода публичной функции getNavigation(), которая должна возвращать массив, включающий в себя конфигурацию страниц.

Параметры конфигурации страниц:

- controller (обязательный) – имя контроллера, используемого во время генерации ссылки href на страницу (тип: string).
- action (обязательный) – имя действия, используемого во время генерации ссылки href на страницу (тип: string).
- label (необязательный) – метка страницы, такая как „Home“ или „Blog“ (тип: string, по умолчанию будет использоваться локализованное сообщение с ключевыми контроллерами.<controller_name>.<action_name>.title).
- pages (необязательный) – дочерние страницы этой страницы. Это может быть массив, содержащий опции для каждой страницы (тип: array).
- tabbed (необязательный) – флажок, обозначающий, что страница является корневой при использовании вкладок (тип: boolean).
- type (необязательный) – имя класса, которое должно автоматически загружаться и должно расширять класс pm_Navigation_Page или pm_Navigation_OverviewPage. Эта опция используется для персональной реализации объектов страницы или для того, чтобы пометить страницу как «Обзор объекта». Этот класс используется при визуализации заголовка страницы, переключателя объектов и глобального поиска (тип: string).

По умолчанию родительской страницей для всех страниц верхнего уровня является страница «Управление расширениями». Если в расширении есть персональные кнопки с таким же URL, как страница верхнего уровня, то его родительская страница зависит от расположения персональной кнопки. Например, для страницы с такой же ссылкой, как у персональной кнопки в левом меню, родительской будет «Домашняя страница».

## Примеры

Создание простой структуры страниц

`src/plib/hooks/Navigation.php`

    <?php
    class Modules_<YourExtensionName>_Navigation extends pm_Hook_Navigation
    {
        public function getNavigation()
        {
            return [
                [
                    'controller' => 'index',
                    'action' => 'index',
                    'pages' => [
                        [
                            'controller' => 'blog',
                            'action' => 'index',
                            'pages' => [
                                [
                                    'controller' => 'blog',
                                    'action' => 'topic1',
                                ],
                                [
                                    'controller' => 'blog',
                                    'action' => 'topic2',
                                ],
                            ],
                        ],
                        [
                            'controller' => 'index',
                            'action' => 'about',
                        ],
                    ],
                ],
            ];
        }
    }

Не забудьте создать контроллеры, действия, скрипты представлений и выполнить локализацию заголовков, относящихся к вашим страницам.

Группировка нескольких страниц в одну страницу с вкладками

Используйте обработчик представления renderTabs() в скриптах представлений страниц, которые вы хотите сгруппировать. Затем добавьте опцию «tabbed = true» к конфигурации ее родительской страницы в конфигурации навигации, чтобы отметить ее как страницу с вкладками.

Страница «Обзор объекта»

Отметьте страницу как страницу обзора объекта:

`src/plib/hooks/Navigation.php`

    [
        'controller' => 'index',
        'action' => 'index',
        'type' => 'Modules_<YourExtensionName>_OverviewPage',
    ],

Класс страницы:

`src/plib/library/Objects.php`

    <?php
    class Modules_<YourExtensionName>_OverviewPage extends pm_Navigation_OverviewPage
    {
        public function getData() {
            $data = [];
            for ($i = 1; $i < 10; $i++) {
                $data[] = [
                    'id' => $i,
                    'title' => 'Object ' . $i,
                ];
            }
            return $data;
        }
    }