Делаем колбеки miniShop2 для всех
Всем привет! Так как в miniShop2 есть список колбеков для того, чтобы на определённые действия, совершаемые компонентом, можно было повесить свой код и, тем самым, дополнить работу магазина, то многие разработчики дополнений используют их в своём коде. Я уж не говорю о вебмастерах, которые используют этот инструмент для решения определённых нужд в своих сайтах.
Проблема в том, что код одного компонента, использующего, например miniShop2.Callbacks.Order.getcost, пересекается с другим кодом, другого компонента, использующего этот же колбек. Получается конфликт, который я для себя, в своих пакетах, решаю так:
Таким образом, мой код позволяет отработать и коду, который был прописан до него в используемом им колбеке, и естественно, запустить свой.
В чём проблема?
В связи с этим получается проблема. Колбеков мало, а желающих воспользоваться ими — много. Я уже не раз сталкивался с тем, что некоторые компоненты из Modstore не могут работать вместе, т.к. используют одни и те же колбеки, на одних и тех же страницах.Проблема в том, что код одного компонента, использующего, например miniShop2.Callbacks.Order.getcost, пересекается с другим кодом, другого компонента, использующего этот же колбек. Получается конфликт, который я для себя, в своих пакетах, решаю так:
Вариант решения:
- Пишу функцию, которая занимается клонированием объектов:
Конечно, можно воспользоваться и встроенной в jQuery функцией $.extend, как описано тут.ComponentName.Utils = { cloneObj: function(obj) { if (obj == null || typeof(obj) != "object") { return obj; } var tmp = new obj.constructor(); for (var key in obj) { tmp[key] = ComponentName.Utils.cloneObj(obj[key]); } return tmp; }, };
- Перед переопределением стандартных miniShop2 колбеков, я клонирую всё то, что уже есть в объекте miniShop2.Callbacks:
ComponentName.ms2CallbacksClone = ComponentName.Utils.cloneObj(miniShop2.Callbacks);
- После чего, я создаю свой объект с колбеками, которые собираюсь переопределить:
В нём я первым делом запускаю клонированный колбек.ComponentName.ms2Callbacks = { Order: { getcost: { response: { success: function (response) { ComponentName.ms2CallbacksClone.Order.getcost.response.success(response); }, }}, }, };
- Ну и переопределяю в объекте miniShop2.Callbacks нужные мне колбеки — своими:
miniShop2.Callbacks.Order.getcost.response.success = ComponentName.ms2Callbacks.Order.getcost.response.success;
Таким образом, мой код позволяет отработать и коду, который был прописан до него в используемом им колбеке, и естественно, запустить свой.
Итак.
Хочу попросить разработчиков взять это на заметку, чтобы всем жилось хорошо. :)
Поблагодарить автора
Отправить деньги
Комментарии: 3
В miniShop2.4-beta2 callbacks являются массивами функций, для работы с которыми предусмотрены специальные методы.
Добавление:
И удаление:
Добавление:
miniShop2.Callbacks.add('Cart.add.before', 'my_callback', function() {
alert('Отправка отключена!');
return false;
});
И удаление:
miniShop2.Callbacks.remove('Cart.add.before', 'my_callback');
Прекрасно! А старый способ подключения колбеков останется?
Конечно.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.