Как отображать модуль в области компонентов

Мне часто нужно создать элемент меню, который отображает модуль в области компонентов, без какого-либо другого контента.

Как я решаю это, нужно создать новую статью и добавить в контент статьи только {loadposition mymodule}. Затем я создаю элемент статьи Single Article для статьи. Это нормально для одного модуля, но что, если у меня есть 20 разных модулей, которые я хочу отобразить таким образом? Мне нужно было бы создать 20 модулей, 20 (почти пустых) статей и 20 пунктов меню.

Существуют ли другие способы отображения модуля (и ничего больше) в области компонентов шаблона? Трюки? Хаки? Идеи?

10 голосов | спросил johanpw 4 22014vEurope/Moscow11bEurope/MoscowTue, 04 Nov 2014 02:14:02 +0300 2014, 02:14:02

7 ответов


8

Я сделал это, создав позицию модуля в том же месте с компонентом и проверив, присутствует ли модуль в этой позиции, затем отобразите его, иначе перейдите к компоненту:

Пример кода:

<main id = "content" role = "main" class = "main">
 & Lt;? PHP
 if ($ this-> countModules ('myposition'))
   {>
     <jdoc: include type = "modules" name = "myposition" style = "xhtml" />
 <? php}
  еще
  {>
     <jdoc: include type = "component" />
  <? php}?>
& Л; /& основная GT;

Затем, когда я хочу отобразить модуль вместо компонента на странице, я создаю модуль, назначая его этому элементу меню, и я закончил.

Небольшое примечание:

Для удобства и лучшей ясности я предлагаю назвать эту позицию модуля чем-то вроде «content-module», «main-module» или «compomodule». Все, что напомнит, что любой модуль, расположенный там, заменит компонентный выход.

ответил FFrewin 4 22014vEurope/Moscow11bEurope/MoscowTue, 04 Nov 2014 04:03:16 +0300 2014, 04:03:16
6

Чтобы улучшить приведенные ответы здесь:

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

echo JHtml :: _ ('content.prepare', '{loadposition yourmodulposition}');

в файл вида.

Вторая строка с коротким тегом позиции загрузки может быть заменена на var, который содержит больше html, если вам это нужно. Вам не нужно писать эту строку для каждой новой модульной позиции:

$ outputModules = '<strong> Some Html </strong>'
                 '{loadposition yourmodulposition1}'
                 . '{loadposition yourmodulposition2}';


echo JHtml :: _ ('content.prepare', $ outputModules);

(Я знаю, что это не прямой ответ на вопрос авторов.)

ответил Dennis Heiden 22 FebruaryEurope/MoscowbMon, 22 Feb 2016 16:06:27 +0300000000pmMon, 22 Feb 2016 16:06:27 +030016 2016, 16:06:27
1

Во-первых, согласно вашему вопросу, вы уже создаете 20 модулей и 20 пунктов меню, поэтому вам действительно нужно сделать только однострочный контент для каждого модуля. Если это действительно так обременительно, тогда идите с идеей @ FFrewin. Это немного хаки, но это сработает.

Лично я бы пошел с элементами контента. На самом деле я это сделал, когда создавал систему со всплывающими диалоговыми окнами, которые также хотели работать без js. Я разместил содержимое диалогового окна в модуле custom_html, сфальсифицировал модуль, который будет показан и размещен при нажатии ссылки. И затем я также указал ссылку на элемент контента, включая модуль, как вы описали. Если js был включен, ссылка не была выполнена, и было открыто диалоговое окно. Если js был отключен, ссылка была выполнена, и содержимое диалога было отображено как содержимое. И контент был в одном месте, поэтому я не поддерживал две отдельные копии содержимого.

ответил Arlen 18 J0000006Europe/Moscow 2015, 17:21:36
1

Вот простое и эффективное решение. Я пробовал использовать jdoc: include, но это не сработало.

    $ document = JFactory :: getDocument ();
    $ renderer = $ document-> loadRenderer ('modules');
    $ position = 'custompositionname';
    $ options = array ('style' => 'raw');
    echo $ renderer-> render ($ position, $ options, null);
ответил user2589739 1 J0000006Europe/Moscow 2015, 11:48:51
0

Мне приходилось делать то же самое на своем сайте для демонстрационных расширений и кнопок загрузки, но, честно говоря, я считаю, что держать вещи в отдельности в лучшем смысле лучше, так как управлять ими проще. Мало того, что я уверен, что нет способа добиться того, что вы ищете, используя реальный CMS, только hardcode (скажем больше).

ответил Lodder 4 22014vEurope/Moscow11bEurope/MoscowTue, 04 Nov 2014 02:25:19 +0300 2014, 02:25:19
0

Самый чистый способ сделать это - использовать: http://extensions.joomla.org/extension/m2c-module-to-component

ответил Lala 24 J000000Sunday16 2016, 08:19:05
0

Попробуйте это

jimport ( 'joomla.application.module.helper');
    //Здесь вы хотите загрузить свою позицию модуля
    $ modules = JModuleHelper :: getModules ('header');
    foreach ($ modules как $ module)
    {
    echo JModuleHelper :: renderModule ($ module);
    }

исх: https://stackoverflow.com/вопросы /12225538 /как-мы-включать-а-JOOMLA-модуль-в-компонентной ракурса-в-JOOMLA

ответил Sh4msi 28 AM00000010000002231 2016, 01:29:22

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132