[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • OFF-TOPIC: Kommunizierende Module II
Seite 1 von 1

OFF-TOPIC: Kommunizierende Module II

Verfasst: 16. Feb 2018, 01:49
von webseitengeschichten
Ungeachtet all der aktuellen Entwicklungen bin ich noch gut mit 4.2.1 und einem eigenen Modulsystem unterwegs. - Ein ungewöhnlicher Ansatz, den ich schon vor längerer Zeit beschrieben habe. Da das Ganze jetzt ausgereift ist und wirklich klasse funktioniert, dachte ich, ich stell's nochmal rein:

Mein Ziel war es, ein besonders flexibles und gleichzeitig einfaches System für kleine, textorientierte Websites zu entwickeln. Da ich viel mit Veranstaltungen zu tun hatte, war es mir zudem wichtig, dass ich alles auch per Zeitsteuerung ansprechen kann. Um eine größtmögliche Flexibilität zu erreichen, habe ich die drei Basisfunktionen Überschrift, Text und Bild durch drei verschiedene Module realisiert, die frei miteinander kombiniert werden können. Zudem enthält das Modulsystem zwei Hilfsmodule für die Markierung von Listen-Bereichen (Anfang und Ende). Auf diese Weise lassen sich beliebig kleine Abschnitte – wie z. B. einzelne Listenpunkte – über je ein Modul ausgeben und unabhängig über die Zeitsteuerung ein- und ausblenden.

Damit trotz dieser feinen Aufteilung passgenauer HTML-Code herauskommt, können meine Module miteinander „kommunizieren“: Sie erkennen den Kontext in dem sie stehen, reagieren darauf entsprechend und geben ihrerseits Informationen an nachfolgende Module weiter. Ein Text-Block z. B. „erkennt“, wenn er innerhalb einer Liste steht und gibt dann den eingegebenen Text z. B. als einzelnen Listenpunkt anstelle eines Absatzes aus. Zudem setzt er eine Variable, durch die das Modul am Ende der Liste „weiß“, dass die Liste Listenpunkte enthält; also nicht leer ist. Wird der Text-Block hingegen über die Zeitsteuerung deaktiviert, verhält er sich passiv. Nach dem gleichen Prinzip wird ein Text, der direkt auf ein Bild folgt, mit einer anderen CSS-Klasse ausgegeben, als ein Text hinter einer Überschrift. Ein Bild, das über CSS „gefloatet“ ist, gibt diese Information an nachfolgende Module weiter, welche ihre Ausgabe entsprechend anpassen. Folgt z. B. ein Text, stellt dieser über ein „div“-Element mit der CSS-Eigenschaft „clear“ den normalen Elementfluss wieder her. Tatsächlich lassen sich so alle Module beliebig und fehlerfrei miteinander kombinieren und unabhängig voneinander über die Zeitsteuerung ansprechen. Zudem hat sich das Prinzip der „kommunizierenden Module“ auch dafür bewährt, um mehrere Module zu funktionalen Einheiten – wie z. B. Abschnitten (sections) – zusammenzufügen und über das Startmodul gesammelt anzusprechen.

Damit die Performance nicht unter der größeren Anzahl an Blöcken leidet, werden alle Nutzer-Eingaben bereits vor der Modul-Ausgabe über entsprechende Aktionen in fertige HTML-Bausteine umgewandelt. Eine sorgfältige Überprüfung und Verarbeitung der Daten aus der Eingabe sorgt dabei für eine hohe Sicherheit bei der Einhaltung von (HTML-)Standards sowie eine hohe Fehlerfreundlichkeit gegenüber Nutzereingaben. Eine weitere Besonderheit ist das Text-Modul auf Textile-Basis, welches die umfangreichen Funktionen von Textile unter anderem um das Erkennen von URLs und E-Mail-Adressen erweitert und das direkte Einfügen von HTML-Code ermöglicht.

Mein System ist wirklich sorgfältig programmiert. Da man damit kaum etwas falsch machen kann und es mit einem sehr überschaubaren Funktionsumfang auskommt, eignet es sich für Nutzer mit wenig PC-Erfahrung. Gleichzeitig ermöglicht insbesondere das Text-Modul erfahrenen Nutzern über die Textile-Funktion sowie die Direkteingabe von HTML eine große Flexibilität bei der Gestaltung jeder einzelnen Webseite.

Hier einige Screenshots, die die Arbeitsweise meines Modulsystems veranschaulichen.

In der Praxis hat sich die Zeitsteuerung für mich als sehr hilfreich erwiesen: Ich stelle die Veranstaltungen, die meine Kundin mir schickt, einmalig online und muss mich erst dann wieder um die Website kümmern, wenn sie sich mit neuen Veranstaltungen bei mir meldet. Ein Vorteil des Systems ist auch die hohe Performance des von mir optimierten Frontend-Kerns und der insgesamt sehr geringe Resourcenbedarf: Im Pingdom Speed Test hat das CMS – z. B. bei der Ausgabe einer Seite mit 40 Blöcken – einen Anteil von lediglich 40 % (ca. 40 ms) an der Wartezeit des Clients auf die Serverantwort ("WAIT" = ca. 100 ms; getestet von Stockholm) und unterscheidet sich damit kaum von einer statischen Website (Die gleiche Seite als statisches HTML hat einen Wert für "WAIT" von ca. 60 ms.) [ * ][ ** ]. Zudem ist das System PHP 7.1-kompatibel und ich muss mich natürlich auch nicht um das Einspielen von Updates kümmern.

Sollte sich jemand für mein Modulsystem interessieren, kann er oder sie sich gerne an mich wenden. Ich lese gerne auch sonstige Rückmeldungen.

Viele Grüße an die REDAXO-Community,

Michael

[ * ] Die jeweils gemessenen Werte sind von der aktuellen Auslastung der Server abhängig.
[ ** ] Seit kurzem verfügt das System über einen Seitencache, der jede Seite einmal täglich beim ersten Aufruf in einem Cache-Ordner hinterlegt. Ein 3 kB großes Cache-Skript erledigt dann für den Rest des Tages die Auslieferung der gecachten Seite ohne, dass das CMS überhaupt erst geladen wird. Durch dieses einfache Cache-System ist die Seiten-Performance natürlich völlig unabhängig von der Anzahl der pro Seite verwendeten Blöcke ("WAIT" = ca. 60 ms für alle Seiten) und ich konnte mit „Pingdom“ keinen Unterschied zu rein-statischen Seiten messen. – Ein CMS muss also nicht zwangläufig die Performance beeinträchtigen.

Re: OFF-TOPIC: Kommunizierende Module II

Verfasst: 16. Feb 2018, 18:10
von Thomas.Skerbis
Wie kann es sein, dass 4.2.1 mit PHP 7.1 läuft?

Re: OFF-TOPIC: Kommunizierende Module II

Verfasst: 16. Feb 2018, 20:11
von webseitengeschichten
Wie kann es sein, dass 4.2.1 mit PHP 7.1 läuft?

Ich wollte von PHP 5 unabhängig sein, hatte Lust zu programmieren und habe mir die Zeit genommen, um alles auf PHP 7 umzustellen.

Da meine Module nicht mit REX5 kompatibel sind und ich bereits einiges im 4.2.1-Core angepasst hatte, war es einfacher, das mir vertraute System Schritt für Schritt zu überarbeiten, als das Ganze komplett neu in 4.7 umzusetzen. Die Umstellung auf PHP 7 war auf diese Weise ein eher kleiner und überschaubarer Teil - gemessen an dem, was ich da bis dahin schon an Zeit und Energie reingesteckt hatte. In der Regel tauchen zwei oder drei Arten von Fehlern massiv auf; dann ist da noch die Umstellung auf MySQLi und das wars im Großen und Ganzen. Wo ich selbst nicht weitergekommen bin, konnte ich Code aus 4.7.2 verwenden. Am Ende war ich dann doch positiv überrascht, dass plötzlich alles wieder funktionierte :).

Re: OFF-TOPIC: Kommunizierende Module II

Verfasst: 17. Apr 2018, 12:38
von Joachim.Dörr
Hast du schonmal mit MBlock gearbeitet? Mit MForm in Kombination ist es ohne weites möglich unterschiedliche MBlock-Typen zu definieren. So könntest du mit nur einem Modul dein ganzes System abbilden.
lg
Joachim