sales_channel_types
Позволяет добавлять новые типы каналов продаж.
Доступно начиная с версии 12.0.0.
Входящие параметры (передаются по ссылке)
Результат работы плагина
{$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,
]);
}Пример кода плагина
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>',
]
];
}
}









