Показать модуль в нескольких положениях


8

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

Я знаю, что есть обходные пути ...

  • клонируйте модуль и измените положение, однако это утомительно, если модуль содержит, скажем, пользовательский HTML, и это может часто меняться.
  • используйте loadсинтаксис для удаления модуля куда угодно, но при этом модули создаются просто для хранения других модулей

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

Ответы:


1

Вы можете использовать модули без номеров везде.

http://www.nonumber.nl/extensions/modulesanywhere/userguide

В отличие от версии loadposition, которая находится в ядре, она может использоваться и в модуле, а не просто в статье. Таким образом, вы можете создать второй пользовательский модуль HTML, а затем вызвать первую позицию. Это в основном даст вам копию позиции, но все настройки, которые вы изменяете в первом модуле, также будут применяться во втором «клоне».


Спасибо за то, что взглянули на @Jordan, но вы можете сделать это без Modules Anywhere - см. Docs.joomla.org/How_do_you_put_a_module_inside_an_article%3F (пользовательский HTML-модуль принимает loadсинтаксис, если для параметра Prepare Content установлено значение 'Yes'), поэтому подпадает под мой 2-й обходной путь.
codinghands

хм, хорошо, мой опыт показывает, что это не сработало, могло быть ошибкой в ​​конкретной версии, в которой я его пробовал. С тех пор не пробовал.
Джордан Рамстад

Проблема с модулями в любом месте заключается в том, что они не выполняют никакого кэширования (см. Наш опыт работы с ним здесь: itoctopus.com/… ). Это означает, что для тяжелых модулей всегда будет заново создаваться, а не просто извлекать из кэша (даже если существует файл кэша для этого файла).
итопоп

1

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

$document   = &JFactory::getDocument();
$renderer   = $document->loadRenderer('modules');
$options    = array('style' => 'xhtml');
for ($x=0; $x<=5; $x++) {
     $position   = 'myPosition' . $x;
     echo $renderer->render($position, $options, null);
}
// Repeat for each module position, changing only $position

(Не проверено)

Я посмотрю, смогу ли я собрать что-то более полное позже сегодня.


1

На простом уровне вы можете попробовать это:

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

Если есть больше модулей и для большего количества позиций вы хотите применить это, вышеупомянутый подход может все же подойти, если только вам не нужно больше контроля или сложный внешний вид модулей, что может потребовать «более умного» создания позиций модулей и вызовов для модули.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.