Как правильно переопределить Action

Вопрос отчасти продолжение
этого вопроса, но появились некоторые нюансы.
К примеру у меня есть 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 комментария

avatar
Провел небольшой ресерч и обнаружил что это особенность ЛС.
Так, при инициализации плагина все делегаты записываются через визов метода Plugin_Delegate() модуля
engine/modules/plugin/Plugin.class.php.
Но при вызове следующего метода плагина он перезаписывает предыдущий делегат
возможно стоит заменить код

		$this->aDelegates[$sType][trim($sFrom)]=array(
			'delegate'=>trim($sTo),
			'sign'=>$sSign
		);

в этом модуле на что-то похожее на код Inherit:

		$this->aInherits[trim($sFrom)]['items'][]=array(
			'inherit'=>trim($sTo),
			'sign'=>$sSign
		);

так как судя по коду (да и по практике), здесь идет накопление а не перезаписывание
возможно г-н ort что-то посоветует.
avatar
Обошел это ограничение через хуки. Возможно даже более красиво получилось.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.