Как управлять Блоками плагина в 0.4?

Задача: Есть плагин, в составе которого есть блок, который надо выборочно распихать по экшнам/экшнам+эвентам (наподобие блока баннера fastvps на главной+блогах)

Насколько я успел заметить, в конфиге есть правила для блоков, но подробно понять что там к чему разом не сумел. Функций в viewer'е не нашел для управления этими правилами, так же не нашел полезных комментариев в коде.

В итоге повесил хук на init_action, обращающийся к роутеру за сведениями об экшне+эвенте и этим хуком по собственным правилам вывожу необходимый блок.

+ понадобилось отключить в конфиге block.rule_index_blog.clear, иначе блок не выводился на главной (скорей всего это надо пофиксить в svn'е)

Вопрос: как мне наиболее православно всё это переписать, ибо я копчиком чувствую костыльность решения?

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

avatar
Блок из плагина указывается как и обычные, только нужно передать в него параметр 'plugin' со значением имени плагина.

$this->Viewer_AddBlock('right','category',array('plugin'=>'filepanel'));

Добавить в правый сайдбар блок PluginFilepanel_BlockCategory.
Через конфигурацию делается точно также.
avatar
а как из хука плагина выставить правила для показа блока плагина в разных экшнах (даже вне плагина)?
через Config::Set('block.my_rule',… ) и только так?
avatar
только так?
А чем вас такое не устраивает?
avatar
было бы удобно иметь методы в viewer'е для изменения этих правил ну или хотя бы легкую доку по написанию этих правил в конфиге
avatar
Какая разница, как менять правила — через Config::Set() или через Engine::getInstance()->Viewer_*?
avatar
Зачем же конфиг для этого дергать? Вот так это делается:
if (Router::GetAction()=='...') {
  $this->Viewer_AddBlock('right','category');
}
avatar
да, я сделал так, не найдя более православных инструментов, но правила в конфиге выглядят более функционально и обрабатываются родным методом viewer'a BuildBlocks. зачем же тогда дублировать его работу?
avatar
… обрабатываются родным методом viewer'a BuildBlocks...
Ага, который в итоге добавляет блоки своим же родным методом AddBlock(), которым я и предложил воспользоваться.
avatar
Алексей, а зачем имя плагина передавать?
avatar
А как искать блок плагина, если не указано с какого он плагина?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.