Имеем два файла в шаблоне отвечающие за вывод контента и сайдбара(то что меня интересует):
— main.tpl.php (отвечает за вывод всего, поточнее отдельно сайдбар(блок В) и отдельно массив в котором выводятся блок А и Б)
— default_item.tpl.php (выводит только блок А и Б)
В первом выводятся сайдбар и массив выводящий второй файл, т.е. саму статью, и тут выскакивает моя проблема, хочу заверстать так как на примере, т.е. сайбдар и контент должны быть в одном контейнере, а фотография с заголовком и прочими нужными полями в другом.
Есть идеи?
Один из вариантов, вывести блок А в main.tpl.php, тем самым заверстав оставшиеся блоки Б и В без проблем. Возможно ли это?
Или вывести сайдбар в самом default_item.tpl.php, что, конечно же, сильно предпочтительнее, или и вовсе тут выводить свои виджетики отдельно от сайдбара, последнего просто скрыть в этом разделе.
Дописываю текст и понимаю в каком направлении копать — помогите вывести отдельно виджеты в самом default_item.tpl.php
помогите вывести отдельно виджеты в самом default_item.tpl.php
<?php cmsCore::getInstance()->runWidgets(); $this->widgets('position'); ?>
Я делал хак ядра, чтобы минимизировать тормоза и убрать проблемы с остальными виджетами:
Меняем функцию runWidgets() в \system\core\core.php и добавляем опциональный параметр с именем позиции:
/** * Запускает все виджеты, привязанные к текущей странице * или виджеты в указанной позиции * @param string $position Имя позиции для обработки */ // >> <WebMan> - Обработка отдельной позиции public function runWidgets($position = ''){ // << </WebMan> - Обработка отдельной позиции // в админке нам виджеты не нужны if ($this->controller == 'admin') { return; } $widgets_model = cmsCore::getModel('widgets'); $pages = $widgets_model->getPages(); $matched_pages = $this->detectMatchedWidgetPages($pages); $widgets_list = $widgets_model->getWidgetsForPages($matched_pages, cmsTemplate::getInstance()->getName()); foreach ($widgets_list as $widget){ continue; } // >> <WebMan> - Обработка отдельной позиции if (!$position || $widget['position'] == $position) { $this->runWidget($widget); } // << </WebMan> - Обработка отдельной позиции } } }
Вызов делаем по примеру DK, но с указанием позиции виджета runWidgets('position'):
<?php cmsCore::getInstance()->runWidgets('position'); $this->widgets('position'); ?>
[полез обнимать вот этих вот двоих]