promo_before_save
Срабатывает перед сохранением свойств промоакции в базу данных. Позволяет прервать сохранение путём возврата информации об ошибке.
Доступно начиная с версии 8.5.0.
Shop-Script
Входящие параметры (передаются по ссылке)
$params['promo_id'] int ID промоакции.
$params['is_new'] bool Признак сохранения новой промоакции.
$params['promo_data'] array Свойства промоакции в виде массива со следующими ключами:
$params['promo_data']['id'] int ID промоакции.
$params['promo_data']['name'] string Название.
$params['promo_data']['enabled'] bool Статус.
$params['promo_data']['start_datetime'] datetime Дата и время начала.
$params['promo_data']['finish_datetime'] datetime|null Дата и время окончания.
$params['storefronts_data'] array Ключи массива — адреса витрин, выбранных в свойствах промоакции. Значения массива — значения сортировки сохранённой промоакции на каждой из витрин (0 — сортировка не задана, показывать промоакцию в конце списка).
$params['delete_rule_ids'] array Список идентификаторов инструментов, которые пользователь выбрал для удаления из промоакции.
$params['rules'] array Список инструментов промоакции. Каждый элемент списка — массив со следующими ключами:
$params['rules'][]['is_old'] bool Признак редактировании добавленного ранее инструмента.
$params['rules'][]['rule_type'] string Тип инструмента: 'banner' (баннер), 'coupon' (купоны), 'custom_price' (товары и цены), 'utm' (UTM-метки).
$params['rules'][]['rule_params'] array Свойства баннера в виде массива со следующими ключами (баннер):
$params['rules'][]['rule_params']['banners'][]['title'] string Заголовок.
$params['rules'][]['rule_params']['banners'][]['body'] string Подзаголовок промокарточки.
$params['rules'][]['rule_params']['banners'][]['link'] string Адрес ссылки.
$params['rules'][]['rule_params']['banners'][]['color'] string HTML-код цвета текста.
$params['rules'][]['rule_params']['banners'][]['background_color'] string HTML-код цвета фона.
$params['rules'][]['rule_params']['banners'][]['countdown_datetime'] datetime|null Дата и время окончания обратного отсчёта.
$params['rules'][]['rule_params'] <int> ID выбранных купонов (купоны).
$params['rules'][]['rule_params'] array Список модификаций товаров (товары и цены). Каждый элемент списка — массив со следующими ключами:
$params['rules'][]['rule_params'][product_id]['currency'] string 3-буквенный код валюты товара.
$params['rules'][]['rule_params'][product_id]['skus'] array Список модификаций товара. Каждый элемент списка — массив со следующими ключами:
$params['rules'][]['rule_params'][product_id]['skus'][sku_id]['price'] float|null Цена модификации в рамках промоакции.
$params['rules'][]['rule_params'][product_id]['skus'][sku_id]['compare_price'] float|null Зачёркнутая цена модификации в рамках промоакции.
$params['rules'][]['rule_params'] array Список значений UTM-меток (UTM-метки). Каждый элемент списка — массив со следующими ключами:
$params['rules'][]['rule_params']['utm_source'] array Список значений UTM-метки «Источник кампании».
$params['rules'][]['rule_params']['utm_medium'] array Список значений UTM-метки «Тип трафика».
$params['rules'][]['rule_params']['utm_campaign'] array Список значений UTM-метки «Название кампании».
$params['rules'][]['rule_params']['utm_content'] array Список значений UTM-метки «Идентификатор объявления».
$params['rules'][]['rule_params']['utm_term'] array Список значений UTM-метки «Ключевое слово».
$params['edited_rules'] array Список инструментов, изменённых пользователем.
$params['new_rules'] array Список инструментов, добавленных пользователем.
$params['old_rules'] array Список инструментов, не изменённых пользователем.
$params['is_new'] bool Признак сохранения новой промоакции.
$params['promo_data'] array Свойства промоакции в виде массива со следующими ключами:
$params['promo_data']['id'] int ID промоакции.
$params['promo_data']['name'] string Название.
$params['promo_data']['enabled'] bool Статус.
$params['promo_data']['start_datetime'] datetime Дата и время начала.
$params['promo_data']['finish_datetime'] datetime|null Дата и время окончания.
$params['storefronts_data'] array Ключи массива — адреса витрин, выбранных в свойствах промоакции. Значения массива — значения сортировки сохранённой промоакции на каждой из витрин (0 — сортировка не задана, показывать промоакцию в конце списка).
$params['delete_rule_ids'] array Список идентификаторов инструментов, которые пользователь выбрал для удаления из промоакции.
$params['rules'] array Список инструментов промоакции. Каждый элемент списка — массив со следующими ключами:
$params['rules'][]['is_old'] bool Признак редактировании добавленного ранее инструмента.
$params['rules'][]['rule_type'] string Тип инструмента: 'banner' (баннер), 'coupon' (купоны), 'custom_price' (товары и цены), 'utm' (UTM-метки).
$params['rules'][]['rule_params'] array Свойства баннера в виде массива со следующими ключами (баннер):
$params['rules'][]['rule_params']['banners'][]['title'] string Заголовок.
$params['rules'][]['rule_params']['banners'][]['body'] string Подзаголовок промокарточки.
$params['rules'][]['rule_params']['banners'][]['link'] string Адрес ссылки.
$params['rules'][]['rule_params']['banners'][]['color'] string HTML-код цвета текста.
$params['rules'][]['rule_params']['banners'][]['background_color'] string HTML-код цвета фона.
$params['rules'][]['rule_params']['banners'][]['countdown_datetime'] datetime|null Дата и время окончания обратного отсчёта.
$params['rules'][]['rule_params'] <int> ID выбранных купонов (купоны).
$params['rules'][]['rule_params'] array Список модификаций товаров (товары и цены). Каждый элемент списка — массив со следующими ключами:
$params['rules'][]['rule_params'][product_id]['currency'] string 3-буквенный код валюты товара.
$params['rules'][]['rule_params'][product_id]['skus'] array Список модификаций товара. Каждый элемент списка — массив со следующими ключами:
$params['rules'][]['rule_params'][product_id]['skus'][sku_id]['price'] float|null Цена модификации в рамках промоакции.
$params['rules'][]['rule_params'][product_id]['skus'][sku_id]['compare_price'] float|null Зачёркнутая цена модификации в рамках промоакции.
$params['rules'][]['rule_params'] array Список значений UTM-меток (UTM-метки). Каждый элемент списка — массив со следующими ключами:
$params['rules'][]['rule_params']['utm_source'] array Список значений UTM-метки «Источник кампании».
$params['rules'][]['rule_params']['utm_medium'] array Список значений UTM-метки «Тип трафика».
$params['rules'][]['rule_params']['utm_campaign'] array Список значений UTM-метки «Название кампании».
$params['rules'][]['rule_params']['utm_content'] array Список значений UTM-метки «Идентификатор объявления».
$params['rules'][]['rule_params']['utm_term'] array Список значений UTM-метки «Ключевое слово».
$params['edited_rules'] array Список инструментов, изменённых пользователем.
$params['new_rules'] array Список инструментов, добавленных пользователем.
$params['old_rules'] array Список инструментов, не изменённых пользователем.
… код плагина …
Результат работы плагина
$return['errors']
Каждое возвращаемое сообщение об ошибке должно быть оформлено в виде массива со следующими ключами:
- 'id': тип сообщения; одно из значений 'storefronts' (выбор витрин), 'server_error' (общая ошибка), 'rule_error' (ошибка настройки инструментов);
- 'name': значение атрибута 'name' конкретного поля, к которому относится ошибка, — используется в случае, когда не указан ключ 'id';
- 'rule': обозначение инструмента, с которым связана ошибка, если в ключе 'id' указано значение 'rule_error'; например, 'rule[12]';
- 'rule_data': массив с ключом 'error_code', в котором нужно указать одно из значений для инструмента «Баннер»: 'invalid_banner_file' (ошибка загрузки изображения баннера) или 'countdown_invalid' (ошибка настроек обратного отсчёта);
- 'text': текст сообщения об ошибке, которое должно быть показано пользователю.
- 'id': тип сообщения; одно из значений 'storefronts' (выбор витрин), 'server_error' (общая ошибка), 'rule_error' (ошибка настройки инструментов);
- 'name': значение атрибута 'name' конкретного поля, к которому относится ошибка, — используется в случае, когда не указан ключ 'id';
- 'rule': обозначение инструмента, с которым связана ошибка, если в ключе 'id' указано значение 'rule_error'; например, 'rule[12]';
- 'rule_data': массив с ключом 'error_code', в котором нужно указать одно из значений для инструмента «Баннер»: 'invalid_banner_file' (ошибка загрузки изображения баннера) или 'countdown_invalid' (ошибка настроек обратного отсчёта);
- 'text': текст сообщения об ошибке, которое должно быть показано пользователю.
Shop-Script
Пример кода плагина
PHP
public function promoBeforeSave($params)
{
$edited_promo_rules = ifset($params, 'edited_rules', []);
foreach ($edited_promo_rules as $rule_id => $rule) {
if ($rule['rule_type'] == 'banner') {
$banners = ifset($rule, 'rule_params', 'banners', []);
foreach ($banners as $banner) {
if (!preg_match('~\.png$~i', ifset($banner, 'image_filename', ''))) {
$invalid_banner_id = $rule_id;
break 2;
}
}
}
}
if (!empty($invalid_banner_id)) {
return [
'errors' => [
[
'id' => 'rule_error',
'rule' => sprintf('rules[%d]', $invalid_banner_id),
'rule_data' => [
'error_code' => 'invalid_banner_file'
],
'text' => _wp('Upload a banner image in the PNG format!'),
],
],
];
}
}









