backend_prod_presave
Срабатывает перед сохранением товара в новом редакторе товара. Позволяет изменить сохраняемые свойства товара или вернуть сообщение об ошибке — в этом случае товар не сохранится, а пользователь увидит это сообщение в панели управления. Если нужно, можно изменить стандартный способ и место отображения сообщения об ошибке, зарегистрировав обработчик события wa_after_save в JavaScript-коде плагина. В противном случае сообщение будет показано в стандартном месте внизу страницы.
Доступен начиная с версии 8.19.0.
Shop-Script
Входящие параметры (передаются по ссылке)
$params['product'] shopProduct Объект свойств товара, которые ещё не были изменены в ходе сохранения.
$params['data'] array Сохраняемые свойства товара. Могут различаться в зависимости от текущего раздела редактора товара. Передаются по ссылке.
$params['content_id'] string Идентификатор текущей вкладки редактора товара.
$params['data'] array Сохраняемые свойства товара. Могут различаться в зависимости от текущего раздела редактора товара. Передаются по ссылке.
$params['content_id'] string Идентификатор текущей вкладки редактора товара.
… код плагина …
Результат работы плагина
$return['errors']
Массив сообщений об ошибках.
$result['errors']['text'] string Текст сообщения об ошибке.
Shop-Script
Пример кода плагина
PHP
public function backendProdPreSave($params) { /** @var shopProduct $product */ $product = $params['product']; $content_id = $params['content_id']; $errors = []; if ($content_id == 'sku') { $data = $params['data']; foreach(ifset($data, 'skus', []) as $sku_id => $sku) { // Additional SKU price fields validation $price_field_id = 'myplugin_price'; if (ifset($sku, 'additional_prices', $price_field_id, 0) < 10) { $errors[] = [ 'id' => 'plugin_price_error', "name" => "product[skus][{$sku_id}][additional_prices][{$price_field_id}]", 'text' => _wp('My plugin’s price value must be equal to or greater than 10.'), 'data' => [ 'sku_id' => (int) $sku_id, 'sku_sku' => $sku['sku'], 'field_id' => $price_field_id, ], ]; } // Other additionl SKU fields validation $textarea_field_id = 'myplugin_textarea'; if (mb_strlen(ifempty($sku, 'additional_fields', $textarea_field_id, '')) < 2) { $errors[] = [ 'id' => 'plugin_field_error', "name" => "product[skus][{$sku_id}][additional_fields][{$textarea_field_id}]", 'text' => _wp('My plugin’s textarea value must be 2 or more characters long.'), 'data' => [ 'sku_id' => (int) $sku_id, 'sku_sku' => $sku['sku'], 'field_id' => $textarea_field_id, ], ]; } } } if ($content_id == 'general' || $content_id == 'sku') { $myplugin_post_values = waRequest::post('myplugin', [], waRequest::TYPE_ARRAY_TRIM); $some_field_value = ifset($myplugin_post_values, 'some_value', ''); if (!strlen($some_field_value)) { // Each error is available as an object in the event.server_errors array // in a 'wa_after_save' event handler for '#js-product-general-section' and similar elements. // You can arbitrarily use 'id', 'plugin', and 'name' values of each error in your JavaScript code // to show its message in a custom way instead of the default error block at the page bottom. // 'id' value must always be 'plugin_error' $errors[] = [ 'id' => 'plugin_error', 'plugin' => $this->id, 'name' => 'some_value_error', 'text' => _w('My plugin’s validation message.') ]; } } return [ 'errors' => $errors, ]; }