sales_channel_types

Позволяет добавлять новые типы каналов продаж.

Доступно начиная с версии 12.0.0.

Shop-Script

Входящие параметры (передаются по ссылке)

$params['locality'] string Обозначение географического региона локали, для которого запрашивается список типов каналов продаж. Или 'all', если запрашивается список типов каналов для всех регионов.
… код плагина …

Результат работы плагина

{$sales_channel_types.$output}
Список поддерживаемых плагином дополнительных типов каналов продаж. Каждый элемент списка — подмассив со следующими ключами:
[]['id'] string Идентификатор типа каналов; например, обозначение мессенджера или соцсети.
[]['name'] string Локализованное название типа каналов.
[]['class'] string Имя существующего класса типа каналов, унаследованного от shopSalesChannelType. В этом классе должен быть переопределён метод getFormFieldsConfig(), возвращающий список полей настроек, доступных пользователю при добавлении нового канала продаж этого типа.
[]['menu_icon'] string HTML-код для отображения иконки рядом с названием типа каналов продаж.
[]['available'] bool Укажите false, если хотите сделать тип временно недоступным для использования.
Пример-заготовка плагина на GutHub для реализации собственного канала продаж ›

Класс shopSalesChannelType

Собственный наследник этого класса нужно добавить в состав плагина и переопределить в нём методы базового класса, чтобы сформировать страницу настроек канала продаж: определить набор полей, доступных пользователю для настройки, или изменить стандартный шаблон HTML-кода.

public function getFormFieldsConfig ($values = [])

Переопределить этот метод нужно обязательно. Он должен возвращать массив полей настроек в формате «field_id => params». Каждый элемент — подмассив, который будет передан в качестве параметра $params в метод waHtmlControl::getControl() — для формирования HTML-кода поля настроек.

Параметры
  • $values array Значения полей, возвращаемых этим методом; доступны при просмотре настроек уже существующего канала продаж.
Пример
protected function getFormFieldsConfig($values = []): array
{
    return [
        'stock_id' => [
            'title'        => _wp('Stock'),
            'description'  => '',
            'control_type' => waHtmlControl::SELECT,
            'options'      => array_map(function ($stock) {
                return [
                    'value' => $stock['id'],
                    'title' => $stock['name']
                ];
            }, [
                '' => [
                    'id' => '',
                    'name' => _wp('select a stock')
                ]
            ] + shopHelper::getStocks()),
        ],
        '...' => [
            ...
        ],
        '...' => [
            ...
        ],
    ];
}
public function getFormHtml (array $channel)

Переопределите этот метод, только если вам нужно изменить стандартное содержимое страницы настроек. Возвращает собственный HTML-код для страницы настроек канала продаж.

Параметры
  • $channel array Свойства канала: ID, название и другие сохранённые ранее настройки.
Пример
public function getFormHtml(array $channel): string
{
    $field_params = [
        'namespace' => 'data',
        'title_wrapper' => '%s',
        'description_wrapper' => '<br><span class="hint">%s</span>',
        'control_wrapper' => '<div class="name">%s</div><div class="value">%s %s</div>',
    ];

    $form_fields = [];

    foreach ($this->getBaseFieldsConfig() as $name => $config) {
        $form_fields['__' . $name] = $this->getControl($name, $channel[$name] ?? '', $field_params + $config);
    }

    $field_params['namespace'] = ['data', 'params'];
    $form_fields += $this->getFormFields($channel['params'], $field_params);

    $view = wa('shop')->getView();

    $view->assign([
        'channel' => $channel,
        'form_fields' => $form_fields,
    ]);

    // оригинальный шаблон: wa-apps/shop/templates/actions/channels/generic_form.include.html
    return $view->fetch('file:plugins/myplugin/templates/includes/channel_params.include.html');
}
public function sanitizeAndValidateParams (?int $id, array &$params, $params_mode): array

Переопределять этот метод необязательно. Он может быть необходим для проверки введённых пользователем настроек канала продаж. В случае обнаружения некорректных данных метод должен вернуть массив со следующими ключами:

  • error_description string Локализованное сообщение об ошибке.
  • field string Значение атрибута name поля настроек, в котором обнаружено недопустимое значение.
Параметры
  • $id int|null ID канала продаж. Или null, если канал ещё ни разу не был сохранён.
  • $params array Настройки канала продаж.
  • $params_mode string Режим обновления настроек канала продаж: set (значения с ключами, отсутствующими в значении параметра $params, будут удалены из настроек канала продаж), update (значения с ключами, отсутствующими в значении параметра $params, остаются без изменений).
Пример
public function sanitizeAndValidateParams(?int $id, array &$params, $params_mode): array
{
    if ($params_mode == 'set' && empty($params['stock_id'])) {
        $errors['stock_id'] = [
            'error_description' => _wp('This is a required field.'),
            'field' => 'data[params][stock_id]',
        ];
    }

    return array_values($errors ?? []);
}
public function onSave (array $channel)

Переопределять этот метод необязательно. Он может быть необходим для выполнения дополнительных действий после сохранения настроек канала продаж.

Параметры
  • $channel array Настройки канала продаж.
Пример
public function onSave(array $channel)
{
    // например, автоматически включить Headless API в настройках витрины, выбранной в настройках канала продаж,
    // на случай, если пользователь забыл сделать это вручную
    
    // ...
}
public function getPublicStorefrontParams (array $channel)

Переопределять этот метод необязательно. Он может быть необходим, для того чтобы запросы к узлу /shop Headless API с указанием ID канала продаж в параметре sales_channel_id возвращали параметры внешнего вида витрины из настроек канала. Метод должен вернуть те значения подмассива $channel['params'], которые в вашем плагине имеют значение для оформления отображаемой витрины.

Параметры
  • $channel array Настройки канала продаж.
Пример
public function getPublicStorefrontParams(array $channel): array
{
    $params = ifset($channel, 'params', []);

    return array_intersect_key($params, [
        'accent_color'           => 1,
        'background_color_light' => 1,
        'background_color_dark'  => 1,
        'border_radius'          => 1,
        'products_per_row'       => 1,
        'homepage_promos'        => 1,
        'homepage_product_list'  => 1,
        'homepage_text_footer'   => 1,
        'checkout_external'      => 1,
        'checkout_phone'         => 1,
        'checkout_email'         => 1,
        'checkout_country'       => 1,
        'checkout_terms_link'    => 1,
        'locale'                 => 1,
        'powered_by'             => 1,
    ]);
}
Shop-Script

Пример кода плагина

PHP

public function salesChannelTypes($params)
{
    if ($params['locality'] == 'de') {    
        return [
            [
                'id' => 'sales_de',
                'name' => _wp('German channel'),
                // existing class extending shopSalesChannelType
                'class' => 'shopMyPluginSalesChannelType',
                'menu_icon' => '<i class="fas fa-user"></i>',
            ]
        ];
    }
}