Переопределение. Будет ли конфликт? Как определить не зная кода иного плагина.
Прочитал Новые возможности по переопределению/наследованию классов LiveStreet, но так и не понял, как быть в ситуации, если мне, например, требуется переопределить маппер одного из модулей, а я не знаю, переопределен ли он уже иним плагином?
Например, работаю через
Переопределяю один из стандартных методов маппера комментариев: например добавляю работу с дополнительными полями таблицы комментариев
К примеру, этот метод класса /classes/modules/comment/mapper/Comment.mapper.class.php
Как мне узнать, не был ли уже этот метод переопределен другим плагином? Что будет, если он уже был переопределен? И нужно ли мне сообщать другим плагинам, что я переопределяю этот метод? Ну что бы не было конфликтных ситуаций…
Например, работаю через
protected $aInherits=array(
// Переопределяю маппер
'mapper' =>array('ModuleComment_MapperComment')
);
Переопределяю один из стандартных методов маппера комментариев: например добавляю работу с дополнительными полями таблицы комментариев
К примеру, этот метод класса /classes/modules/comment/mapper/Comment.mapper.class.php
public function GetCommentsRatingByDate($sDate,$sTargetType,$iLimit,$aExcludeTarget=array(),$aExcludeParentTarget=array())
Как мне узнать, не был ли уже этот метод переопределен другим плагином? Что будет, если он уже был переопределен? И нужно ли мне сообщать другим плагинам, что я переопределяю этот метод? Ну что бы не было конфликтных ситуаций…
20 комментариев
так узнаешь всю цепочку
выполнится последний в цепочке
таких стандартных механизмов не имеется
магический sql-билдер у нас не прижился, посему в мапперах имеем сырые sql-запросы.
в общем, ситуация с мапперами такая же унылая, как и с переопределением шаблонов.
Получается так?
И как не подвести других, если пишешь плагин?
Банально, я хочу переопределить метод , добавив в его sql запрос обработку своего поля…
Как мне быть в такой ситуации? Т.е., выходит война разработчиков за возможность первым написать плагин? :-)
class PluginName_ModuleComment_MapperComment extends PluginName_Inherit_ModuleComment_MapperComment {
public function GetCommentsRatingByDate($sDate,$sTargetType,$iLimit,$aExcludeTarget=array(),$aExcludeParentTarget=array()) {
//Мой код тут
}
}
Отладил у себя, все работает гладко. Устанавливаем на сайте заказчика… Работает не так, как надо.
Оказывается, один из уже установленных плагинов переопределяет тот функционал, который нужен моему плагину.
Там где безболезненно для остальных плагинов, можно было сделать Хуком в пару строчек, почему то переопределяются методы, с большой вероятностью важные для других плагинов.
В итоге приходится делать хук, «восстанавливать» переопределенный и убитый функционал… Выискивать зависимости в других планинах…
Неудобно. Очень. В идеале, разработчик плагина должен быть зависим только от движка. А в итоге получаем, что разработчик плагина зависим от разработчиков всех других плагинов. Нет централизации и независимости.