So zeigen Sie das Modul im Komponentenbereich an

12

Ich muss oft ein Menüelement erstellen, das ein Modul im Komponentenbereich ohne anderen Inhalt anzeigt.

Die Art und Weise, wie ich das löse, besteht darin, einen neuen Artikel zu erstellen und nur {loadposition mymodule}in den Artikelinhalt einzufügen. Dann erstelle ich einen Einzelartikel-Menüpunkt für den Artikel. Dies ist in Ordnung für ein einzelnes Modul, aber was ist, wenn ich 20 verschiedene Module habe, die ich auf diese Weise anzeigen möchte? Ich müsste 20 Module, 20 (fast leere) Artikel und 20 Menüpunkte erstellen.

Gibt es andere Möglichkeiten, ein Modul (und nichts anderes) im Komponentenbereich einer Vorlage anzuzeigen? Tricks? Hacks? Ideen?

johanpw
quelle
Vielleicht finden Sie es nützlich in Joomla! 3, um die Editor-Schaltfläche zu verwenden, die ein Modul für Sie erstellt. Das würde es schnell und weniger fehleranfällig machen.
Eoin

Antworten:

9

Ich habe dazu eine Modulposition an derselben Stelle wie die Komponente erstellt und überprüft, ob an dieser Position ein Modul vorhanden ist, und es dann angezeigt. Andernfalls wählen Sie die Komponente aus:

Codebeispiel:

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

Wenn ich dann ein Modul anstelle einer Komponente auf einer Seite anzeigen möchte, erstelle ich das Modul und ordne es diesem Menüpunkt zu. Damit bin ich fertig.

Eine kleine Randnotiz:

Zur Vereinfachung und besseren Übersichtlichkeit schlage ich vor, diese Modulposition mit "Inhaltsmodul", "Hauptmodul" oder "Kompomodul" zu bezeichnen. Alles, was daran erinnert, dass sich dort ein Modul befindet, ersetzt den Komponentenausgang.

FFrewin
quelle
1
Dies ist die ideale Lösung. Viele kommerzielle Vorlagen haben einen Parameterumschalter in ihrer admin-seitigen Konfiguration. Wenn Sie jedoch keine dieser kommerziellen Vorlagen verwenden, ist dies die effizienteste und eleganteste Antwort.
Toni Marie
1
Ich liebe diese Idee, sie ist einfach und effektiv und lässt sich leicht in vorhandene Vorlagen implementieren. Ausgezeichnet.
Johanpw
8

Um die gegebenen Antworten hier zu verbessern:

Um eine Modulposition in Ihre Bauteileansicht aufzunehmen und dort Module zu laden, müssen Sie nur noch hinzufügen

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

zur Ansichtsdatei.

Die zweite Zeichenfolge mit dem Short-Tag für die Ladeposition kann durch eine Variable ersetzt werden, die mehr HTML enthält, wenn Sie dies benötigen. Sie müssen diese Zeile nicht für jede neue Modulposition schreiben:

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


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

(Ich weiß, dass dies keine direkte Antwort auf die Frage des Autors ist.)

Dennis Heiden
quelle
2

Hier ist eine einfache und funktionierende Lösung. Ich habe es mit jdoc versucht: include hat aber nicht funktioniert.

    $ document = JFactory :: getDocument ();
    $ renderer = $ document-> loadRenderer ('modules');
    $ position = 'custompositionname';
    $ options = array ('style' => 'raw');
    echo $ renderer-> render ($ position, $ options, null); 
user2589739
quelle
Bitte erläutern Sie weiter, wie der obige Code verwendet werden kann, um das gewünschte Ergebnis zu erzielen, wie in der Frage beschrieben.
FFrewin
Erstellen Sie im Hintergrund ein neues Modul, setzen Sie dessen Position (sagen Sie custompositionname) und veröffentlichen Sie es. Fügen Sie im Frontend den obigen Code hinzu und es wird ohne Probleme funktionieren.
user2589739
0

Ich musste dasselbe auf meiner Website für Erweiterungsdemos und Download-Buttons tun, aber aus Ehrlichkeit halte ich es in gewisser Hinsicht für besser, die Dinge getrennt zu halten, da es einfacher zu verwalten ist. Nicht nur, dass ich mir ziemlich sicher bin, dass es keine Möglichkeit gibt, über das eigentliche CMS das zu erreichen, wonach Sie suchen, sondern nur den Hardcode (sagen Sie nicht mehr).

Lodder
quelle
0

Zunächst erstellen Sie gemäß Ihrer Frage bereits 20 Module und 20 Menüelemente. Das einzige, was Sie tun müssen, ist, ein einzeiliges Inhaltselement für jedes Modul zu erstellen. Wenn das wirklich so lästig ist, dann mach mit @ FFrewins Idee weiter. Es ist ein bisschen abgedreht, aber es wird funktionieren.

Persönlich würde ich mit den Inhaltselementen gehen. Tatsächlich habe ich das getan, als ich ein System mit Popup-Dialogfeldern erstellte, von denen ich wollte, dass es auch ohne aktiviertes js funktioniert. Ich habe den Dialoginhalt in ein custom_html-Modul gestellt, das Modul so manipuliert, dass es angezeigt und positioniert wird, wenn auf einen Link geklickt wird. Und dann habe ich den Link auch auf ein Inhaltselement verwiesen, einschließlich des von Ihnen beschriebenen Moduls. Wenn js aktiviert war, wurde dem Link nicht gefolgt und das Dialogfeld wurde angezeigt. Wenn js deaktiviert war, wurde dem Link gefolgt und der Inhalt des Dialogfelds als Inhalt angezeigt. Und der Inhalt befand sich an einem Ort, sodass ich nicht zwei separate Kopien des Inhalts verwaltete.

Arlen
quelle
0

Erstellen Sie einen leeren Artikel.

Erstellen Sie einen Menüpunkt, indem Sie den Artikel auswählen, den Sie erstellt haben.

Modul in unbenutzter Position erstellen, Menüzuordnung nur auf ausgewählten Seiten festlegen, nur Menüpunkt von oben auswählen.

Da dies oben abgebildet war, würde ich meine Antwort geben, und das ist, was ich tue.

Mythisch
quelle