Gelegentlich möchte man z.B. in einen Joomla-Beitrag eigenen, dynamischen PHP-Code einfügen. Man kann 3rd-Erweiterungen verwenden (und sich einarbeiten), und / oder muss Codes erst unschön umschnitzen, damit sie die Methoden des Joomla-Frameworks nutzen können. Mittels eigenem Modulstil und dem Joomla-Plugin loadmodule sind solche Hacks unnötig. Die Einrichtung ist nicht schwer.

Nötige Verzeichnisse, Dateien

Genereller Tipp: Alle Ordner- und Dateinamen in Kleinschrift, ohne Umlaute, Sonderzeichen, Leerzeichen.

Legen Sie im Ordner /media/ Ihrer Joomla-Installation einen Unterordner an. Benennen Sie ihn beliebig. Ich verwende php-includes_ghsvs/.

In diesen Ordner kommen die eigenen PHP-Dateien. Verwenden Sie für Benennung nur Kleinschrift mit a-z, 0-9, Bindestriche. Meine heißt mein-erster-test.php.

Beispieldatei /media/php-includes_ghsvs/mein-erster-test.php

<?php
defined('_JEXEC') or die;
echo '<p>Ich bin mein-erster-test.php</p>';

Vergessen Sie niemals die einleitende Zeile defined('_JEXEC') or die; in Ihren eigenen Dateien, damit unsichere Aufrufe von außerhalb des Joomla-Frameworks, bspw. per Browser-Adresszeile, unmöglich sind. Danach ist jedweder PHP-Code möglich und auch die direkte Verwendung der hilfreichen Joomla-Klassen und -Methoden ohne unsaubere und oft nicht allzu lange Joomlaupdate-sichere Zusatzzeilen.

Modulstil anlegen

Die Verwendung der html/modules.php zum Programmieren von Modulstilen ist unter Joomla 4 weiterhin möglich, aber "mit ggf. unwägbaren, lästigen Folgen behaftet" zu bezeichnen. Eine Umwandlung in JLayouts ist in J!4 dringend empfohlen! Siehe Beitrag modChrome-Nerverl. Modulstile sind ab Joomla 4 JLayouts

Hier finden Sie ein Tutorial, falls das komplettes Neuland für Sie ist, aber sollte auch ohne gehen: Joomla-Modulstile verwenden, verstehen, eigene anlegen

Öffnen Sie die Datei modules.php, die Sie bei fast allen Joomla-Templates im zugehörigen Templateordner (unterhalb Verzeichnis /templates/) finden und dort direkt im Unterverzeichnis /html/. Ansonsten legen Sie sie neu an. In diesem Fall auch hier das einleitende defined('_JEXEC') or die; nicht vergessen.

Fügen Sie folgende, weitere Funktion modChrome_includePHPGhsvs in die Datei modules.php ein, für den neuen, eigenen Modulstil includePHPGhsvs..

function modChrome_includePHPGhsvs($module, &$params, &$attribs)
{
 $includeFile = JPATH_SITE . '/media/php-includes_ghsvs/' . $module->position . '.php';
 if (!is_file($includeFile))
 {
  return;
 }
 if ((bool) $module->showtitle){
  $headerTag = htmlspecialchars($params->get('header_tag', 'h3'));
  $headerClass = $params->get('header_class');
  $headerClass = !empty($headerClass) ? ' class="' . htmlspecialchars($headerClass) . '"' : '';
  echo '<' . $headerTag . $headerClass .'>' . $module->title .'</' . $headerTag . '>';
 }
 require_once($includeFile);
}

require_once (Zeile 14) kann natürlich auch durch require, include oder include_once ersetzt werden. Im Normalfall aber nicht nötig. Machen Sie sich ggf. im PHP-Handbuch schlau.

Falls Ihr im media-Ordner angelegter Unterordner anders lautet, anpassen in Zeile 3.

Den Modulstil muss man nur einmalig (pro Template) anlegen. Zwar erlaubt Joomla in Modulen die Auswahl von Modulstilen aus allen Templates, aber leider werden im Frontend nur Modulstile "gezogen", die zum angezeigten Template gehören. Schade!.

Modul anlegen und mit zu inkludierender Datei verknüpfen

Legen Sie danach ein neues Modul vom Typ Eigene Inhalte (Leeres Modul) an.

Seit einiger Zeit heißen diese Module jetzt "Benutzerdefiniertes Modul" (Danke für den Hinweis an Christine Walk!)

2018-01: Mittlerweise heißen sie schon wieder anders ("Eigenes Modul"). Das ist meine letzte Korrektur zu diesem Thema. Komme, was wolle...

Einstellungen

  • Titel anzeigen: Wie's beliebt.
  • Editor-Text: Kann leer bleiben (ich verwende ihn für Notizen). Wird mit obigem Stil-Code nicht angezeigt.
  • (!)Position: Den Dateinamen der obigen Datei ohne Dateiendung eintippen und dann Taste Enter. Bei mir also Position mein-erster-test.
  • Menüzuweisung: Auf allen Seiten. Können Sie später natürlich eingrenzen.
  • (!)Im Reiter Erweitert ganz unten den obigen Modulstil includePHPGhsvs auswählen.
  • Modul speichern.

ISIS-Template (Joomla 3) hat u.U. unangenehmes Verhalten bei händisch eingetippten, eigenen Modulpositionen. Hat man in einem anderen Modul bspw. die Position user-info-test verwendet, ist es in einem weiteren Modul nicht mehr möglich eine Position user-info einzugeben. Hilft nur ein vorübergehender Wechsel in das Backend-Template Hathor. Da geht das problemlos. Manchmal schafft man es auch, die blaue Markierung aus den Suchtreffern des Chosen-Dropdowns durch "Mausgewedel" zu entfernen (Maus rein, Maus raus). Danach wird dann mit ENTER die eigene Position übernommen. Eine Zeit lang ging das Demarkieren auf anderem Wege (gehaltene STRG-Taste + Klick auf Zwischenüberschrift).

Eigenes PHP in einem Beitrag ausgeben

Das verwendete Content-Plugin loadmodule (Inhalt - Module laden) ist im Normalfall in jedem Joomla bereits aktiviert und ohne Zutun einsatzbereit.

Fügen Sie in einem Beitrag ein

{ ​​loadposition mein-erster-test}

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

Also auch hier, ebenso wie bei der Positionsangabe oben, der exakte Dateiname ohne die Dateiendung .php.

Jetzt sollte im Beitrag die Ausgabe der Datei mein-erster-test.php angezeigt werden.

Fertig!

Weitere Ideen

- Im Template selbst Modulposition einrichten.

<jdoc:include type="modules" name="mein-erster-test" style="includePHPGhsvs" />

- Mit JModuleHelper::renderModule(...) an beliebiger Stelle im Joomlacode ausführen. So könnte man auch auf das Anlegen eines Moduls im Backend verzichten, da man Position und Stil dynamisch zuweisen kann.

- Mittels eigenem Sytemplugin und Event onAfterCleanModuleList(...) Modul unterjubeln.

- Diese Anleitung und obiger Modulstil-Code beschränkt sich auf PHP-Dateien. Mit require und include kann man auch HTML-Dateien u.a. laden und anzeigen.

Vielleicht auch interessant zum Thema?

Joomla-Modul-Override für Einbinden beliebiger Codes (z.B. in Beiträge)

modChrome-Nerverl. Modulstile sind ab Joomla 4 JLayouts