Проблема с хуками

Подкскажите, пожалуйста, не совсем понимаю. Прочитал вот этот топик Механизм хуков в движке но не понял.

Делаю плагин, в котором есть новый тип топика (отель, описание отеля).

Добавление работает отлично, а как из плагина управлять выводом 1 топика?

Написал я хук

<?
class PluginHotels_HookTopic extends Hook
{

public function RegisterHook()
    {
    	$this->Hook_AddExecModule('topic_show', 'PluginHotels_Topic_TopicShow',__CLASS__, 10);
    } 
}


Соответственно в


class PluginHotels_ModuleTopic extends Module
{
public function TopicShow($oTopic)
    {
    	print $oTopic->getId();
    }
}


но во-первых не видит метод getId(); хотя для топика он есть а во вторых, непонятно что дальше.

Мне нужно чтобы выводился топик этот согласно шаблону, который лежит в шаблонах плагина (templates/skin/default/hotel.tpl) а не в общих шаблонах с префиксом topic_hotel.tpl

ну и все остальное ))

15 комментариев

avatar
Или же тут стоит смотреть в сторону этого мануала? livestreet.ru/blog/dev_documentation/4499.html#cut
avatar
У вас версия ls какая?

Либо я очень туплю либо не знаю
откуда вы взяли AddExecModule?
avatar
Ну окей взять могли из старой доки или таких некротопиков
livestreet.ru/blog/dev_documentation/1484.html
avatar
Нет это все же я туплю, минусуйте)
avatar
Ваша задача не переопределить хук, а переопределить метод.
Как раз по ссылке в вашем комментарии все есть.
avatar
не совсем понимаю ( он же переопределится для всех типов топиков?
avatar
А, т.е я например в модуле своем делаю так:

protected $aInherits=array(
       'module'  =>array('ModuleTopic')
    );


далее в папке своего плагина в class/modules/topic/Topic.class.php

пишу

class PluginHotels_ModuleTopic extends ModuleTopic
{
}


так?

Тогда при выводе топика выдается ошибка

Fatal error: Call to undefined method PluginHotels_ModuleTopic_MapperTopic::GetTopicsReadByArray()


((
avatar
Нет:
class PluginHotels_ModuleTopic extends PluginHotels_Inherit_ModuleTopic
avatar
Уже методом проб и ошибок нашел такой вариант ) правда стали выскакивать ошибки в других плагинах на необъявленные методы (
avatar
После этого большинство проблем иссякнет:

public function MethodName() {
    $return=parent::MethodName();
    // some code here
    return $return;
}
avatar
а, т.е написать в новый класс недостающие методы? Простите за глупые вопросы ) не совсем просто понимаю )
avatar
Нет, если наследуешь существующий метод, надо возвращать его результаты.
А ели в модуле нужны новые методы, то тогда уж лучше их не наследовать.
avatar
ммм… кажется начинаю понимать ) Спасибо, сейчас попробую!
avatar
Еще такой момент:

не всегда срабатывают getтеры и setтеры которые прописаны в plugins/hotels/modules/topic/entity

а когда я пишу

protected $aInherits=array(
       'module'=>array('ModuleTopic'),
       'entity'=>array('ModuleTopic'),
            
    );


То выдает

Fatal error: Class 'PluginHotels_ModuleTopic' not found in /****/engine/include/function.php(421) : eval()'d code on line 1
avatar
Я так понимаю что затык в самих классах, где я пишу

class PluginHotels_ModuleTopic_EntityTopic extends Topic_Inherit_EntityTopic
{
	
}
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.