Módulo de exibição em várias posições

8

É possível exibir um módulo em várias posições, de preferência de forma nativa ou através de um ramal de terceiros?

Eu sei que existem soluções alternativas ...

  • clone o módulo e altere a posição, no entanto, isso é cansativo se o módulo contiver, digamos, HTML personalizado e é provável que isso mude com frequência.
  • use a loadsintaxe para soltar o módulo onde quiser, mas ainda resulta na criação de módulos simplesmente para conter outros módulos

mas ambos criam um trabalho de manutenção extra que prefiro renunciar.

codinghands
fonte

Respostas:

1

Você pode usar módulos não numerados em qualquer lugar.

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

Diferentemente da versão loadposition que está no núcleo, ela também pode ser usada em um módulo e não apenas em um artigo. Assim, você pode criar um segundo módulo html personalizado e chamar a primeira posição. Isso basicamente forneceria uma cópia da posição, mas as configurações alteradas no primeiro módulo também serão aplicadas no segundo "clone".

Jordan Ramstad
fonte
Felicidades por dar uma olhada no Jordão, mas você pode fazer isso sem o Modules Anywhere - consulte docs.joomla.org/How_do_you_put_a_module_inside_an_article%3F (o módulo HTML personalizado aceita a loadsintaxe se você definir Preparar conteúdo como 'Sim'), ficando assim sob o meu Segunda solução alternativa.
Codigohands
hmm, boa nota, minha experiência foi que isso não funcionou, poderia ter sido um bug na versão específica em que eu tentei. Não tentei desde então.
Jordan Ramstad
O problema com os módulos em qualquer lugar é que ele não faz cache (veja nossa experiência aqui: itoctopus.com/… ). Isso significa que para módulos pesados ​​sempre será recriado novamente e não apenas capturado do cache (mesmo que exista um arquivo de cache para esse arquivo).
itoctopus 01/09/16
1

Sugiro a criação de um plugin simples e use algo parecido com isto para publicar o módulo em várias posições (usando um loop):

$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

(Não testado)

Vou ver se consigo montar algo mais completo ainda hoje.

johanpw
fonte
1

Em um nível simples, você pode tentar o seguinte:

Se este for um módulo único e você já definiu onde deseja exibi-lo, crie uma posição especial no seu modelo e faça 2 ou quantas chamadas forem necessárias nos locais desejados no modelo. Ele carregará os módulos dessa posição onde quer que você a chame.

Se houver mais módulos e para mais posições que você deseja aplicar, a abordagem acima ainda poderá ser boa, a menos que você precise de mais controle ou aparências complexas dos módulos, algo que possa exigir a criação "mais inteligente" de posições dos módulos e solicite os módulos.

FFrewin
fonte