Опубликовано автор в категориях Всем сразу.

Я уже писал о преимуществах возможности переписывания разметки в Joomla! 1.5, но эти преимущества порой просто поражают. Поскольку мы имеем возможность использовать Joomla Framework API в наших шаблонах, у нас есть возможность вывести любой модуль в шаблоне, или любую позицию для последующего вывода модуля. Кроме того, используя код приведенный ниже вы также можете вывести модуль Joomla! в любом шаблоне любого, который поддерживает MVC.

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

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

<?php
    $document	= &JFactory::getDocument();
    $renderer	= $document->loadRenderer('modules');
    $options	= array('style' => 'xhtml');
    $position	= 'article-banners';
    echo $renderer->render($position, $options, null);
?>

Операции, которые мы выполняем в этом коде: загрузка документа, вывод рендеринга модулей из документа, установка стиля модуля (raw, XHTML, и т.д.), а затем вывод желаемой позиции для модуля.
Вывод позиции для модуля очень удобен, так как, вы можете использовать админпанель Joomla!, чтобы установить все ваши параметры для модуля.

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

Вывод одного модуля реализовать немного сложнее, потому что вы должны определить все параметры вручную. Если вы этого не сделаете, то вам придется использовать параметры установленные в модуле по умолчанию. Вот код, который можно использовать для вывода модуля:

<?php
    $document	= &JFactory::getDocument();
    $renderer	= $document->loadRenderer('module');
    $options	= array('style' => 'raw');
    $module		= JModuleHelper::getModule('mod_comments_comments');
    $module->params	= "heading=2\nlimit=10";
    echo $renderer->render($module, $options);
?>

Здесь мы опять получаем документ, но на этот раз мы вызываем рендеринг модуля а не позиции. Также мы указали стиль для вывода модуля. А далее, используем JModuleHelper для загрузки самого модуля по его машинному имени. Это возвращает объект модуля. Затем мы устанавливаем свойства параметров модуля в том же формате как они записываются в INI-файле, отделяя каждый параметр с символом новой строки «\n». Вот и все. Стоит сказать что данный метод я узнал из статьи Loading Joomla Modules from Layout Overrides довольно давно, но все никак не хватало времени написать перевод в своем блоге. Надеюсь, что это метод будет для вас полезным.

P.S. Мысли о заработке в сети…

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

