Man braucht nicht unbedingt eine zusätzliche Erweiterung, um in einen Joomla-Beitrag eigenen, dynamischen PHP-Code auszugeben, vielleicht aus der Datenbank. Das geht auch mit Joomla-Hausmitteln. Mit Modul-Overrides plus Joomla-eigenem Plugin loadmodule. Der Code kann Joomla-Klassen und -Methoden ohne weiteres Zutun nutzen und der Beitrags-Editor bleibt "clean"; ohne unübersichtliche Code-Schnipsel darin.

Schritt 1: Der eigene Modul-Override

Dateien und/oder Ordner neu anlegen und/oder bearbeiten und/oder Overrides per Klick erzeugen (von mir nicht empfohlen) kann man auch im Joomla-Backend im Template-Editor. J!3: Menü Erweiterungen > Templates > Templates. J!4: Menü System > Blöd rumsuchen > Site Templates. In beiden danach auf den verlinkten Templatetitel klicken. Im Template-Editor kann man jedoch nur auf Dateien und Verzeichnisse innerhalb des jeweiligen Template-Ordners und ggf. dem zugehörigen /media/-Ordner (Joomla 4) zugreifen! Nicht alle Dateitypen werden angezeigt.

Grundlegend kann man nahezu jedes Joomla-Modul dafür missbrauchen. Ich verwende gerne das mod_custom (im Backend "Eigenes Modul" genannt) oder mein eigenes mod_custom_blankghsvs, weil das noch etwas schmaler ist. Letztlich aber egal, da wir den Editor bzw. Texteingabebereich sowieso nicht brauchen.

  • Ich lege in meinem Template im Ordner html/ einen neuen Ordner mod_custom/ an, falls er nicht schon existiert.
  • Darin erstelle ich eine neue Datei. Die Benennung ist frei. Leerzeichen und Unterstriche sollte man sich allerdings sparen, da Letztere bei Modulen eine besondere Funktion haben (Sub-Layouts des Moduls). Unter derzeit aktueller Joomla 4.2.5 habe ich fluchenderweise entdeckt, dass sogar Bindestriche unter Umständen erhebliche Probleme machen können.
  • Beispiel-Name meines eigenen Modul-Overrides in Camel-Case-Schreibweise: meineCodeAusgabe.php. Auf diese Art kann man beliebig viele, selbst benannte Overrides anlegen.
  • In der Override-Datei setze ich meinen Joomla- beziehungsweise PHP-Code ein, wasimmer auch. Auch reines HTML ist natürlich möglich, JavaScript-Ladezeilen mit JHtml (bzw. HTMLHelper, Web Asset Manager unter Joomla 4) usw. usf. und noch mehr.
    Nur Zeile 2 sollte man in Joomla immer drinnen haben, damit der Code bzw. die Override-Datei nicht über plumpe, direkte Browseraufrufe ausführbar ist:
<?php
defined('_JEXEC') or die;

$aktuellerSeitenPfad = JUri::getInstance()->getPath();
?>
<p>
Der aktuelle Pfad ohne Domain und Query-String dieser Seite in der Adresszeile lautet:
<b><?php echo $aktuellerSeitenPfad; ?></b>.
</p>

Schritt 2: Modul einrichten

  • Ich lege ein neues Modul vom Typ "Eigenes Modul" (mod_custom) an.
  • Unter Menü-Zuweisung wähle ich "Auf allen Seiten", zumindest für erste Tests. Wenn das Modul später nur auf einer Seite seinen Dienst tuen soll, kann man dann noch einschränken. Das entlastet Joomla etwas bei der Arbeit (Stichwort: Performance).
  • Position brauche ich keine wählen. Natürlich kann ich die Ausgabe meines Codes auch an einer stinknormalen Modulposition stattfinden lassen. Dann lässt man Schritt 3 halt aus und wählt eine.
  • Den Editor lassen wir leer. Wird eh nicht ausgegeben.
  • Unter Modulstil wähle ich System > none, falls ich kein sonstiges HTML-Kokolores um meine Ausgabe herum haben möchte. Selbstverständlich könnte man aber auch einen anderen Stil wählen, vielleicht "html5", wenn man z.B. die Überschrift des Moduls durch Joomla-Zauberei automatisch ausgeben lassen möchte oder ein HTML-Gerüst mit Modulklasse um seine Ausgabe herum haben will.
  • Unter Layout wähle ich mein eigenes, neues Override aus, also das Layout "meineCodeAusgabe".

Schritt 3: Modul im Beitrag an beliebiger Stelle einsetzen

Es gibt auch andere Ecken in Joomla, wo man so loadmodule-Tags einsetzen kann, z.B. in Kategorie-Beschreibungen, soweit ich mich richtig erinnere(?)

  • Ich prüfe unter Erweiterungen > Plugins, ob das Joomla-Plugin "Schaltfläche - Modul" aktiviert ist. Standard isamal JA.
  • Öffne den Beitrag/Artikel.
  • Gehe an die Wunschstelle im Editor und mache einen neuen Absatz.
  • Füge nun mit dem Module-Button des Editors das Modul ein. Dafür klickt man auf den Titel des Moduls in der Übersicht des PopUps. Anschließend sehe ich im Editor so was in der Art:
{ loadmoduleid 204}

Beachten beim Kopieren: Im Code wurde an öffnende, geschweifte Klammer(n) { von Joomla-Plugin-Shortcodes ein Leerzeichen angehängt. Selbst entfernen!

Schritt 4: Richtige Ausgabe im Frontend prüfen

Nach dem Speichern des Beitrags wird mir im Frontend mein Code ausgegeben. Achtung, jetzt kommt er:

Der aktuelle Pfad ohne Domain und Query-String dieser Seite in der Adresszeile lautet: /programmierer-schnipsel/joomla/315-joomla-modul-override-fuer-einbinden-eigener-codes.

Vielleicht auch interessant zum Thema?

Joomla-Modulstil zum Einbinden eigener PHP-Dateien nutzen