Вывод контента Независимо от сайта, будто сайт-визитка, бизнес-сайт, вывод контента – это пожалуй самая острая проблема при разработке Интернет-проекта. Если в самом материале можно вывести компонент Joomla, то как это можно сделать поза материалом? Например, какой php-код следует прописать, чтобы отобразить модуль в правой или левой колонке (sidebar) сайта?

Ранее, на страницах Блога уже говорили, что для вывода компонента в материале можно использовать строки
{loadposition позиция модуля}
{loadmodule название модуля}
Сначала публикуем модуль в соответствующей позиции (если нет необходимой, прописываем позицию в ручную) и потом в зависимости от ситуации, выводим его в материале. Этот вариант срабатывает только для материала. Но судя по количеству вопросов на Форумах, бывают случаи, что тот или иной компонент необходимо вывести в Sidebar-е.

Sidebar (сайдбар) сайта   — это вертикальная колонка, которая располагается как по сторонам от основного контента страницы так и только слева, справа, и может содержать различное наполнение – от основного (меню навигации) до второстепенного (баннеры и тд).

Но вернемся к CMS Joomla. Благодаря своей структуре и функциональным возможностям, Joomla позволяет вывести компонент в любой части шаблона, необходимо только преждевременно определится с компонентом и местом его отображения.
И так, например, необходимо среди содержания компонента, расположенного в левом Sidebar-е, вывести некий модуль.

Вывод позиции модуля

Этот вариант пожалуй самый простой. Он практически ничем не отличается от этапов реализации представленного выше способа – loadposition , разве что только способом вывода.
И так припустим, мы уже опубликовали некий модуль в некой позиции (bar-banners) и теперь осталось его только вывести. Реализуем это с помощью следующего php-кода















$document





   = & JFactory::getDocument();






$renderer





   = 





$document





->loadRenderer(





'modules'





);






$options





    = array(





'style'





 => 





'xhtml'





);






$position





   = 





'bar-banners'





;
echo 





$renderer





->render(





$position





, 





$options





, null);








где $option – это способ отображение (стили) данного модуля.
И снова таки, следует подчеркнуть, что если в этой позиции (bar-banners), кроме модуля опубликованы еще компоненты, то в приведенном варианте отображения будут выводится все модули этой позиции. Чтобы вывести единственный – или задаем «уникальную» позицию или используем следующий вариант — Вывод одного модуля.

Вывод одного модуля

В сравнении с позицией, реализация вывода одного модуля осуществляется немного сложнее и связано это с параметрами вывода, которые необходимо задать в ручном режиме. Правда, можно этого не делать. В таком случае, будет использоваться стиль отображения компонента по умолчанию.
И все-таки, чтобы вывести один модуль, необходимо прописать следующие строки















$document





   = & JFactory::getDocument();






$renderer





   = 





$document





->loadRenderer(





'module'





);






$options





    = array(





'style'





 => 





'raw'





);






$module





     = JModuleHelper::getModule(





'mod_custom_banners'





);






$module





->params    = 





"heading=2\nlimit=10"





;
echo 





$renderer





->render(





$module





, 





$options





);








где для загрузки модуля используется JModuleHelper , но а стили отображения такие же, как и у mod_custom_banners. Обратите внимание, что в переменной $module->params установлены те же параметры, что и в файле конфигурации и при этом, каждый новый параметр разделен символом \n (новая строка).

Вот собственно и все тонкости вывода модулей с помощью php-кода. Но на этом разнообразие вывода не останавливается. Приведем еще несколько вариантов отображения, но уже с использованием ID

Выводим категорию















<?php












if





(!class_exists(





'JCategories'





)) 





require_once





 JPATH_ROOT.






'/libraries/joomla/application/categories.php'





;






//получаем категорию с id=64












$youCategory





 = JCategories::getInstance(





'Content'





, 





array





())->get(





64





);






//Выводим заголовок если надо












echo





 





$youCategory





->title;






//Выводим текст












echo





 





$youCategory





->description;






//нужно еще, что-то смотри здесь var_dump($youCategory);












?>














Выводим материал















<?php












if





(!class_exists(





'ContentModelArticle'





)) 





require_once





 JPATH_ROOT.






'/components/com_content/models/article.php'





;






$article





 = 





new





 ContentModelArticle;






//получаем документ с id=14












$youArticle





 = 





$article





->getItem(





14





);






//Выводим заголовок если надо












echo





 





$youArticle





->title;






//Выводим текст












echo





 





$youArticle





->introtext;






//нужно еще, что-то смотри здесь var_dump($youArticle);












?>





 








Если Вам, читатель, известны еще варианты отображения, рад буду видеть их в комментариях к материалу.