Некоторые вопросы по разработке плагинов
Написал около десятка плагинов, но мне кажется я не все понял о наследовании в 0.4.2
1) как в шаблоне использовать данные конфига для foreach, elseif?
Пример:
я пока решаю эту проблему таким костылем
2) Как обстоят дела с наследованием экшенов?
Если мне приходится вмешаться в регистрацию, чтобы добавить проверку, мне приходится переопределять метод класса регистрации, должен быть лучший путь
выдирать ради этого целый метод это большой костыль. вроде можно повесить свой код на конец или начало выполнения метода модуля регистрации, но что, если надо вывести сделать проверку и в экшене регистрации вывести ошибку, совать ее в модуль не правильно?
3) вот если мне необходимо изменить голосование за топики, строчку
как мне это лучше сделать? каким образом переопределить файл аякса, принимающий запрос на изменение рейтинга топика, а так же можно ли изменить саму эту строчку, не делегируя целиком шаблоны topic.tpl и topic_list.tpl и закрывая тем самым эти шаблоны от изменения другими плагинами?
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 комментариев
1. — это в корне не правильно использование {} внутри {if }, а обратиться к параметру из конфига в шаблоне можно с помощью подобной конструкции $oConfig->GetValue('view.tinymce')…
Надеюсь на остальные вопросы ответы получу
Там есть функция типа getSmartyObject, которая возвращает голый смарти, с которым потом можно общаться напрямую.
Hook_Run('some_string');
Если она есть в нужном тебе месте, ты можешь туда вставить свой код. Если нет — то наследовало класс и переопределять функцию. Но лучше найти хук.
Пишешь свой файл обработки аякс запроса по образу и подобию того, что есть.
Находишь в ЛС JS функцию, которая запрос отправляет, пишешь свою аналогичную
В ЛС есть встроенный MooTools:
Тебе нужно написать JS, который при обнаружении формы заменит onClick на нужный тебе.
Код там достаточно простой.