Modul in Komponente laden

  • Hi,


    in Joomla 3.x konnte ich mit folgenden Aufruf ein Modul in der View einer Komponente laden und somit im Frontend dauerhaft anzeigen:


    PHP
    <?php echo JHtml::_('content.prepare', '{loadposition right}'); ?>


    Dies scheint in Joomla 4 nicht mehr zu funktionieren, jedenfalls nicht bei mir. Wie müsste der korrekte Aufruf in Joomla 4 lauten?


    MfG neoman

  • Ist das loadmodule-Plugin aktiviert?


    Joomla 4 ist leider voll mit Rückwärtsinkompatibilitäten. In der Theorie sollte deine Zeile auch mit JHtml noch funktionieren (wird im Hintergrund "gename-spaced"). Falls sie mit

    PHP
    <?php echo Joomla\CMS\HTML\HTMLHelper::_('content.prepare', '{loadposition right}'); ?>

    auch nicht funktioniert ist das entweder ein Bug (und gehört eingereicht) oder eine weitere "Professoren-Änderung für Nerds", damit Entwicklungs-Programmierer [von mir zensiert].

  • Ist die Position "right" vielleicht schon reserviert durch dein Template?

    Das sollte eigentlich egal sein (soweit ich das kenne). Man kann das Modul trotzdem doppelt abholen. Wichtig ist natürlich, dass Position "right" auf dieser spezifischen Seite generell auch geladen wird, also die Zuweisungen im Modul entsprechend gesetzt sind. Kann man ja testen, indem man im Modul mal unter Zuweisung auf "Auf allen Seiten" einstellt und unter "Module Style" mal "html5" plus "Titel anzeigen:JA". Dann sollte im Normalfall wenigstens die Überschrift erscheinen.

    Plus einfach mal ein joomla-eigenes Modul auf Position right setzen. z.B. so ein "Custom"-Modul mit bisschen Text im Editor.


    Aaaaaber hast natürlich recht. Ich arbeite dann auch lieber mit Phantasie-Positionen...

  • Bei mir funktioniert der Codeschnipsel von Re:Later aus #4 einwandfrei, auch in J4. Um noch flexibler zu sein, könntest du auch den ModuleHelper verwenden. Dort lassen sich Module nach Position, ID oder Name laden, z.B. so:


    PHP
    $modules = ModuleHelper::getModules('sidebar-right');
    
    foreach ($modules as $module)
    {
        echo ModuleHelper::renderModule($module);
    }
  • Ist das loadmodule-Plugin aktiviert?


    Joomla 4 ist leider voll mit Rückwärtsinkompatibilitäten. In der Theorie sollte deine Zeile auch mit JHtml noch funktionieren (wird im Hintergrund "gename-spaced"). Falls sie mit

    PHP
    <?php echo Joomla\CMS\HTML\HTMLHelper::_('content.prepare', '{loadposition right}'); ?>

    auch nicht funktioniert ist das entweder ein Bug (und gehört eingereicht) oder eine weitere "Professoren-Änderung für Nerds", damit Entwicklungs-Programmierer [von mir zensiert].


    Das funktioniert, danke. Eine Frage noch: Wie kann ich noch den Modultitel anzeigen lassen, der wird nämlich nicht mit angezeight. Und ja, er ist im Modul aktiviert :-)


    Die Methode die @Harmageddon gepostet hat, wirft leider einen Fehler...

  • Wie kann ich noch den Modultitel anzeigen lassen, der wird nämlich nicht mit angezeight. Und ja, er ist im Modul aktiviert

    Nicht alle Modulstile zeigen die Überschrift an, obwohl aktiviert.


    Probier mal den Modul-Stil "html5". Ganz sicher bin ich im Moment aber nicht, ob das mit der Zeile auch funktioniert.


    Ansonsten musst wohl Harmageddon s Variante verwenden. Da kann man einen Stil "forcieren".


    Oder, weitere Möglichkeit, in einem Template-Override des Moduls ein

    Code
    if ((bool) $module->showtitle === true)
    {
    echo $module->title;
    }
  • Der Fehler wird so was in der Art sein: Class ModuleHelper not found.


    Bei der Methode von H muss man zusätzlich DIREKT hinter die joomla-typische Zeile

    Code
    defined('_JEXEC') or die;

    eine weitere Zeile

    Code
    use Joomla\CMS\Helper\ModuleHelper;

    in die Datei schreiben


    oder eben zwei mal

    Code
    Joomla\CMS\Helper\ModuleHelper::

    anstatt nur

    Code
    ModuleHelper::

    im Code-Block schreiben.

  • Die Codezeilen von Harmageddon funktionieren nun. Jedoch wird mir nicht das Modul selbst ausgegeben sondern ein Array mit den Werten des Moduls.


    Was mache ich falsch?


    Thema ist erledigt, danke an alle für die Hilfe. Klappt nun alles :-)

    Einmal editiert, zuletzt von Indigo66 () aus folgendem Grund: Ein Beitrag von neoman666 mit diesem Beitrag zusammengefügt.