Como exibir o módulo na área de componentes


13

Costumo criar um item de menu que exiba um módulo na área de componentes, sem nenhum outro conteúdo.

A maneira como resolvo isso é criar um novo artigo e adicionar apenas {loadposition mymodule}o conteúdo do artigo. Em seguida, crio um item de menu Artigo único para o artigo. Isso é bom para um único módulo, mas e se eu tiver 20 módulos diferentes que quero exibir dessa maneira? Eu teria que criar 20 módulos, 20 artigos (quase vazios) e 20 itens de menu.

Existem outras maneiras de exibir um módulo (e nada mais) na área de componentes de um modelo? Truques? Hacks? Ideias?


Você pode achar útil no Joomla! 3 para usar o botão do editor que cria um módulo para você. Isso tornaria rápido e menos propenso a erros.
Eoin

Respostas:


10

Eu fiz isso criando uma posição do módulo no mesmo local que o componente e verificando se um módulo está presente nessa posição e exibi-lo; caso contrário, vá para o componente:

Exemplo de código:

<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>

Então, quando quero exibir um módulo em vez de componente em uma página, crio o módulo para atribuí-lo a esse item de menu e pronto.

Uma pequena nota lateral:

Para maior comodidade e melhor clareza, sugiro nomear essa posição do módulo como "módulo de conteúdo", "módulo principal" ou "compomodule". Qualquer coisa que lembrará que qualquer módulo posicionado ali substituirá a saída do componente.


1
Esta é a solução ideal. Muitos modelos comerciais têm um parâmetro para alternar na configuração do lado do administrador, mas se você não estiver usando um desses modelos comerciais ... essa é a resposta mais eficiente e elegante.
Toni Marie #

1
Adoro essa idéia, é simples, eficaz e fácil de implementar nos modelos existentes. Excelente.
johanpw

9

Para aprimorar as respostas fornecidas aqui:

Para incluir uma posição de módulo na visualização do componente e carregar os módulos, basta adicionar

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

para o arquivo de visualização.

A segunda string com a tag abreviada de posição de carregamento pode ser substituída por uma var que contém mais html, se você precisar. Você não precisa escrever essa linha para cada nova posição do módulo:

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


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

(Eu sei que essa não é uma resposta direta à pergunta dos autores.)


2

Aqui está uma solução simples e funcional. Eu tentei com o jdoc: include, mas não funcionou.

    $ document = JFactory :: getDocument ();
    $ renderer = $ document-> loadRenderer ('módulos');
    $ position = 'custompositionname';
    $ opções = matriz ('style' => 'raw');
    echo $ renderer-> render ($ position, $ options, null); 

Explique mais detalhadamente como o código acima pode ser usado para alcançar o resultado desejado, conforme descrito na pergunta.
FFrewin

No backup, crie um novo módulo e defina sua posição (por exemplo, nome da posição personalizada) e publique-o. No frontend, adicione o código acima e ele funcionará sem problemas.
precisa saber é o seguinte

0

Eu tive que fazer o mesmo no meu site para demos de extensão e botões de download, no entanto, com toda a honestidade, acho que manter as coisas separadas é, de certa forma, melhor, pois é mais fácil de gerenciar. Não apenas eu tenho certeza que não há como alcançar o que você está procurando através do CMS real, apenas código rígido (não diga mais nada).


0

Primeiro, de acordo com a sua pergunta, você já está criando 20 módulos e 20 itens de menu; portanto, a única coisa extra a ser feita é criar um item de conteúdo de uma linha para cada módulo. Se isso é realmente tão oneroso, vá em frente com a ideia de @ FFrewin. É um pouco hacky, mas vai funcionar.

Pessoalmente, eu iria com os itens de conteúdo. Na verdade, eu fiz isso quando estava construindo um sistema com caixas de diálogo pop-up que também queria que o trabalho estivesse sem o js ativado. Coloquei o conteúdo da caixa de diálogo em um módulo custom_html, manipulei o módulo a ser revelado e posicionado quando um link foi clicado. E também apontei o link para um item de conteúdo, incluindo o módulo como você descreveu. Se js estiver ativado, o link não será seguido e a caixa de diálogo será revelada. Se js foi desativado, o link foi seguido e o conteúdo da caixa de diálogo foi exibido como conteúdo. E o conteúdo estava em um só lugar, então eu não estava mantendo duas cópias separadas do conteúdo.




0

Crie um artigo em branco.

Crie um item de menu selecionando o artigo que você criou.

Crie o módulo na posição não utilizada, defina a atribuição do menu apenas nas páginas selecionadas, selecione apenas o item de menu acima.

Uma vez que este estava no topo, eu daria a minha resposta, é isso que eu faço.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.