Ich mag Schnittstellen. Schnittstellen (engl. Interfaces) sind ein Instrument objektorientierter Programmierung und sollen – salopp gesagt – sicherstellen, dass verschiedene Programmteile verlässlich zusammen arbeiten können.
Dies spielt besonders dann eine Rolle, wenn Erweiterungen oder ähnliches später und/oder von anderen erstellt werden sollen.
Schnittstellen wären auch eine Möglichkeit für WordPress gewesen, jedoch wurde darauf verzichtet; wohl auch, da PHP keine reine objektorientierte Programmiersprache ist. Auch werden die meisten bei der Entwicklung eines Plugins darauf verzichten, ich jedoch nicht.
Mir gefällt, dass ich auf diese Weise Ideen und Anforderungen in Code festschreiben kann, ohne bereits ins Detail gehen zu müssen; und es entstehen Arbeitsanweisungen für die konkreten Klassen.
Folgende Schnittstellen sind mir in den Sinn gekommen:
ILeo_Sitemap_Xml
<?php
/*
Deklariert Methoden und Konstanten für eine XML-Datei
Author: Hermann J. Leopold
Email: hermann.leopold@leopoldnet.de
Date: 2017-01-30
/*
interface ILeo_Sitemap_Xml
{
// Ich mag die Idee, dass ein ständig gleich benötigtes Zeichen einmal festgelegt wird.
const csTagAuf = "<";
// Hier kann festgelegt werden, ob es nach einem XML-Tag einen Zeichenumbruch geben soll.
// const csTagZu = ">";
const csTagZu = ">\n";
// Das Wichtigste: Das XML-Dokument als String
function toString();
}
Datei: ILeo_Sitemap_Xml.php
Natürlich wird so eine XML-Datei nicht annährend vollständig beschrieben, doch für das Plugin reicht es. Da sich Inhalt und Attribute der Elemente unterscheiden, brauche ich dafür keine Methoden vorschreiben. Das Festlegen der spitzen Klammern als Konstanten ist nicht Humor, sondern es bringt Vorteile:
- Einmal festeglegt, kann man sie nur noch vergessen, aber nicht verwechseln. Da es auch nur eine Methode geben wird, in der die Klammern verwendet werden, sind die Tags stets richtig (oder stets falsch).
- Bei der schließenden Klammer kann festgelegt werden, ob es Zeilenumbrüche geben soll. Diese machen zwar das XML-Dokument lesbarer, aber auch größer.
ILeo_Sitemap
<?php
/*
Deklariert Methoden und Konstanten für eine sitemap.xml
Author: Hermann J. Leopold
Email: hermann.leopold@leopoldnet.de
Date: 2017-01-30
Verzeiht mein Denglish..
/*
interface ILeo_Sitemap
{
// Symbolname des Wurzelelements
const csRootSymbol = "urlset";
// Der übliche Dateiname, sollte er nicht ersetzt werden.
const csDefaultName = "sitemap.xml";
// Legt den Namen der Datei fest; bsp.: sitemap.xml
function setSitemapName($sName);
// Gibt die Url der Website an; bsp.: leopoldnet.de
// Wichtig, da die Verweise meist relativ sind, aber absolut sein müssen.
function setSiteUrl($sUrl);
// Der Pfad zum Speichern wird auch benötigt.
function setPath($sPath);
// Das Wichtigste: Seiten der sitemap hinzufügen.
// Was eine Seite ausmacht, wird in der ILeo_Sitemap_Page festgelegt.
function addPage(ILeo_Sitemap_Page $oPage);
}
Datei: ILeo_Sitemap.php
Der Name der Datei ist nicht festgelegt; somit wäre es möglich, für verschiedene Suchmaschinen unterschiedliche Sitemaps zu erstellen. Auch der Speicherpfad ist (im Rahmen des Möglichen) wählbar; es muss nicht das Wurzelverzeichnis sein.
Wichtig ist das hinzufügen der Seiten. Die dafür vorgesehene Methode ‚addPage()‘ erwartet einen Parameter vom (noch) unbekannten Typ ILeo_Sitemap_Page
. Alles, was eine Seite (aka Page) ausmacht, wird in der nächsten Schnittstelle deklariert.