Помогите с написанием плагина

Хочу аккуратно подкорректировать LS под свои нужды. Решил использовать LS 0.4 и сделать плагин.

Я добавил новый тип топика и для этого типа топика хочу допилить (посредством плагина) TopicEntity_Topic парой функций, т.е. расширить его. Тыкаюсь, тыкаюсь и ничего не получается…

На сколько я понимаю, мне нужно делегировать «entity» и создать свой(внутри плагина) Topic.entity.class.php с таким содержанием:

require_once(Config::Get('path.root.server').'/classes/modules/topic/entity/Topic.entity.class.php');

class PluginMyTopic_TopicEntity_Topic extends TopicEntity_Topic
{
    public function setMyData($data) {
        if ($this->getType()!='myTopicType') {
    		return;
    	}
    	$this->extractExtra();
    	$this->aExtra['mydata']=$data;
    	$this->setExtra($this->aExtra);
    }
........


Вобщем, туплю я и ничего у меня не получается… Можете подсказать, как точно должно выглядеть делегирование и описание класса?

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

avatar
require_once не обязательно указывать.
файл в этом случае должен лежать по пути
plugins/mytopic/classes/modules/topic/entity/

А в классе плагина должно быть прописано делегирование примерно так:

protected $aDelegates=array(
		'entity'=>array('Topic'=>'PluginMytopic_Topic_Topic')
	);
avatar
Спасибо!
Правда, буквально час назад сам дошел:) (я делегирование неправильно писал...)
avatar
еще вопрос, если не сложно, помогите…
я в своем плагине сделал свой topic.tpl (лежит тут: myplugin/templates/skin/default/) но он почему-то не цепляется вместо исходного? На сколько я понял из описания плагиностроения он должен цепляться без каких-либо доп действий с моей стороны… Или я что-то не так понял? тогда что нужно сделать?
avatar
нет, его тоже необходимо делегировать, причем с указанием относительного пути от директории /templates/skin/new, т.е. так:
protected $aDelegates=array(
                'templates'=>array('topic.tpl'=>'../../../plugin/myplugin/templates/skin/default/topic.tpl')
        );
avatar
Что-то у меня все равно не цепляется… причем похоже, что проблема в первой части, т.е. в 'topic.tpl'. Он не понимает _что_ подменять — выдает исходный topic.tpl, и не важно что я пишу во второй части после "=>"
avatar
этот файл инклудится из actions/ActionBlog/topic.tpl, а динамические инклуды не делегируются сейчас. делегируйте сначала actions/ActionBlog/topic.tpl и в нем измените путь к подключаемому файлу на ../../../plugin/myplugin/templates/skin/default/topic.tpl
avatar
точнее ../../../plugins/myplugin/templates/skin/default/topic.tpl
или {cfg name='path.root.server}/plugins/myplugin/templates/skin/default/topic.tpl
avatar
я не понял как делегировать… как должна выглядеть часть перед "=>"? Похоже, просто «topic.tpl» ничего не дает.
avatar
читайте внимательнее — livestreet.ru/blog/questions/3904.html#comment60208
protected $aDelegates=array(
                'templates'=>array('actions/ActionBlog/topic.tpl'=>'../../../plugin/myplugin/templates/skin/default/actions/ActionBlog/topic.tpl')
        );
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.