it-swarm.com.de

So zeigen Sie das Modul im Komponentenbereich an

Ich muss häufig einen Menüeintrag erstellen, der ein Modul im Komponentenbereich ohne weiteren Inhalt anzeigt.

Die Lösung 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?

12
johanpw

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.

9
FFrewin

m die hier gegebenen Antworten zu verbessern:

Um eine Modulposition in Ihre Komponentenansicht 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 bei Bedarf mehr HTML enthält. 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.)

8
Dennis Heiden

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); 
2
user2589739

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 ganz oben stand, würde ich meine Antwort geben, und das ist, was ich tue.

0
Mythic

Versuche dies

jimport('joomla.application.module.helper');
    // this is where you want to load your module position
    $modules = JModuleHelper::getModules('header'); 
    foreach($modules as $module)
    {
    echo JModuleHelper::renderModule($module);
    }

ref: https://stackoverflow.com/questions/12225538/how-we-include-a-joomla-module-in-a-component-view-in-joomla

0
Sh4msi
0
Lala

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

0
Lodder

Zunächst erstellen Sie gemäß Ihrer Frage bereits 20 Module und 20 Menüelemente. Das einzige, was Sie noch 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.

0
Arlen