Событие OnBeforeIncludeComponent для переопределения вызываемого компонента

Рейтинг: 73.1260  
Новая
Предложил Пользователь 39858 03.09.2012 00:07:01

Событие OnBeforeIncludeComponent для переопределения вызываемого компонента

Если честно - просто утомила ситуация, когда для того, чтобы изменить вызов какого-то родного компонента на кастомный, приходится дупить пяток шаблонов других компонентов, которые его вызывают, только чтобы изменить этот вызов, а потом тащить их за собой и обновлять ручками. Особенно актуально для КП.
Хочу механизм, который позволит мне переопределить вызов компонента или его параметры, не трогая вызывающие компоненты. Событие тут подходит больше всего.

Может я не прав, переубедите меня.

Рейтинг: 9.0791  
Пользователь 25773 12.09.2012 10:50:33
Это была бы мега-крутая фича!

Я, например, хочу написать обработчик события и вместо вызова компонента bitrix:iblock.vote (голосование, звездочки от 1 до 5) подставлять свой компонент честное голосование http://marketplace.1c-bitrix.ru/solutions/askaron.ibvote/ везде на сайте.

Прямо из маркетплейса одной кнопкой пользователь получит аналогичный функционал, какой у него был, но дополнительно тот функционал, который я добавил: проверку по кукам, IP и ID.

И если у пользователя была многопользовательская фотогалерея с оценками, то он получит фотогалерею с честными оценками.
Рейтинг: 0  
Пользователь 39858 12.09.2012 10:54:41
Да это кучу возможностей дало бы. Но что-то как-то они не особо кому-то нужны, похоже.
Рейтинг: 0.3181  
Пользователь 39858 11.01.2013 10:21:19
Блин, неужели действительно народу так мало интересна такая возможность?
Да взять тот же набивший оскомину компонент форм в КП, в который уже не первый год просят добавить настройку формы под всех пользователей. Кастомим штатный компонент, пишем пару строк переопределения вызова в обработчике и бац - у нас весь портал с красивыми формами и нужными фичами. Красота же, не?
Плюс лёгкий деплой модификации штатного функционала в МП.
Основные грабли будут с шаблонами штатного компонента (дублирование их в кастомный) + работа в публичке с настройкой компонента (настройки какого вызывать, исходного или подмены, например), но это решаемо и не настолько существенно.
Рейтинг: 0  
Пользователь 39858 12.01.2013 21:29:11
Ну и да, в случае необходимости (например, функционал вышел штатно или там баг нашли) демонтаж так же прост - обрубаем обработчик и готово.
Рейтинг: 0  
Пользователь 11948 26.02.2013 18:39:26
А можно пример когда реально нельзя переопределить _шаблон_ компонента, поместив шаблон оного в шаблон сайта? С примерами форм КП не понял, честно. Что-нибудь попроще.
Рейтинг: 0.1688  
Пользователь 39858 26.02.2013 19:01:02
Антон, а причём тут шаблон компонента? Речь о переопределении всего компонента на свой кастомный.
Т.е. в штатном шаблоне какого-то компонента вызывается bitrix:interface.grid, я пишу обработчик и меняю вызов на my_space:interface.supergrid, в котором накручено то, что мне требуется. Не в шаблоне штатного компонента! А в другом, моём, импрувнутом компоненте.

Вызова этих гридов, форм и тп в шаблонах штатных компонентов - умотаться (библиотеки документов, бизнес-процессы, их история, списки, всё это умножаем на два, так как в группах соцсети свои шаблоны для этого функционала, ещё добавляем кучу их использования в CRM - вот почему пример КП).
Другой пример привёл Артемий - iblock.vote, которые в новостях, галереях итп.

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

Я, чесгря, не знаю, куда ещё проще.
Рейтинг: 0  
Пользователь 11948 26.02.2013 20:08:39
Хорошо. Примерно понял. А как стороннее решение узнает, что вот да, данный вызов компонента надо переопределить? GetCurPage? Ну, закрыв глаза, можно. Это раз.

Два. На что будет переопределяться вызов? На тот же самый компонент, но в котором будет изменено пару строчек? Для своего проекта допустимо, но речь про Маркетплейс? Тогда возникает проблема дублирования коммерческого кода, который Битрикс запретит.

Из этого раз и два пока не видится "вот прям надо". Не, мне не жалко плюса, но я пока занимаю нейтральную позицию. Ибо возможность навредить тоже присутствует.
Рейтинг: 0  
Пользователь 11948 26.02.2013 20:10:17
У Артемия более жизненный пример. Но как вы предлагаете реагировать техподдежке на панику клиента "у меня стоит ваш iblock.vote и глючит!!11". Это три.
Рейтинг: 1.6207  
Пользователь 39858 26.02.2013 20:23:00
А как стороннее решение узнает, что вот да, данный вызов компонента надо переопределить? GetCurPage?
В частном случае - например да. Если вообще нужно определять данный или не данный, а не заменять вызов этого компонента всегда. И это событие, разработчики могут добавить в него передачу дополнительных полей, как пусть тот же адрес страницы или родительский компонент.
На что будет переопределяться вызов? На тот же самый компонент, но в котором будет изменено пару строчек? Для своего проекта допустимо, но речь про Маркетплейс?
Да хоть на что. Пусть это будет откастомленный штатный компонент для своего проекта (мой пример), или вообще другой - пример Артемия.
Про дублирование кода и запрет Битрикса - возможно. Я как-то задавал такой вопрос, внятного ответа не получил.
Но как вы предлагаете реагировать техподдежке на панику клиента "у меня стоит ваш iblock.vote и глючит!!11"
Вот это интересный вопрос, решения, кроме информирования клиента разрабом проекта/решения, придумать сходу не выходит.
Рейтинг: 2.0682  
Пользователь 11948 26.02.2013 20:25:33
Ну ок, плюсик отдам, дальше пусть битриксы думают :)
Рейтинг: 28.6166  
Пользователь 14686 27.02.2013 10:38:08
Штука нужная больше хардкорным разработчикам.
тоже +, но ногу себе отстрелить можно будет легко
Рейтинг: 0  
Пользователь 39858 27.02.2013 10:47:16
но ногу себе отстрелить можно будет легко
=) Пришить тоже. Но, в общем, и другими решениями можно отстрелить. Помню, как у меня отвалился импорт/экспорт БП и ещё некоторая работа с файлами по совершенно непонятной причине (битые файлы). Долго копал в недоумении в околопроблемных модулях, а оказалось дело в решении с маркетплейса, никакого к ним отношения не имеющего вообще. Как сейчас с подобным работает ТП Битрикса и смогла ли бы она расковырять проблему (решал сам) - без понятия, но ситуация в чём-то схожая с проблемами, которые могут возникнуть из-за этого обработчика.
Надо в настройки модуля, использующего данный функционал, выносить возможность быстрого отключения обработчика флажком. Как-то так. Для облегчения диагностики и оперативного пришивания ног.
Рейтинг: 0.3259  
Пользователь 203730 04.10.2013 09:24:46
Плюсую. Такое событие будет весьма полезно не только в описываемой ситуации.
При разработке решений для маркетплейс бывают такие моменты когда нужно определить вызов компонента и что-то в этом случае сделать. С вот таким событием было бы реально удобнее чем лазить по шаблонам и ковырять их.
Рейтинг: 0  
Пользователь 95755 04.10.2013 12:02:36
Кроме прочих плюсов, эта фича - половина пути к http://idea.1c-bitrix.ru/7945/
Рейтинг: 0.8902  
Пользователь 39858 21.01.2015 15:49:38
up