Методы и события Add, Update, Delete

Рейтинг: 5.9187  
Отложено
Предложил Рамиль Юналиев 20.02.2014 17:29:09

Методы и события Add, Update, Delete

Во всех методах Add, Update, Delete, сделать возможность отключать отработку событий OnBefore* и OnAfter*

По умолчанию конечно все должно срабатывать.

Рейтинг: 0  
Рамиль Юналиев 24.02.2014 13:30:41
И конечно учесть эту возможность в D7
Рейтинг: 0  
Жуков Евгений 24.02.2014 14:05:38
При выключении обработки полностью развалится весь штатный функционал.
Рейтинг: 0  
Рамиль Юналиев 24.02.2014 16:18:50
Это плохо, что обработчики завязаны на внутреннюю логику системы, для этого должны быть свои обработчики, а не одни для всех. Дайте нам выбор и гибкость, а у себя делайте что хотите :)
Рейтинг: 0  
Жуков Евгений 24.02.2014 18:07:16
Обработчики не завязаны на внутреннюю логику системы, а являются ее неотъемлемой частью. Какая задача может потребовать такого функционала (отключения обработчиков)?
Рейтинг: 0  
Рамиль Юналиев 25.02.2014 11:13:11
Любая задача которая связана с интеграцией с другой системой, конкретно 1с, реализуется свой импорт экспорт на сайте.

C 1C идет экспорт на сайт (пользователи, профили, заказы) используется стандартное API Add, Update, Delete. Самое интерcное происходит когда нужно отдавать 1С данные по действию на сайте, это все теже Add, Update, Delete, лучший вариант вешать на события, и в этом проблема так как эти события будут срабатывать и при импорте из 1с что не нужно, в этой ситуации как раз и хотелось бы отключать их.

Может есть решение котороя я не нашел, буду благодарен за наводку. :)
Рейтинг: 5.9418  
Жуков Евгений 25.02.2014 13:32:55
Решение банально. Обработчики собираются в один класс. В классе имеется внутренняя статическая переменная плюс 2 метода работы - включить/выключить. По умолчанию выключено. В своем импорте/экспорте перед началом работы включаете. В специфических обработчиках идет проверка переменной. Выключено - обработчик прекращает работу. Все.
Рейтинг: 0  
Рамиль Юналиев 25.02.2014 19:15:52
Решение банально. Обработчики собираются в один класс. В классе имеется внутренняя статическая переменная плюс 2 метода работы - включить/выключить. По умолчанию выключено. В своем импорте/экспорте перед началом работы включаете. В специфических обработчиках идет проверка переменной. Выключено - обработчик прекращает работу. Все.
Я буду только рад найти решение, и возможно я туплю, но я не совсем понимаю как это должно работать.


class HandlerTest
{
   static $flag = false;
   
   function handler(){}
}

AddEventHandler('sale', 'OnOrderAdd', array('HandlerTest', 'handler'));


Евгений если трудно подскажите, думаю всем будет полезно это знать. :)  
Рейтинг: 0  
Жуков Евгений 26.02.2014 10:47:46
Рамиль, мне как-то сложно что-либо еще добавить - все изложено, дальше только код писать. Посмотрите класс CCatalogDiscountSave - в нем подобная логика реализована, только не для событий.
Рейтинг: 0  
Рамиль Юналиев 26.02.2014 21:39:38
Спасибо Евгений