# Добавление персональных данных к спискам в Plesk

Plesk SDK API позволяет добавлять персональные данные к спискам объектов Plesk (таких как домены, тарифные планы и так далее).

Примечание

Это API работает только для страниц Zend (страниц, URL-адреса которых содержат `/admin` или `/smb`)

Чтобы добавлять данные в списки, которые уже существуют в графическом интерфейсе Plesk GUI, создайте абстрактный класс pm_Hook_SimpleList. Он содержит следующие методы:

- isEnabled($controller, $action, $activeList) – определяет, какие списки будут обрабатываться хуком.

- getDataProvider($controller, $action, $activeList, $data) – расширяет или заменяет оригинальный поставщик данных. Поставщик данных может быть массивом или экземпляром Zend_Db_Select.

  Примечание

  Вы не можете изменить тип $data из массива на Zend_Db_Select и наоборот. Этот метод в первую очередь используется для добавления и/или удаления строк в наборе данных.

- getData($controller, $action, $activeList, $data) – расширяет или заменяет оригинальный набор данных перед тем, как отправить его клиенту. Этот метод в основном используется для небольших изменений, таких как фильтрация и сортировка данных на текущей странице.

  Мы настоятельно рекомендуем вам использовать префикс (например, ext<YourExtensionId>) для именования полей.

- getColumns($controller, $action, $activeList) – описывает колонки, которые будут добавлены к списку.

  Колонки определяются аналогично методу pm_View_List_Simple::setColumns().

  По умолчанию новая колонке будет добавлена в конце списка. Чтобы определить местоположение новой колонки, вы можете указать значения параметров insertBefore или insertAfter в определении колонки. Эти параметры могут принимать следующие значения:

  - Положительное целое число – номер колонки с начала списка.

  - Отрицательное целое число – номер колонки с конца списка.

  - Строка – свойство dataIndex существующей колонки.

- getColumnsOverride($controller, $action, $activeList) – описывает способ, которым будут изменены некоторые существующие колонки.

## Примеры

Определение того, какой список будет управляться хуком

`src/plib/hooks/SimpleList.php`

    <?php
    class Modules_<YourExtensionName>_SimpleList extends pm_Hook_SimpleList
    {
        public function isEnabled($controller, $action, $activeList)
        {
            // Modify only domains lists
            return $controller === 'domain' && $action === 'list'
                || $controller === 'customer' && $action === 'domains'
                || $controller === 'reseller' && $action === 'domains';
        }
    }

Скрытие всех доменов, принадлежащих клиенту Ganesh Kamala

`src/plib/hooks/SimpleList.php`

    <?php
    class Modules_<YourExtensionName>_SimpleList extends pm_Hook_SimpleList
    {
        public function getDataProvider($controller, $action, $activeList, $data)
        {
            // Hide all domains for client with id 5
            $data->where('c.id <> ?', 5);

            return $data;
        }
    }

Увеличение значений в колонке „Использование диска“

`src/plib/hooks/SimpleList.php`

    <?php
    class Modules_<YourExtensionName>_SimpleList extends pm_Hook_SimpleList
    {
        public function getData($controller, $action, $activeList, $data)
        {
            foreach ($data as &$row) {
                 $row['realSize'] += 1048576;
            }

            return $data;
        }
    }

Изменение названия колонки с «Подписчик» на «Владелец»

`src/plib/hooks/SimpleList.php`

    <?php
    class Modules_<YourExtensionName>_SimpleList extends pm_Hook_SimpleList
    {
        ...
        public function getColumnsOverride($controller, $action, $activeList)
        {
            return [
                'ownerName' => [
                    'title' => 'Owner',
                ],
            ];
        }
        ...
    }

Скрытие колонки „Дата создания“

`src/plib/hooks/SimpleList.php`

    <?php
    class Modules_<YourExtensionName>_SimpleList extends pm_Hook_SimpleList
    {
        ...
        public function getColumnsOverride($controller, $action, $activeList)
        {
            return [
                'setupDate' => [
                   'isVisible' => false,
                ],
            ];
        }
        ...
    }

Добавление четвертой справа колонки с названием „Random“, содержащей случайные числа от 0 до 100

`src/plib/hooks/SimpleList.php`

    <?php
    class Modules_<YourExtensionName>_SimpleList extends pm_Hook_SimpleList
    {
        ...
        public function getData($controller, $action, $activeList, $data)
        {
             foreach ($data as &$row) {
                 $row['extHookSimplelistRand'] = rand(0, 100);
            }

            return $data;
        }
        public function getColumns($controller, $action, $activeList)
        {
            return [
                'extHookSimplelistRand' => [
                    'title' => 'Random',
                    'insertBefore' => -3,
                ],
            ];
        }
        ...
    }

Вы можете найти пример расширения, иллюстрирующий этот подход, здесь.