Независимо от сайта, будто сайт-визитка, бизнес-сайт, вывод контента – это пожалуй самая острая проблема при разработке Интернет-проекта. Если в самом материале можно вывести компонент 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);
?>
Если Вам, читатель, известны еще варианты отображения, рад буду видеть их в комментариях к материалу.