24 комментария к записи “Вывод модуля Joomla! там, где вам нужно”

    • hiway

      Нет.{mosloadposition} не позволяет корректно выводить модули в шаблонах расширений. А с помощью данных методов вы сможете вывести модуль где угодно. Кроме этого, с помощью данного способом можно удачно формировать переменные для вывода, скажем, горизонтального выпадающего меню.

      Ответить
  1. kozsv

    Автор, а Вы не могли бы описать какие параметры в коде, за что отвечают, если не трудно

    Ответить
  2. Hiway

    Собственно, ситуация такова… Что первый кусок кода позволяет вывести позицию модуля там где вам нужно, ну допустим в вашем шаблоне, или даже самом тексте, не важно. А второй выводит не позицию а сам модуль.
    А детально вот так:

    <?php
        $document	= &JFactory::getDocument(); //Обращаемся к документу через стандартный метод Joomla!
        $renderer	= $document->loadRenderer('module'); //Далее, указываем какой именно тип дока мы рендерим
        $options	= array('style' => 'raw'); //Когда поняли, что это модуль, то указываем в каком стиле рендерить
        $module		= JModuleHelper::getModule('mod_comments_comments'); // Определяем переменную модуля, указывая, какой именно модуль рендерить
        $module->params	= "heading=2nlimit=10"; // Указываем параметры для модуля
        echo $renderer->render($module, $options); // Запускаем рендер модуля с параметрами
    ?>
    Ответить
  3. t4ox

    Спасибо за статью, как раз то что искал) Есть только один вопрос. Как можно вызвать модуль по его id? а не по имени.

    Ответить
  4. serg

    При выводе таким способом модулей бывает наблюдается глюк — модуль выводится в модуле.

    Ответить
  5. Михаил

    Спасибо АВТОР!!!! Очень нужно когда mod_breadcrumbs надо под заголовком компонента но перед контентом выводить. Пол и-нета перевыл ради этого. Респект

    Ответить
  6. Denis

    просто хочу выразить спасибо!
    единственное место где нашел, то что искал. пожалуй задержусь тут у вас -) и осмотрюсь -) еще раз спасибо автору . и всех с наступающим Праздником: Днем Великой Победы. Не позволяйте его забывать!

    Ответить
  7. Лариса

    Напишите, мне чайнику, куда вставить этот код. В какое именно место. У меня есть строка [raw outline], но также нет названия позиции и я не могу туда вставить меню. Нашла вот ваш сайт, вижу код. Не знаю куда его поставить. Напишите еще статью на эту тему. Т.к. в инете вопросов много, а ответов нет, как поставить меню в [raw outline] если нет названия позиции. Только подробно. Заранее спасибо

    Ответить
  8. Елена

    Добрый день! У меня такая же проблема. что у Ларисы. Есть строка в шаблоне [raw outline]. Позицию модуля я вывела, но меню всё равно не отображается на сайте. не знаю что делать! Помогите!!!! Мне нужно меню именно в позиции raw. Скачала несколько шаблонов с позициями raw, но меню не отображается не в одном.

    Ответить
    • Hiway

      Елена не может быть позиции [raw outline]. Позиция для модуля не может называться двумя словами с пробелом, скорее всего в вашем случае это позиция и стиль. Хотя, опять же так никто не задает вывод в стандартных позиций в Joomla! Должно быть вот так name=»position-15″ — это и есть название позиции, а style=»raw» это стиль вывода позиции в шаблоне, который определяется в modules.php папки /html вашей темы или в такой же папке системного шаблона.

      Ответить
    • Netscout

      К сожалению модуь не выводится если он не включен ! А как вывести можуль если он отключен ?

      Ответить
      • Hiway

        Netscout, а что мешает вам его включить? Ну и как вариант, попробуйте через вывод позиции, хотя рендер запрашивает параметры из базы и если там active стоит в 0, то вряд ли. Можно включить модуль но не привязывать его к меню и тогда он выведется только там где вам нужно, это еще как вариант.

        Ответить
  9. Нелли

    Hiway, как же поставить меню в [raw outline] если нет названия позиции? Я тоже столкнулась с этой проблемой. Забавная ситуация. стиль позиции есть, а модуля нет. Буду благодарна за помощь.

    Ответить
  10. Hiway

    Нелли, во-первых, [raw outline] неправильная формулировка, поскольку оба выражения это определения стилей для вывода модулей. raw — это вывод модуля без дополнительных контейнеров, стиль outline — это вообще системный стиль который показывает только начертание, если так можно выразится, модуля в определенной позиции.
    Приведенные в статье примеры позволяют вывести либо позицию модуля либо сам модуль. При этом если вы выводите модуль по типу, то можете настроить его с помощью массива параметров

    $module->params	= "heading=2nlimit=10"; // Указываем параметры для модуля
    Ответить
  11. olejenya

    привет,делаю тоже самое,только вывожу модуль в мега меню,на первый взгляд все хорошо,
    но когда посмотрел на сам модуль мегаменю,то появляеться такая ошибка
    у меня выводиться модуль в дивах, таким образом

    навигация

    когда я добавляю в пункт меню модль какойто и вывожу, то у меня меняеться структу

    навигация

    и ломаеться вся структура, дело в том что мой сайт построен таким образом,что в модулес пхп я назначаю дивке и название модуля и так стилизирую.
    Вот теперь не знаю что делать.Подскажите?)

    Ответить
    • Hiway

      olejenya, вот эта переменная $options = array('style' => 'raw'); содержит масив с опциями, в частности, видно, что в данный момент мы передаем стиль модуля, как вы знаетет вы можете сами написать дополнительный шаблон стиля где будет полностью исключена вся разметка, даже оберточный див, и передать его имя в опциях.

      Ответить

Оставить комментарий

  • (не будет показан)