Создание плагинов с блоками в LiveStreet 1.0

Здравствуйте, пробую сейчас обновить свой старый плагин до совместимости с v1.0
Возникла проблема с блоком который должен отображаться на главной странице.
В старом конфиге было так:
Config::Set('block.rule_index_blog.blocks.right.myplugin',array('params'=>array('plugin'=>'myplugin')));
и сам шаблон блока размещался в папке templates/skin/default
Сейчас если запускаю его, то вываливается ошибка, о том что невозможно найти шаблон.
Fatal error: Uncaught exception 'Exception' with message 'Can not find the block`s template: myplugin'
Это и понятно потому как новшество v1.0 — пернесение шаблонов блоков в подпапку blocks.
Но когда я перенес шаблон в папку blocks — то ошибка осталась, потому что ЛС хочет загрузить блок с предыдущего места.
Fatal error: Uncaught exception 'SmartyException' with message 'Unable to load template file '...........plugins/myplugin/templates/skin/default/block.myplugin.tpl'
Получаеться что для того чтобы отобразить блок, необходимо разместить шаблон блока в 2-х местах templates/skin/default/blocks и templates/skin/default потому что если нет шаблона блока в templates/skin/default/blocks то выдается ошибка:
Fatal error: Uncaught exception 'Exception' with message 'Can not find the block`s template: myplugin'

А если шаблон блока есть только в templates/skin/default/blocks то выдается ошибка
Fatal error: Uncaught exception 'SmartyException' with message 'Unable to load template file '...........plugins/myplugin/templates/skin/default/block.myplugin.tpl'

Это проблема у меня в плагине\конфиге? Если да, то где?.. Спасибо

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

avatar
Решено, сам виноват однако.
avatar
И как вы решили пробелму в итоге?
avatar
покажите свой код блока
avatar
Код:
class PluginCategory_BlockNewall extends Block {

public function Exec()
{
$iPage = 1;
$aResult=$this->Topic_GetTopicsNewAll($iPage, 10);
$aTopics = $aResult['collection'];
//Передаем данные уже в глобальный объект вида
$this->Viewer_Assign('aTopics',$aTopics);
}
}

Конфиг:

$config['block']['rule_sidebar'] = array(
'path' => array(
'^___path.root.web___/*'
),
'blocks' => array(
'sidebar' => array('newall'=>array('priority'=>100))
),
'clear' => false,
);
avatar
Ошибку я получаю такую:
Fatal error: Uncaught exception 'Exception' with message 'Can not find the block`s template: newall' in C:\Inetpub\LS\engine\modules\viewer\Viewer.class.php:586 Stack trace:
#0 C:\Inetpub\LS\plugins\aceadminpanel\classes\modules\viewer\Viewer.class.php(484): ModuleViewer->DefineTypeBlock('newall', NULL)
#1 C:\Inetpub\LS\engine\modules\viewer\Viewer.class.php(487): PluginAceadminpanel_ModuleViewer->DefineTypeBlock('newall', NULL)
#2 C:\Inetpub\LS\plugins\aceadminpanel\classes\modules\viewer\Viewer.class.php(463): ModuleViewer->AddBlock('sidebar', 'newall', Array, 5)
#3 C:\Inetpub\LS\engine\modules\viewer\Viewer.class.php(706): PluginAceadminpanel_ModuleViewer->AddBlock('sidebar', 'newall', Array, 5)
#4 C:\Inetpub\LS\engine\modules\viewer\Viewer.class.php(1408): ModuleViewer->BuildBlocks()
#5 C:\Inetpub\LS\engine\classes\Engine.class.php(355): ModuleViewer->Shutdown()
#6 C:\Inetpub\LS\engine\classes\Engine.class.php(266): Engine->ShutdownModules()
#7 C:\Inetpub\LS\engine\classes\Router.class.php(136): Engine->Shutdown()
#8 in C:\Inetpub\LS\engine\modules\viewer\Viewer.class.php on line 586
avatar
какой путь до файла шаблона блока?
avatar
Путь до шаблона блока — c:\Inetpub\LS\plugins\category\templates\skin\default\blocks\block.Newall.tpl
Путь до класса блока — c:\Inetpub\LS\plugins\category\classes\blocks\BlockNewall.class.php
avatar
нужно block.newall.tpl
avatar
не помогло — работает все на винде. Плюс методом тыка выяснилось: 1) если файл шаблона вообще удалить или 2) закомментировать код в классе, то сообщение об ошибке не изменяется. Такое впечатление что они тут ни причем.

Наверно, я не до конца понимаю как работает конфиг для блоков или не там\не правильно прописаны настроки (сейчас они в глобальном конфиге, не в кофиге плагина — тут ошибки нет и вывода блока тоже). Если я меняю в конфиге блока

'sidebar' => array('newall'=>array('priority'=>100))
на
'sidebar' => array('tags'=>array('priority'=>100))
то теги выводятся.

Кажется, что LS не находит обработчик блока newall или ничего о нем не знает. Случаем, его в плагине нигде не надо регистрировать?
avatar
если есть teamviewer давайте в личку я гляну вживую
avatar
Эксперимент показал, что если перенести класс блока из папки плагина в глобальную папку блоков /classes/blocks/ и шаблон блока перенести из папки шаблонов плагина в папку с текущим глобальным шаблоном сайта, то все работает отлично.
avatar
Всем спасибо! Проблема решилась изучением call-стека и кода Viewer.class.php. Движок искал шаблон в папке с темой сайта, вместо папки шаблонов плагина потому, что в кофиге блока не был указан плагин, то есть верный конфиг должен быть таким:
$config['block']['rule_sidebar'] = array(
'action' => array(
'index'
),
'path' => array(
'^___path.root.web___/*',
),
'blocks' => array(
'sidebar' => array('newall'=>array('priority'=>50, 'params'=>array('plugin'=>'category')))
),
'clear' => false,
);
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.