JavaScript-хуки
Новый редактор товаров
Посмотрите исходный код примера плагина с использованием JavaScript-хуков.
wa_before_load
Срабатывает непосредственно перед загрузкой содержимого по AJAX для элемента '#wa-app'.
Параметры
params['content_url']Текущий URL.params['data']Дополнительные данные. Могут быть различными в разных ситуациях.params['section']Объект с ключами 'id' — идентификатор текущей части раздела «Товары» (например,'product'— часть редактирования одного товара; в будущем планируется добавлять другие части — например, часть для управления списка товаров, у которой будет другой идентификатор);'content_selector'— селектор элемента с основным содержимым (без панели боковой панели).
Пример кода
$('#wa-app').on('wa_before_load', function (event, params) {
console.log('Пользователь инициировал обновление содержимого по AJAX.');
});
wa_loaded
Срабатывает после загрузки по AJAX содержимого для контейнера с селектором '#wa-app'.
Параметры
params['content_url']Текущий URL.params['data']Дополнительные данные. Могут быть различными в разных ситуациях.params['section']Объект с ключами'id'— идентификатор текущей части раздела «Товары»;'content_selector'— селектор элемента с основным содержимым (без панели боковой панели).
Пример кода
$('#wa-app').on('wa_loaded', function (event, params) {
console.log('Содержимое редактора товара обновлено.');
});
wa_before_save
Срабатывает перед отправкой данных на сервер при сохранении свойств товара. Позволяет отменить отправку данных на сервер и показать сообщение об ошибке по результатам клиентской валидации значений полей товара.
Обработчик события нужно регистрировать для элементов с селекторами '#js-product-general-section' (раздел «Основные данные») или '#js-product-sku-section-wrapper' (раздел «Цены и характеристики»).
Пример кода
$(document).on('wa_before_save', '#js-product-sku-section-wrapper', function(event) {
var $field_wrapper = $('#myplugin-some-field');
var $field = $field_wrapper.find('input');
// Вызов собственной функции для удаления ранее показанного сообщения об ошибке.
removeVisibleErrors($field_wrapper);
var value = $field.val();
// Вызов собственной функции для валидации значения.
if (!isValid(value)) {
// Вызов собственной функции для отображения сообщения.
showErrorMessage($field, $field.data('validation-error-message'));
// Предотвращение отправки данных на сервер в случае ошибки валидации.
event.preventDefault();
} else {
// Добавление значения поля в данные формы, которые должны быть отправлены на сервер.
// Это необходимо, только если у поля нет заполненного атрибута 'name'.
event.form_data.push({
name: 'some_field',
value: value
});
}
});
wa_save
Срабатывает сразу после отправки данных на сервер при сохранении товара, не дожидаясь ответа от сервера. Удобно использовать, если необходимо отправлять данные на собственный контроллер плагина при сохранении свойств товара — в этом случае нет необходимости дожидаться ответа от контроллера Shop-Script, как при использовании хука wa_after_save.
Параметры
Пример кода
$(document).on('wa_save', '#js-product-general-section', function(event) {
var message = 'Данные товара отправлены на сервер.';
if (event.product_id !== undefined) {
message += ' ID товара — ' + event.product_id + '.';
}
console.log(message);
});
wa_after_save
Срабатывает после отправки данных на сервер при сохранении свойств товара и получения ответа от сервера. Позволяет показывать сообщение об ошибке, полученное с сервера. Сообщение об ошибке может быть сформировано обработчиком PHP-хука backend_prod_presave.
Параметры
event.server_errorsМассив сообщений об ошибках, полученных с сервера. Если какая-то ошибка получена от обработчика PHP-хука backend_prod_presave, то соответствующий элемент массива ошибок — это объект со следующими ключами:'id'— стандартная строка'plugin_error','plugin'— идентификатор плагина,'name'— произвольный идентификатор ошибки (можно использовать для разделения логики отображения для разных видов ошибок),'text'— локализованное сообщение об ошибке, которое нужно показать пользователю.
Пример кода
$(document).on('wa_after_save', '#js-product-general-section', function(event) {
if (!event.server_errors || !event.server_errors.length) {
// Ничего не делать, если нет ошибок.
return;
}
var $field_wrapper = $('#myplugin-some-field');
var $field = $field_wrapper.find('input');
var errors = event.server_errors || [];
$.each(errors, function(i, error) {
if (error.id == 'plugin_error' && error.plugin == 'myplugin' && error.name == 'general_bottom') {
showErrorMessage($field, error.text);
// Удалить эту ошибку из общего списка ошибок,
// если сообщение об этой ошибке не нужно показывать в стандартном месте внизу страницы.
errors[i] = undefined;
}
});
});
shop_reports_init
Срабатывает после инициализации содержимого раздела «Отчёты» в режиме интерфейса Webasyst 2. Позволяет, например, добавить собственные методы в JavaScript-контроллер, доступный через свойство $.reports.
Пример кода
// добавить обработчик собственного URL ?action=reports#myplugin/ в разделе отчётов
$(document).on('shop_reports_init', function() {
$.reports.mypluginAction = function(params) {
this.load('?plugin=myplugin&module=reports');
};
});









