PHP-Klassen und PHP-Libraries einfügen
In größeren Projekten kommt es mit der Zeit vor, das externe PHP-Klassen, Libraries oder eigene PHP-Klassen erstellt werden sollen. Es gibt verschiedene Möglichkeiten dies zu realisieren. Eine Möglichkeit besteht darin die Klasse(n) innerhalb einer/mehrerer Vorlage/n zu definieren. Eine andere Möglichkeit besteht darin ein HTML-Dokument anzulegen und die Dateierweiterung auf .php zu stellen. In beiden Fällen müssen die Klassen über ein <we:include>, ein PHP-include oder einen autoloader integriert werden. Die Verwendung ist damit recht umständlich und aufwändig.
PHP-Klassen in webEdition erstellen
Eine andere Möglichkeit besteht darin die PHP-Klassen innerhalb von custom/classes zu erstellen und den webEdition-autoloader die Arbeit machen zu lassen. Man kann dazu entweder die Klassen in das Verzeichnis ziehen, oder dies komfortabler mittels webDAV zu machen.
Um eine möglichst große Flexibilität für die Klassen zu erhalten gibt es in webEdition 3 Möglichkeiten, wie diese Klassen anzulegen sind.
Klassen im webEdition-Stil
Alle PHP-Klassen in webEdition folgen dem Schema PREFIX_DOMAIN_DOMAIN2_KLASSE. Für eigene Klassen ist der Prefix fest auf cs eingestellt. Domain, Domain2, .. und auch den Klassennamen kann man frei wählen.
Soll nun also eine Klasse für Dateiverarbeitung (file) in der Domain core erstellt werden, dann legt man die Datei mit dem Namen cs_core_file.class.php im Verzeichnis core ab. Der Inhalt der Datei kann dann so aussehen:
<?php
class cs_core_file{
public function do():void{
echo 'done';
}
}
Klassen im PSR0-Stil
Anders als der webEdition-Stil, sieht der offzielle PSR-0-Stil vor, das die Dateinamen nicht den vollen Domain-Pfad enthalten. Für die Klasse cs_core_file heißt die Datei nur file.class.php und befindet sich im Verzeichnis core. Sonst gibt es keine Änderungen zum webEdition-Stil.
Klassen im PSR4-Stil (ohne Prefix)
Anders als der PSR0, werden bei PSR4 PHP-Namespaces verwendet. Man würde also Beispielsweise den Namespace core verwenden und darin dann die Klasse file definieren. Dazu legt man das Verzeichnis core an und legt darin eine Datei file.class.php an:
<?php
namespace core;
class file{
public function do():void{
echo 'done';
}
}
Der Aufruf der Klasse muß dann entweder im Namespace selbst, per use definiert oder absolut als new \core\file() erfolgen.
Klassen im PSR4-Stil (mit Prefix)
Der PSR4-Stil wie oben beschrieben eignet sich sehr gut, wenn man selbst Klassen anlegt und den Überblick behalten kann und will. Für externe Quellen, wie libraries, die extern gehostet werden, sind die Namespaces bereits vergeben. Hier werden dann oftmals Namespaces gesetzt denen der Autor vorangestellt ist. Ein Beispiel könnte so aussehen:
namespace elias\Projects\databases\join;
Man müßte nun also den Pfad elias/Projects/databases/join erstellen und darin die Dateien ablegen. Für den späteren Zugriff und die Übersicht im Projekt kann das sehr hinderlich sein und vielleicht möchte man auch alle externen libs in ein Unterverzeichnis /lib ablegen. Um dies zu ermöglichen, liegt im Verzeichnis classes bereits eine Datei autoload.php. Diese Datei wird vom autoloader verarbeitet um Klassen zu suchen. Soll nun nur databases als Verzeichnis in classes/lib erscheinen, muß der autoloader so parametriert werden das er alles was mit elias\Projects beginnt im Verzeichnis classes/lib sucht. Dazu ergänzt man die Datei wie folgt:
we_base_autoloader::registerNameSpace('elias\\Projects', 'lib/','.php');
So wird jede Klasse aus dem Namespace elias\Projects automatisch innerhalb von lib gesucht. Der letzte Parameter gibt dabei noch an, das alle Klassen die Erweiterung .php und nicht .class.php tragen.
Es ist hiermit auch möglich den ganzen Namespace elias/Projects/databases umzubenennen um ihn einfacher zu finden. Dies könnte folgendermaßen aussehen:
we_base_autoloader::registerNameSpace('elias\\Projects\\databases', 'lib/myOtherDatabase','.inc.php');
- Einsatz von PHP in webEdition
- <we:block> und <we:listview>: Alternierende CSS-Klassen mit <we:ifPosition>
- <we:block> und <we:listview>: Den Inhalt eines Blocks in einer Listview ausgeben
- <we:block>: Nummerieren der Wiederholungen mit <we:position>
- Allgemeine Variablen und Funktionen
- Attribute in HTML-Tags ausspielen
- Auf interne Variablen des aktuellen webEdition-Dokuments zugreifen
- Datenbank-Funktionen
- E-Mail-Benachrichtigung von 404-Fehlern mit webEdition
- Externe JS-Plugins und andere Bibliotheken komfortabel in webEdition importieren
- Fehlerseite für limitierte Logins Multidomain-fähig machen
- Google Sitemap in webEdition erstellen
- Große Dateien – wohin damit?
- Innerhalb einer listview type="search" die ID eines Objektes anzeigen
- Liste der Tastaturkürzel
- Massenoperationen für webEdition Objekte
- Mit webEdition automatisiert Thumbnails erzeugen
- Mit webEdition-Thumbnails responsive Background-Images gestalten
- Pflichtfelder in Dokumenten
- Referenzen für PHP, JavaScript und CSS in die webEdition-Sidebar laden
- SEO-optimierte Image-News-Slider mit webEditon und bxSlider
- SEO-URLs, so bekommt ihr sie „klein“
- Tipps und Rezepte
- Vorlagen-Quelltext aus DB anzeigen
- we:comment mehr als nur Kommentare
- webEdition IDs in CSS und JS Dateien einbinden
- webEdition Kategorien
- webEdition Tags statt PHP-Code
- Wie funktionieren eigentlich webEdition Objekte?
- Wie kann ich als Entwickler die Code-Qualität von webEdition-Projekten einschätzen?