Come visualizzare il modulo nell'area dei componenti


13

Ho spesso bisogno di creare una voce di menu che visualizzi un modulo nell'area dei componenti, senza altri contenuti.

Il modo in cui lo risolvo è creare un nuovo articolo e aggiungerlo solo {loadposition mymodule}nel contenuto dell'articolo. Quindi creo una voce di menu Articolo singolo per l'articolo. Questo va bene per un singolo modulo, ma cosa succede se ho 20 moduli diversi che voglio visualizzare in questo modo? Dovrei creare 20 moduli, 20 articoli (quasi vuoti) e 20 voci di menu.

Esistono altri modi per visualizzare un modulo (e nient'altro) nell'area dei componenti di un modello? Trucchi? Trucchi? Idee?


Potresti trovarlo utile in Joomla! 3 per utilizzare il pulsante dell'editor che crea un modulo per te. Ciò renderebbe rapido e meno soggetto a errori.
Eoin

Risposte:


10

Ho fatto questo creando una posizione del modulo nella stessa posizione con il componente e controllando se un modulo è presente in questa posizione, quindi visualizzalo, altrimenti vai al componente:

Esempio di codice:

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

Quindi, quando voglio visualizzare un modulo anziché un componente in una pagina, creo il modulo assegnandolo a quella voce di menu e ho finito.

Una piccola nota a margine:

Per comodità e maggiore chiarezza, suggerisco di nominare questa posizione del modulo come "content-module", "main-module" o "compomodule". Tutto ciò che ricorderà che qualsiasi modulo posizionato lì sostituirà l'uscita del componente.


1
Questa è la soluzione ideale Molti modelli commerciali hanno un parametro attivo nella loro configurazione lato amministratore, ma se non stai usando uno di quei modelli commerciali ... questa è la risposta più efficiente ed elegante.
Toni Marie,

1
Adoro questa idea, è semplice ed efficace e facile da implementare nei modelli esistenti. Eccellente.
johanpw,

9

Per migliorare le risposte fornite qui:

Per includere una posizione del modulo nella vista dei componenti e caricare i moduli lì, devi solo aggiungere

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

al file di visualizzazione.

La seconda stringa con il tag breve della posizione di caricamento può essere sostituita con una var che contiene più HTML se ne hai bisogno. Non è necessario scrivere quella riga per ogni nuova posizione del modulo:

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


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

(So ​​che questa non è una risposta diretta alla domanda degli autori.)


2

Ecco una soluzione semplice e funzionante. Ho provato con jdoc: include ma non ha funzionato.

    $ document = JFactory :: getDocument ();
    $ renderer = $ document-> loadRenderer ('moduli');
    $ position = 'custompositionname';
    $ options = array ('style' => 'raw');
    echo $ renderer-> render (posizione $, $ opzioni, null); 

Spiegare ulteriormente come è possibile utilizzare il codice sopra riportato per ottenere il risultato desiderato come descritto nella domanda.
FFrewin

Nella parte posteriore, crea un nuovo modulo e imposta la sua posizione (ad esempio custompositionname) e pubblicalo. Nel frontend, aggiungi il codice sopra e funzionerà senza problemi.
user2589739

0

Ho dovuto fare lo stesso sul mio sito per le demo delle estensioni e i pulsanti di download, tuttavia, per onestà, penso che mantenere le cose separate sia in qualche modo migliore in quanto è più facile da gestire. Non solo sono abbastanza sicuro che non ci sia modo di ottenere ciò che stai cercando tramite il vero CMS, ma solo un hardcode (non aggiungere altro).


0

Prima di tutto, in base alla tua domanda stai già creando 20 moduli e 20 voci di menu, quindi davvero l'unica cosa extra che devi fare è creare un elemento di contenuto a una riga per ogni modulo. Se è davvero così oneroso, vai avanti con l'idea di @ FFrewin. È un po 'confuso, ma funzionerà.

Personalmente, andrei con gli elementi di contenuto. In effetti l'ho fatto quando stavo costruendo un sistema con finestre di dialogo popup che volevo anche avere lavoro senza js abilitato. Ho inserito il contenuto della finestra di dialogo in un modulo custom_html, ho truccato il modulo per essere rivelato e posizionato quando si è fatto clic su un collegamento. E poi ho anche puntato il link su un elemento di contenuto, incluso il modulo come hai descritto. Se js è stato abilitato, il collegamento non è stato seguito e la finestra di dialogo è stata rivelata. Se js era disabilitato, il collegamento veniva seguito e il contenuto della finestra di dialogo veniva visualizzato come contenuto. E il contenuto era in un posto, quindi non stavo mantenendo due copie separate del contenuto.




0

Crea un articolo vuoto.

Crea una voce di menu selezionando l'articolo che hai creato.

Crea modulo in posizione inutilizzata, imposta l'assegnazione del menu solo sulle pagine selezionate, seleziona solo la voce di menu dall'alto.

Dato che questo era in cima alla figura, avrei fornito la mia risposta, questo è quello che faccio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.