J4.x

Dateistruktur und Namenskonventionen

From Joomla! Documentation

This page is a translated version of the page J4.x:File Structure and Naming Conventions and the translation is 100% complete.
Other languages:
Deutsch • ‎English • ‎français • ‎中文(台灣)‎
Info non-talk.png
General Information

Dieses Dokument informiert über die neuen Konventionen speziell für Joomla 4. Joomla 4 unterstützt aus Gründen der Abwärtskompatibilität auch die alten Namenskonventionen für Joomla 3. Wenn Joomla 3 und Joomla 4 gleichzeitig unterstützen werden soll, können weiterhin die Konventionen für Joomla 3 verwendet werden, die unter Dateistruktur und Namenskonventionen für Joomla 3 beschrieben sind.

Komponenten des Joomla-Kerns (und in der Tat im Allgemeinen im Joomla-Universum) folgen dem Model-View-Controller (MVC)-Designmuster. Dieses Muster trennt die Aktivitäten Datenerfassung (Model), Präsentation (View) und Benutzerinteraktion (Controller) einer Komponente. Eine solche Trennung ermöglicht es, Eigenschaften und Methoden eines Abschnitts zu erweitern oder zu überarbeiten, ohne dass zusätzliche Änderungen an den anderen Abschnitten erforderlich sind. Weitere Informationen dazu sind in den MVC-Tutorials zu finden, die für mehrere Joomla-Versionen verfügbar sind.

Das Dateiladesystem von Joomla ermöglicht es Entwicklern, mit separaten Dateien für Controller, Views und Models zu arbeiten, ohne sich um den Import der richtigen Datei an der richtigen Stelle kümmern zu müssen. Damit dies jedoch funktioniert, müssen bestimmte Namenskonventionen eingehalten werden.

Die Joomla-Plattform ist äußerst flexibel, und es ist möglich, in vielerlei Hinsicht von diesen Konventionen abzuweichen. Es wird dennoch empfohlen, wo immer möglich, Standardnamen zu verwenden, um die Lesbarkeit und Wartbarkeit zu erhöhen. Darüber hinaus wird die Plattform die vielen mühsamen Aufgaben zur Verwaltung von Klassen übernehmen, wenn die Dateien und Klassen einer Komponente korrekt benannt sind.

Reservierte Begriffe

Es gibt reservierte Wörter, die nicht in Namen von Klassen und Komponenten verwendet werden können.

Ein Beispiel ist das Wort "model" (in jedem Fall) für Modellklassen (außer "model", das der zweite Teil des Klassennamens sein muss)[1]. Da der erste Teil des Namens von Modellklassen derselbe ist wie der Controller-Klassenname, können Controller-Klassennamen auch nicht das Wort "Model" enthalten. Und aufgrund der Konventionen (auch wenn die Verletzung dieser Konventionen keinen Fehler erzeugt) müssen Controller-Klassennamen den Komponentennamen enthalten, so dass Komponentennamen auch nicht das Wort "Model" enthalten dürfen. Komponenten können also nicht "com_modelling" genannt werden. Falls doch, verletzen sie die Namenskonventionen und müssen einen anderen Basis-Controller-Klassennamen (oder andere Hacks) haben.

Installationspaket und tatsächlicher Ort von Dateien

Alle Joomla-Erweiterungen müssen als .zip-Installationsdatei gepackt werden. Nach der gebräuchlichsten Dateianordnung sollte das Paket in seiner Grundstruktur mindestens den admin-Ordner enthalten. Es kann zusätzlich (unter anderem) enthalten:

  • site
  • admin

Wenn die XML-Manifestdatei gemäß der Standardpraxis einrichtet ist, wird der Inhalt von site in /components/com_{komponentenname} installiert, während der Inhalt von admin in /administrator/components/com_{komponentenname} installiert wird (Hinweis: In diesen Pfaden ist der Komponentenname kleingeschrieben).

Der Ordner /site

In diesem Ordner befinden sich die Dateien für den Frontend-Teil der Komponente.

