Plesk SDK API позволяет расширять формы Plesk, добавляя в них собственное содержимое. Соответствующий хук позволяет добавлять элементы управления из расширения в любую форму Plesk, например:

  • Секция развертывания Git на странице создания домена.
  • Приложения Ruby / Python на странице создания домена.
  • Ссылка на учетные записи в социальных сетях в профиле.
  • Двухфакторная авторизация в профиле.

Этот хук разработан для добавления подформ из всех расширений во время визуализации формы. Можно использовать экземпляры pm_Form_SubForm, но это необязательно.

Примечание: Поддерживаются только формы Zend (те, у которых URL-адрес начинается с /smb/ и /admin/).

Жизненный цикл каждой формы Plesk состоит из 3 этапов:

  • init: добавление элементов с первоначальными значениями.
  • isValid: проверка валидаторов для каждого элемента, перезаписанный метод может предотвратить или расширить валидацию.
  • process: выполнение действий, сохранение новых значений и так далее.

Каждый этап инициирует выполнение соответствующего метода в подформе. Чтобы определить, какая форма будет обрабатываться хуком, в хуке передаются следующие аргументы: $controller, $action и $formId.

Примеры

Хук должен быть создан в plib/hooks/Form.php

class Modules_Git_Form extends pm_Hook_Form
{
    public function getSubForms($controller, $action, $formId)
    {
        if (in_array($formId, [static::FORM_CREATE_SUBSCRIPTION, static::FORM_CREATE_CUSTOMER])) {
            $subForm = new AddWithDomain(['context' => [
                'isSubscriptionCreation' => true,
            ], 'moveBefore' => 'subscription-subscriptionInfo']);
        } elseif (in_array($formId, [static::FORM_CREATE_DOMAIN, static::FORM_CREATE_SUBDOMAIN])) {
            $subForm = new AddWithDomain(['context' => [
                'isDomain' => static::FORM_CREATE_DOMAIN === $formId,
                'isSubscriptionCreation' => false,
            ], 'moveAfter' => 'hostingSettings']);
        } else {
            return [];
        }
        return ['git' => $subForm];
    }
}