Настройки плагина

Содержание...

Если плагин требует настроек со стороны пользователя, то поля для ввода или выбора значений настроек необходимо перечислить в конфигурационном файле плагина lib/config/settings.php.

Набор полей настроек плагина формируется в виде ассоциативного массива со списком параметров, как показано ниже:

<?php

return [
    'setting_key' => [
        'title'        => '',
        'description'  => '',
        'value'        => '',
        'control_type' => '',
        'options'      => [
            array (
                'value'       => '',
                'title'       => '',
                'description' => '',
            ),
            ...
        ],
        'control_separator' => '<hr>',
    ],
    ...
];

Описание параметров

  • setting_key — произвольный уникальный текстовый идентификатор поля настроек
  • title — наименование поля настроек
  • description — описание поля настроек (отображается под полем)
  • control_type — тип поля для отображения и редактирования значения настроек
  • options — массив значений для множественных полей: RADIOGROUP, SELECT, GROUPBOX, CONTACT
  • value — значение по умолчанию, которое должно отображаться в поле настроек, если пользовательское значение не задано; для поля типа GROUPBOX необходимо указать массив значений
  • control_separator — необязательный HTML-код для визуального разделения элементов множественных полей: RADIOGROUP и GROUPBOX, например, <hr>

Типы полей настроек

Фреймворк предоставляет набор предопределенных типов полей, которые можно использовать на странице настроек плагина. Указывать их следует путем обращения к константам класса waHtmlControl:

waHtmlControl::INPUT — однострочное текстовое поле.

waHtmlControl::PASSWORD — однострочное поле для ввода пароля типа 'password'.

waHtmlControl::TEXTAREA — многострочное текстовое поле.

waHtmlControl::FILE — кнопка выбора файла.

waHtmlControl::HIDDEN — скрытое поле.

waHtmlControl::CHECKBOX — флажок.

waHtmlControl::GROUPBOX — группа флажков. При использовании этого типа в подмассиве 'options' необходимо указать следующие значения:

value — идентификатор значения, который можно использовать в PHP-коде в качестве ключа для доступа к элементу ассоциативного массива настроек
title — текстовый заголовок рядом с флажком
description — подсказка справа от заголовка (отображается серым цветом)

waHtmlControl::RADIOGROUP — группа радиокнопок. При использовании этого типа в подмассиве 'options' необходимо указать следующие значения:

value — идентификатор значения
title — текстовый заголовок рядом с радиокнопкой
description — подсказка справа от заголовка (отображается серым цветом)

waHtmlControl::SELECT — выпадающий список. При использовании этого типа в подмассиве 'options' необходимо указать следующие значения:

value — идентификатор значения
title — текстовое значение элемента выпадающего списка
description — значение атрибута title элемента выпадающего списка <option></option>

waHtmlControl::CONTACT — список полей редактирования свойств контакта. По умолчанию в этих полях отражаются свойства текущего пользователя. Изменение значений этих полей в настройках плагина не изменяет свойства текущего пользователя, а лишь сохраняет введенные данные в таблицу с настройками плагина. При использовании этого типа в подмассиве 'options' необходимо указать отдельные массивы для каждого отображаемого элемента свойств контакта с элементами 'value', содержащими идентификаторы этого свойства:

['value' => 'phone'],
['value' => 'email'],

waHtmlControl::CONTACTFIELD — выпадающий список для выбора одного из контактных полей. Для того чтобы показать выбранным в списке какое-то поле, в элементе 'value' данного поля настроек укажите id соответствующего контактного поля. Например, для того чтобы элемент, соответствующий полю с номером телефона (имеющего id='phone') был выбран в списке по умолчанию, в подмассиве 'options' укажите следующее:

'value' => 'phone',

waHtmlControl::CUSTOM — пользовательский элемент для ввода настроек, сформированный с использованием произвольного HTML-кода. PHP-логику формирования HTML-кода пользовательского элемента рекомендуется оформлять в виде публичного статического метода основного класса плагина и указывать имя этого метода в файле settings.php, как показано ниже:

'control_type' => waHtmlControl::CUSTOM.' '.'somePlugin::settingCustomControl'

В этом примере вместо somePlugin нужно указать имя класса плагина, в котором объявлен метод, указанный в этой строке (имя метода может быть произвольным).

