Как правильно переопределить Action
Вопрос отчасти продолжение
этого вопроса, но появились некоторые нюансы.
К примеру у меня есть 2 РАЗНЫХ типа топика которые должны отображаться по разному.
Пример если я реализовую отображение топика так:
То этот метод будет отрабатывать ДЛЯ ВСЕХ топиков независимо от типа. Соответственно я и делаю проверку на тип топика:
И вроде бы все хорошо.
НО. Теперь если я добавлю еще один новый тип топика с таким же кодом:
то здесь происходит конфуз. А конкретно, этот переопределенный метод не будет выполняться никогда. Потому что в предыдущем вызывается return parent::EventShowTopic();, который вызывает оригинальный метод.
Вопрос. Как преодолеть этот конфуз?
этого вопроса, но появились некоторые нюансы.
К примеру у меня есть 2 РАЗНЫХ типа топика которые должны отображаться по разному.
Пример если я реализовую отображение топика так:
protected function EventShowTopic() {
if (!($oTopic=$this->Topic_GetTopicById($iTopicId))) {
return parent::EventNotFound();
}
if($oTopic->getType() != 'mytopic') {
return parent::EventShowTopic();
}
То этот метод будет отрабатывать ДЛЯ ВСЕХ топиков независимо от типа. Соответственно я и делаю проверку на тип топика:
if($oTopic->getType() != 'mytopic') {
return parent::EventShowTopic();
}
И вроде бы все хорошо.
НО. Теперь если я добавлю еще один новый тип топика с таким же кодом:
protected function EventShowTopic() {
if (!($oTopic=$this->Topic_GetTopicById($iTopicId))) {
return parent::EventNotFound();
}
if($oTopic->getType() != 'myNEWtopic') {
return parent::EventShowTopic();
}
то здесь происходит конфуз. А конкретно, этот переопределенный метод не будет выполняться никогда. Потому что в предыдущем вызывается return parent::EventShowTopic();, который вызывает оригинальный метод.
Вопрос. Как преодолеть этот конфуз?
2 комментария
Так, при инициализации плагина все делегаты записываются через визов метода Plugin_Delegate() модуля
engine/modules/plugin/Plugin.class.php.
Но при вызове следующего метода плагина он перезаписывает предыдущий делегат
возможно стоит заменить код
в этом модуле на что-то похожее на код Inherit:
так как судя по коду (да и по практике), здесь идет накопление а не перезаписывание
возможно г-н ort что-то посоветует.