Добавить событие OnBeforeQuery

Рейтинг: -33.5631  
Отложено
Предложил Пользователь 115782 12.09.2012 11:38:47

Добавить событие OnBeforeQuery

В ходе расширения имеющегося функционала иногда нужно изменить запрос.
Например CIblockElement::GetList - добавить к нему свои таблицы. В данный момент есть вариант лишь выноса (модифиация не рассматривается) данной функции в новый класс, который будет расширять имеющийся (extends) CIblockElement. Но тут необходимо создавать кастомные компоненты и везде заменять CIblockElement:GetList на (например) CCustomIblockLement::GetList.
Это все опять же внесет свои коррективы при установке модуля, такие как копирование шаблонов компонентов в кастомизированные и др., что для пользователя сложно.

Рейтинг: 0  
Пользователь 11948 12.09.2012 17:47:03
Пожалуй, это мой первый минус на этом сайте :) Алексей, учите матчасть. Как у разработчика, у вас очень опасные идеи.
Рейтинг: 0  
Пользователь 11948 12.09.2012 17:52:22
Чтобы не быть голословным. Представьте 50 запросов. Это, собственно, типовая Бизнес-редакция.
И ваш BeforeQuery, КАК МИНИМУМ, обойдется в:+ 50 вызовов GetModule
+ 50 вызов call_user_func


И вы наверняка будете делать какие-то strpos, preg_match, чтобы понять, тот ли это запрос. Это еще +50 да +50.

+200 лишних вызовов функций на один хит. Не кажется ли дороговато?

PS: За +7 лет я ни разу не столкнулся с расширением класса Ciblockelement. Придумывайте иную архитектуру, если зашли в тупик.  
Рейтинг: 0  
Пользователь 115782 12.09.2012 23:38:08
Как у разработчика, у вас очень опасные идеи.
В свои оправдание могу сказать, что архитектура разработана не мной, я лишь ее реализовываю. Самому мне до такого еще необходимо пройти не малый путь, и немало познать в проектировании БД.
За +7 лет я ни разу не столкнулся с расширением класса Ciblockelement.
Все когда-то бывает в первый раз.
Чтобы не быть голословным. Представьте 50 запросов. Это, собственно, типовая Бизнес-редакция.  
И ваш BeforeQuery, КАК МИНИМУМ, обойдется в:+ 50 вызовов GetModule
+ 50 вызов call_user_func


И вы наверняка будете делать какие-то strpos, preg_match, чтобы понять, тот ли это запрос. Это еще +50 да +50.  

+200 лишних вызовов функций на один хит. Не кажется ли дороговато?
Необязательно делать как я написал, главное уловить суть, что иногда необходима возможность изменить какой-то запрос, а не модифицируя или дублируя (внося изменения) добиться этого невозможно.

Можно согласиться с тем, что предложил я не самый лучший вариант, но что все можно построить, используя лишь встроенные средства - с этим не могу согласится.
Рейтинг: 0  
Пользователь 1756 25.09.2012 18:11:16
А можно поинтересоваться, какую именно матчасть нужно учить, чтобы научить функцию GetList произвольной сортировке?