Plesk SDK API позволяет встраивать информацию (в настоящий момент только персональные услуги) в некоторые элементы существующих объектов Активного списка. Для этого необходимо создать интерфейс pm_Hook_ActiveList. Он содержит следующие методы:

  • getItemServices($controller, $action, $itemId) возвращает массив параметров конфигурации службы, которые будут встроены в элемент с id=$itemId списка на странице /$contorller/$action. Параметры конфигурации службы:
    • title — название службы.
    • icon — значок службы.
    • link — ссылка на службу (необязательный параметр).
    • toolbar — массив инструментов службы (необязательный параметр).
    • messages — массив сообщений службы (необязательный параметр).

Чтобы проиллюстрировать этот подход, Plesk предлагает следующий пример проекта: https://github.com/plesk/ext-active-list-hook

Пример: Добавление персональных услуг в активный список «Сайты и домены»

src/plib/hooks/ActiveList.php

<?php
class Modules_<YourExtensionName>_ActiveList extends pm_Hook_ActiveList
{
    public function getItemServices($controller, $action, $itemId)
    {
        if ($controller !== 'web' || ($action !== 'view' && $action !== 'overview')) {
            return [];
        }

        return [
            [
                'icon' => pm_Context::getBaseUrl() . 'images/icon-service1.png',
                'title' => pm_Locale::lmsg('service1Title'),
                'link' => pm_Context::getActionUrl('service1', 'index') . '/id/' . $itemId,
                'toolbar' => [
                    [
                        'title' => pm_Locale::lmsg('action1Title'),
                        'link' => pm_Context::getActionUrl('service1', 'action1') . '/id/' . $itemId,
                    ],
                    [
                        'title' => pm_Locale::lmsg('action2Title'),
                        'link' => pm_Context::getActionUrl('service1', 'action2') . '/id/' . $itemId,
                    ],
                ],
            ],
            [
                'icon' => pm_Context::getBaseUrl() . 'images/icon-service2.png',
                'title' => pm_Locale::lmsg('service2Title'),
                'link' => pm_Context::getActionUrl('service2', 'index') . '/id/' . $itemId,
                'toolbar' => [
                    [
                        'title' => pm_Locale::lmsg('action3Title'),
                        'link' => pm_Context::getActionUrl('service2', 'action3') . '/id/' . $itemId,
                    ],
                ],
                'messages' => [
                    [
                        'icon' => pm_Context::getBaseUrl() . 'images/attention.png',
                        'info' => pm_Locale::lmsg('serviceMessage1'),
                        'noEscape' => true,
                    ],
                ],
            ],
        ];
    }
}