Як відобразити модуль в області компонентів


13

Мені часто потрібно створити пункт меню, який відображає модуль в області компонентів, без іншого вмісту.

Я вирішую це - створити нову статтю та додати лише {loadposition mymodule}вміст статті. Потім я створюю пункт меню "Єдина стаття" для статті. Це добре для одного модуля, але що робити, якщо у мене є 20 різних модулів, які я хочу відображати таким чином? Мені довелося б створити 20 модулів, 20 (майже порожніх) статей та 20 пунктів меню.

Чи є інші способи відображення модуля (і нічого іншого) в області компонентів шаблону? Витівки? Хаки? Ідеї?


Ви можете знайти його корисним в Joomla! 3 використовувати кнопку редактора, яка створює модуль для вас. Це дозволить зробити це швидше і менш схильним до помилок.
Eoin

Відповіді:


10

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

Зразок коду:

<main id="content" role="main" class="main">
 <?php 
 if ($this->countModules('myposition')) 
   { ?>
     <jdoc:include type="modules" name="myposition" style="xhtml" />
 <?php } 
  else 
  { ?>
     <jdoc:include type="component" /> 
  <?php } ?>
</main>

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

Невелика бічна примітка:

Для зручності та кращої ясності пропоную назвати цю позицію модуля чимось на кшталт "контент-модуль", "основний модуль" чи "коммодул". Все, що буде нагадувати, що будь-який модуль, розміщений там, замінить вихідний компонент.


1
Це ідеальне рішення. У багатьох комерційних шаблонах є параметр перемикання параметрів у конфігурації на стороні адміністратора, але якщо ви не використовуєте один із цих комерційних шаблонів ... це найефективніший та елегантний варіант відповіді.
Тоні Марі

1
Мені подобається ця ідея, вона проста і ефективна, і її легко реалізувати у існуючих шаблонах. Відмінно.
johanpw

9

Щоб покращити наведені відповіді тут:

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

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

у файл перегляду.

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

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


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

(Я знаю, що це не пряма відповідь на запитання авторів.)


2

Ось просте і робоче рішення. Я спробував з jdoc: include, але це не спрацювало.

    $ document = JFactory :: getDocument ();
    $ renderer = $ document-> loadRenderer ('модулі');
    $ position = 'ім'я користувача ";
    $ options = array ('style' => 'raw');
    echo $ renderer-> render ($ position, $ options, null); 

Будь ласка, поясніть далі, як вищевказаний код можна використовувати для досягнення бажаного результату, як описано в питанні.
FFrewin

У резервній копії створіть новий модуль та встановіть його положення (скажімо, ім'я користувача) та опублікуйте його. На фронталі додайте вищевказаний код, і він буде працювати без проблем.
користувач2589739

0

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


0

По-перше, відповідно до вашого запитання ви вже створюєте 20 модулів та 20 пунктів меню, тож насправді єдине зайве, що вам потрібно зробити, - це створити однорядковий елемент вмісту для кожного модуля. Якщо це насправді так важко, тоді продовжуйте ідею @ FFrewin. Це трохи хакі, але це спрацює.

Особисто я хотів би зі змістом. Насправді я це зробив, коли будував систему із спливаючими діалоговими вікнами, що також хотів працювати без включення js. Я помістив вміст діалогу в модуль custom_html, сфабрикував модуль для розкриття та розміщення при натисканні на посилання. А потім я також вказав на посилання на елемент вмісту, включаючи модуль, як ви описали. Якщо js увімкнено, посилання не було дотримано, і було відкрито діалогове вікно. Якщо js було відключено, переходило посилання, а вміст діалогового вікна відображався як вміст. І вміст знаходився в одному місці, тому я не підтримував двох окремих копій вмісту.




0

Створіть пусту статтю.

Створіть пункт меню, вибравши створену вами статтю.

Створіть модуль у невикористаному положенні, встановіть призначення меню лише на вибраних сторінках, виберіть лише пункт меню зверху.

Оскільки це було вгорі, я вважав, що я би дав свою відповідь, це те, що я роблю.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.