Plesk SDK API allows you to embed information (currently only custom services) into certain items of existing Active List objects. To do that, implement the pm_Hook_ActiveList interface. It provides the following methods:

  • getItemServices($controller, $action, $itemId) returns the array of configuration parameters of the service that will be embedded in an item with id=$itemId list on /$contorller/$action page. Service configuration:
    • title - the title of the service.
    • icon - the icon of the service.
    • link - the link to the service (optional).
    • toolbar - an array of tools of service (optional).
    • messages - an array of service messages (optional).

To illustrate the approach, the following sample project is provided by Plesk: https://github.com/plesk/ext-active-list-hook

Example: Embedding custom services to Websites & Domains active list

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,
                    ],
                ],
            ],
        ];
    }
}