File Structure and Naming Conventions/de: Difference between revisions
From Joomla! Documentation
Blancanieve (talk | contribs) Created page with "Es gibt zwei zusätzliche Ordner im Administrator-Verzeichnis:" |
Blancanieve (talk | contribs) Created page with "Dieser Ordner enthält nur eine Datei." |
||
Line 71: | Line 71: | ||
:'''<code>/admin/services</code>''' | :'''<code>/admin/services</code>''' | ||
: | :Dieser Ordner enthält nur eine Datei. | ||
::'''<code>/admin/services/provider.php</code>''' | ::'''<code>/admin/services/provider.php</code>''' |
Revision as of 17:22, 30 August 2020
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-Parameterformat
aufformat=feed
gesetzt ist, wird die DateiFeedView
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
- This file holds an anonymous class implementing
\Joomla\DI\ServiceProviderInterface
. It's job is to return the Dependency Injection container provisioned with all the factories needed to run your component (in all 3 web applications they may run in).
/admin/src/Extension
- This folder holds a single file.
/admin/src/Extension/{ComponentName}Component.php
- This file is the public face of the extension, it retrieves data from the Container produced in the provider file above and exposes the relevant services (accessible via
\Joomla\CMS\Application\CMSApplication::bootComponent()
). This class is used by modules to get access to the component models or to run a component by Joomla when loading a page (by getting the dispatcher).
In some cases it might sometimes make sense to share classes between the site and admin parts of the component. Especially models can be shared to avoid duplicating model code. The Joomla platform supports this strategy. When sharing any code between site and admin applications, the classes should be designed with great care to avoid the possibility of a site user executing admin actions.
- ↑ 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))