backend_prod_presave
Срабатывает перед сохранением товара в редакторе товара в новом интерфейсе (2.0). Позволяет изменить сохраняемые свойства товара или вернуть сообщение об ошибке — в этом случае товар не сохранится, а пользователь увидит это сообщение в панели управления. Если нужно, можно изменить стандартный способ и место отображения сообщения об ошибке, зарегистрировав обработчик события wa_after_save в JavaScript-коде плагина. В противном случае сообщение будет показано в стандартном месте внизу страницы.
Доступно начиная с версии 8.18.0.
Shop-Script
Входящие параметры (передаются по ссылке)
$params['product'] object Экземпляр класса
$params['data'] array Сохраняемые свойства товара в виде ассоциативного массива. Могут различаться в зависимости от текущего раздела редактора товара. Содержимое массива доступно для модификации по ссылке.
$params['content_id'] string Идентификатор текущей вкладки редактора товара.
shopProduct со свойствами товара до его сохранения.$params['data'] array Сохраняемые свойства товара в виде ассоциативного массива. Могут различаться в зависимости от текущего раздела редактора товара. Содержимое массива доступно для модификации по ссылке.
$params['content_id'] string Идентификатор текущей вкладки редактора товара.
… код плагина …
Результат работы плагина
$return['errors']
Массив сообщений об ошибках.
$result['errors']['text'] string Текст сообщения об ошибке.
$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,
];
}