Динамическое формирование списка значений

Набор значений для множественных типов полей (RADIOGROUP, SELECT, GROUPBOX) можно формировать автоматически вместо указания фиксированного набора элементов с помощью подмассива 'options'. Для автоматического формирования набора значений нужно добавить элемент 'options_callback' и в нем указать в виде простого массива имя класса плагина и его статический метод, который должен вернуть набор значений, например:

'options_callback' => ['somePlugin', 'settingSelectValues'],

В этом примере метод settingSelectValues() некоторого класса плагина somePlugin должен вернуть массив, имеющий ту же структуру, которая описана выше для элемента 'options' для данного типа поля (в данном случае waHtmlControl::SELECT), например:

public static function  settingSelectValues()
{
    ...
    $data = [
        [
            'value' => '',
            'title' => '',
            'description' => ''
        ],
        [
            'value' => '',
            'title' => '',
            'description' => ''
        ],
        ...
    ];
    return $data;
}

В этом случае элемент 'options' для данного поля настроек указывать не нужно.

Пример файла настроек плагина

<?php

return [
    'hint' => [
        'description' => '<h3>'._wp('Specify values requested below for correct plugin operation.').'</h3>',
        'control_type' => waHtmlControl::HIDDEN,
    ],
    'login' => [
        'title' => _wp('Login name'),
        'description' => _wp('Enter your registered login name.'),
        'control_type' => waHtmlControl::INPUT,
    ],
    'password' => [
        'title' => _wp('Password'),
        'description' => _wp('Enter your personal password.'),
        'control_type' => waHtmlControl::PASSWORD,
    ],
    'comments' => [
        'title' => _wp('Comments'),
        'description' => _wp('Optional comments.'),
        'control_type' => waHtmlControl::TEXTAREA,
    ],
    'icon' => [
        'title' => _wp('Icon'),
        'description' => _wp('Upload a 16*16px large icon file.'),
        'control_type' => waHtmlControl::FILE,
    ],
    'test_mode' => [
        'title' => _wp('Test mode'),
        'description' => _wp('Disable when you want to go live.'),
        'control_type' => waHtmlControl::CHECKBOX,
        'value' => 1,
    ],
    'statuses' => [
        'title' => _wp('Order statuses'),
        'description' => _wp('Select the statuses of orders which you want to be exported.'),
        'control_type' => waHtmlControl::GROUPBOX,
        'options_callback' => ['somePlugin', 'settingOrderStatuses'],
        'value' => ['new', 'completed'],
    ],
    'export_mode' => [
        'title' => _wp('Export mode'),
        'description' => _wp('Select the desired export mode.'),
        'control_type' => waHtmlControl::RADIOGROUP,
        'options' => [
            [
                'value' => 'default',
                'title' => _wp('default'),
                'description' => _wp('default data fields'),
            ],
            [
                'value' => 'advanced',
                'title' => _wp('advanced'),
                'description' => _wp('all data fields'),
            ],
        ],
        'value' => 'default',
    ],
    'protocol' => [
        'title' => _wp('Data exchange protocol'),
        'description' => _wp('Select the desired data exchange protocol.'),
        'control_type' => waHtmlControl::SELECT,
        'options' => [
            [
                'value' => 1,
                'title' => '1.0',
            ],
            [
                'value' => 2,
                'title' => '2.0',
            ],
        ],
        'value' => 1,
    ],
    'personal_data' => [
        'control_type' => waHtmlControl::CONTACT,
        'options' => [
            ['value' => 'email'],
            ['value' => 'phone'],
        ],
    ],
    'customer_phone' => [
        'title' => _wp('Customer phone number'),
        'description' => _wp('Select the contact field corresponding to customer’s phone number.'),
        'control_type' => waHtmlControl::CONTACTFIELD,
        'value' => 'phone',
    ],
    'tags' => [
        'title' => _wp('Export tags'),
        'description' => _wp('Add tags which you want to export.'),
        'control_type' => waHtmlControl::CUSTOM.' '.'somePlugin::settingCustomControl',
    ],
];

Как считывать значения настроек

PHP

$setting_value = wa('app_id')->getPlugin('plugin_id')->getSettings('settings_field_id');

Smarty

{$setting_value = $wa->setting('settings_field_id', '', 'app_id.plugin_id')}