promo_before_save

Срабатывает перед сохранением свойств промоакции в базу данных. Позволяет прервать сохранение путём возврата информации об ошибке.

Shop-Script
Входящие параметры
передаются по ссылке
$params['promo_id'] int Идентификатор промоакции.
$params['is_new'] bool Сохраняется ли новая промоакция, которая ранее не существовала.
$params['promo_data'] array Свойства промоакции. Можно изменять средствами плагина.
$params['storefronts_data'] array Список витрин, выбранных в свойствах промоакции. Значения массива — значения сортировки сохранённой промоакции на каждой из витрин (0 — сортировка не задана, показывать промоакцию в конце списка). Можно изменять средствами плагина.
$params['delete_rule_ids'] array Список идентификаторов инструментов, которые пользователь выбрал для удаления из промоакции. Можно изменять средствами плагина.
$params['rules'] array Свойства инструментов промоакции. Можно изменять средствами плагина.
$params['edited_rules'] array Список инструментов промоакции, изменённых пользователем.
$params['new_rules'] array Список инструментов промоакции, добавленных пользователем.
$params['old_rules'] array Список инструментов промоакции, не изменённых пользователем.
… код плагина …
Результат работы плагина
%plugin_id%]['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': текст сообщения об ошибке, которое должно быть показано пользователю.

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!'),
                ],
            ],
        ];
    }
}