Некоторые вопросы по разработке плагинов

Написал около десятка плагинов, но мне кажется я не все понял о наследовании в 0.4.2

1) как в шаблоне использовать данные конфига для foreach, elseif?
Пример:
{if {cfg name='path.root.web'}}
    это естественно не работает, как правильно?
    если мы делегируем только шаблон и у нас нет возможности присвоить
    переменной значение конфига в блоке/экшене/хуке
{/if}

я пока решаю эту проблему таким костылем

{php}
if ((Config::Get('plugin.name.value')) && $oUserCurrent {
    {/php}
    вот такой костыль
    {php}
}
{/php}


2) Как обстоят дела с наследованием экшенов?
Если мне приходится вмешаться в регистрацию, чтобы добавить проверку, мне приходится переопределять метод класса регистрации, должен быть лучший путь

class PluginExample extends Plugin {

    /**
     * Делегирование регистрации
     */
    public $aInherits = array(
        'action' => array('ActionLogin', 'ActionRegistration', 'ActionTalk'),
    );

    ...
}


class PluginExample_ActionRegistration extends PluginExample_Inherit_ActionRegistration {

    protected function EventIndex() {
    ...
    $this->PluginAntistatist_Antistatist_addLogin($oUser->getLogin());
    ...
    }

выдирать ради этого целый метод это большой костыль. вроде можно повесить свой код на конец или начало выполнения метода модуля регистрации, но что, если надо вывести сделать проверку и в экшене регистрации вывести ошибку, совать ее в модуль не правильно?

3) вот если мне необходимо изменить голосование за топики, строчку

<li class="minus"><a href="#" onclick="lsVote.vote({$oTopic->getId()},this,-5,'topic'); return false;"></a></li>

как мне это лучше сделать? каким образом переопределить файл аякса, принимающий запрос на изменение рейтинга топика, а так же можно ли изменить саму эту строчку, не делегируя целиком шаблоны topic.tpl и topic_list.tpl и закрывая тем самым эти шаблоны от изменения другими плагинами?

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

avatar
вам бы еще смарти по копать.

1. — это в корне не правильно использование {} внутри {if }, а обратиться к параметру из конфига в шаблоне можно с помощью подобной конструкции $oConfig->GetValue('view.tinymce')…
avatar
Попробую, если получится, то отличный выход :)
Надеюсь на остальные вопросы ответы получу
avatar
по смарти пытался копать, не нашел файл прослойку между лисвтритом и смарти, подскажете?
avatar
Viewer.class.php
Там есть функция типа getSmartyObject, которая возвращает голый смарти, с которым потом можно общаться напрямую.
avatar
Прав!
avatar
2. Ищи в том классе, куда хочешь добавить код строчку
Hook_Run('some_string');
Если она есть в нужном тебе месте, ты можешь туда вставить свой код. Если нет — то наследовало класс и переопределять функцию. Но лучше найти хук.
avatar
спасибо!
avatar
3.
Пишешь свой файл обработки аякс запроса по образу и подобию того, что есть.
Находишь в ЛС JS функцию, которая запрос отправляет, пишешь свою аналогичную
В ЛС есть встроенный MooTools:
Тебе нужно написать JS, который при обнаружении формы заменит onClick на нужный тебе.
Код там достаточно простой.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.