/site/forms
Dieser Ordner enthält die XML-Formulare, die von \Joomla\CMS\Form\Form verwendet werden.
/site/tpl
Dieser Ordner enthält die Ansichten, die im Template erscheinen sollen.
/site/tpl/{viewname}
Dieser Ordner enthält die Dateien für die Ansicht {ViewName}. Hinweis: Der Pfad verwendet hier den Ansichtsnamen in Kleinbuchstaben.
/site/src/tpl/{viewname}/default.php
Dies ist das Standard-Template für die Ansicht {ViewName}. In dieser PHP-Datei bezieht sich das Schlüsselwort $this auf die View-Klasse, zu der die Vorlage gehört.
/site/src
Dieser Ordner enthält den auf Namensräume bezogenen PHP-Code für das Frontend der Komponente. Die Konventionen bezüglich der Namensräume werden unter Namensraum-Konventionen in Joomla 4 beschrieben.
/site/src/View
Dieser Ordner enthält die verschiedenen Ansichten (Views) für die Komponente.
/site/src/View/{ViewName}/HtmlView.php
Diese Datei ist der Einstiegspunkt für die Ansicht {ViewName}. Diese Klasse muss das Interface \Joomla\CMS\MVC\View\ViewInterface implementieren und erweitert die formatspezifische Klasse (wenn der Kern sie bereitstellt - wie z. B. \Joomla\CMS\MVC\View\HtmlView) oder \Joomla\CMS\MVC\View\AbstractView. Der Dateiname bezieht sich auf das Format, in dem die Ansicht geladen wird. Wenn zum Beispiel der URL-Parameter format auf format=feed gesetzt ist, wird die Datei FeedView geladen.
/site/src/Model
Dieser Ordner enthält zusätzliche Modelle, falls diese von der Anwendung benötigt werden.
/site/Model/{ModelName}.php
Diese Datei enthält die Modellklasse {ModelName}. Diese Klasse muss die Basisklasse \Joomla\CMS\MVC\Model\BaseDatabaseModel erweitern. Es ist zu beachten, dass die Ansicht mit dem Namen {ViewName} standardmäßig ein Modell mit dem Namen {ViewName} lädt, falls es existiert. Die meisten Modelle sind nach der Ansicht benannt, mit der sie verwendet werden sollen, aber dies ist keine Voraussetzung. Weitere Informationen sind unter Verwendung mehrerer Modelle in einer MVC-Komponente zu finden.
/site/src/Controller
Dieser Ordner enthält zusätzliche Controller, falls von der Anwendung benötigt.
/site/src/Controller/{ControllerName}.php
Diese Datei enthält die Controller-Klasse {ControllerName}. Diese Klasse muss die Basisklasse erweitern: \Joomla\CMS\MVC\Controller\BaseController.
/site/src/Dispatcher
Dieser Ordner enthält den Site-Dispatcher.
/site/src/Dispatcher/Dispatcher.php
Diese Datei enthält den Site-Dispatcher. Er lädt die Sprachdateien, führt eine Komponentenzugriffsprüfung durch und ruft anschließend den Controller ab und führt ihn aus. Dabei führt er in Komponenten mit HTML-Ausgabe bei Bedarf auch Umleitungen aus.

Der Ordner /admin

Die Dateistruktur ist fast genau die gleiche wie im Ordner /site. Es sollte beachtet werden, dass die Ansicht, Modelle, Controller usw. des Site- und Admin-Teils standardmäßig vollständig voneinander getrennt sind und nichts miteinander zu tun haben - der Site-Teil und der Admin-Teil können als zwei verschiedene Komponenten betrachtet werden! Eine Ansicht im Ordner /admin kann ein gleichnamiges Gegenstück im Ordner /site haben, aber die beiden Ansichten haben nichts gemeinsam, außer ihren Klassennamen (obwohl sie unterschiedliche Namensräume haben werden, um sie zu trennen).

Es gibt zwei zusätzliche Ordner im Administrator-Verzeichnis:

/admin/services
Dieser Ordner enthält nur eine Datei.
/admin/services/provider.php
Diese Datei enthält eine anonyme Klasse, die \Joomla\DI\ServiceProviderInterface implementiert. Ihre Aufgabe ist es, den Dependency-Injection-Container zurückzugeben, der mit allen Factories versehen ist, die für den Betrieb Ihrer Komponente benötigt werden (in allen 3 Webanwendungen, in denen sie laufen dürfen).
/admin/src/Extension
Dieser Ordner enthält nur eine Datei.
/admin/src/Extension/{ComponentName}Component.php
Diese Datei ist die öffentliche Seite der Erweiterung. Sie ruft Daten aus dem Container ab, der in der oben genannten Provider-Datei erzeugt wurde, und stellt die entsprechenden Dienste zur Verfügung (zugänglich über \Joomla\CMS\Application\CMSApplication::bootComponent()). Diese Klasse wird von Modulen verwendet, um Zugriff auf die Komponentenmodelle zu erhalten oder um eine Komponente über Joomla laufen zu lassen, wenn eine Seite geladen wird (indem der Dispatcher abgerufen wird).

In einigen Fällen kann es sinnvoll sein, Klassen zwischen dem Website- und dem Admin-Teil der Komponente gemeinsam zu nutzen. Insbesondere Modelle können gemeinsam genutzt werden, um die Duplizierung von Modellcode zu vermeiden. Die Joomla-Plattform unterstützt diese Strategie. Beim Teilen von Code zwischen Site- und Admin-Anwendungen sollten die Klassen mit großer Sorgfalt entworfen werden, um die Möglichkeit auszuschließen, dass ein Site-Benutzer Admin-Aktionen ausführt.


  1. der Grund ist in der Funktion getName in der Datei libraries/src/MVC/Model/BaseDatabaseModel.php zu finden: if (!preg_match('/Model(.*)/i', get_class($this), $r))