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

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

Панель пути

image-77308.png

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

Заголовок

image-77309.png

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

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

image-77310.png

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

Вкладки

image-77311.png

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

Окно поиска

image-77312.png

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

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

image-77313.png

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

Для описания навигационной структуры вашего расширения используйте класс 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;
    }
}