Autor: michael.hafner@vfm-online.de
Diese Notizen entstehen während der Einrichtung des Systems. Sie verstehen sich nicht als vollständige Systemdokumentation, und sie richten sich nicht ausschließlich an entweder Entwickler-, Administrator- oder Endnutzer:innen.
Der Großteil des Textes dient als Gedankenstütze für administrative oder Entwicklungsaufgaben. Ein Teil des Textes ist für Anwender:innen geschrieben, die in der Pflegeoberfläche mehr tun, als Inhalte zu erfassen - also zum Beispiel Felder anlegen oder Templates definieren. Abschnitte dieser Art sind im Inhaltsverzeichnis gesondert ausgewiesen.
Das Dokument kann und soll von seinen Leser:innen nach Bedarf ergänzt bzw. aktualisiert werden. Da keine automatische Versionierung erfolgt, gilt folgende Regel:
Der Entwicklungsname des Projekts ist "otlet" (nach Paul Otlet (23.08.1868-10.12.1944)). Der String "otlet" wird überall verwendet, wo Abgrenzungen gegen Namensraum und -konventionen von Processwire notwendig sind oder deutlich gemacht werden sollen:
Das Dokument gibt Verzeichnispfade relativ zum Hauptverzeichnis von Processwire an.
Ein realer Pfad "/mnt/web023/a0/21/546221/htdocs/cms/processwire/site/config-dev.php"
erscheint im Dokument also als "site/config-dev.php".
"Titel"* ($page->title) ist ein Pflichtfeld jedes Templates und jeder Seite. Es wird (sofern nicht anders konfiguriert) für die Seitenanzeige im Hierarchiebaum des BE und für das Menü des FE verwendet. Die dort eingetragenen Titel müssen folglich so kurz sein, dass sie die Navigation nicht erschweren bzw. nicht überfrachten. Da viele Titel der Seite (auch nach Abzug der h&auuml;ufigen Untertitel) recht lang sind, enthalten die meisten Templates/Seiten ein weiteres/ mehrere weitere Titelfelder.
PW ermöglicht das Verschieben in der Hierarchie wie auch das Umbenennen von Seiten. ("Umbenennung" meint hier nicht eine Änderung des Titels, sondern des Seitennamens (BE, Editiermodus, Tab "Einstellungen", Feld "Name"*.) In beiden Fällen führt PW die URLs der alten Version der Seite weiterhin mit (damit die Seite auch unter diesen Adressen weiterhin aufgerufen werden kann). Ist dies nicht gewünscht (z.B. wo lediglich eine Kopiervorlage dupliziert wurde), müssen diese URLs manuell gelöscht werden (BE, Bearbeitungsmodus, Tab "Einstellungen" > "What other URLs redirect to this page?").
An dieser Stelle können auch zusätzliche URLs angegeben werden, unter denen eine Seite aufgerufen werden können soll. (NB: Die Redirects können nur innerhalb des PW-Pfads gesetzt werden, nicht üBer die gesamte Domain. Beispiel: Ein Eintrag "tagung-2021" bewirkt, dass die Seite unter "https://www.vfm-online.de/cms/processwire/tagung-2021" aufgerufen werden kann, nicht unter "https://vfm-online.de/tagung-2021.)
Verweise auf andere Seiten aus der Seiten-Hierarchie auf (z.B. auf die alte vfm-Seite) können durch Anlegen einer Seite mit dem Template "vfm_externer_verweis" ("vfm Externer Verweis") gesetzt werden. Dieses Template entält ein URL-Feld, auf dessen Feldwert der Seitenaufruf weiterleitet.
Die Linkliste ermöglicht die Verwaltung oft verwendeter Links. Links dieser Liste werden in den den Servicelink-Spalten der Startseite verwendet, können aber auch in beliebige andere Templates über das Repeater-Feld "Servicelink" eingebunden werden.
Die Fußzeile der Startseite enthält mehrere Spalten mit Servicelinks. Diese Links werden der allgemeinen Linkliste entnommen.
Manche allgemeine Regeln vergessen sich gern bei der Arbeit. Dieser Abschnitt dient als Notizzettel für kleine Fehler.
Das System wurde am 09.09.2020 in Version 3.0.165 installiert.
Die Basiskonfiguration nach Aufruf Installscript:
PW gliedert sich in zwei Hauptverzeichnisse, "/site" und "/wire". Das Verzeichnis "/site" Gehört dem Projekt, es ist von PW-Updates nicht betroffen; hier und nur hier findet die seitenspezifische Konfiguration statt, hier werden Templates und Scripte abgelegt. Das Verzeichnis "/wire" gehört der Anwendung Processwire, es wird bei Updates von PW überschrieben, hier ändert das Projekt nichts.
Das System arbeitet mit externen HTML-Templates (z.Z. Bootstrap Moderna, https://bootstrapmade.com/free-bootstrap-template-corporate-moderna/).
Bei einem Frontend-Aufruf mit delayed output (im Gegensatz zu direct output) lädt PW defaultmäßig (ab Werk) folgende Dateien in der angegebenen Reihenfolge:
site/templates/_init.php | |
site/templates/_func.php | Geladen per Include von "site/templates/_init.php" |
site/templates/_main.php |
Hinweise:
Diese Dateien wurden unverändert gelassen, um jederzeit auf das Basis-Template "ab Werk" zurückgreifen zu können.
Die vfm-Seite verwendet im Regelfalls das folgende Ladeverfahren:
site/templates/_vfm_init.php | |
site/templates/_func.php | Geladen per Include in "site/templates/_vfm_init.php" |
site/templates/_otletlib.php | |
site/templates/_main.php | |
site/templates/otlet_templatesets/[Aktives Templateset-Verzeichnis]/_vfm_init.php | Geladen per Include in "site/templates/_vfm_main.php" |
site/templates/otlet_templatesets/[Aktives Templateset-Verzeichnis]/_vfm_func.php | Geladen per Include in "site/templates/otlet_templatesets/[Aktives Templateset-Verzeichnis]/_vfm_init.php" |
site/templates/otlet_templatesets/[Aktives Templateset-Verzeichnis]/_vfm_main.php | Geladen per Include in "site/templates/_vfm_main.php" |
Aktives Templateset-Verzeichnis: Das Aktive Templateset wird in site/config.php in der Variable $otlet_buffer['active_templateset'] definiert (z.B. $otlet_buffer['active_templateset'] = 'moderna';) und von dort in $config->otlet_active_templateset sowie in $config['otlet']['active_templateset'] geladen. Durch Aufruf der Funktion otlet_templateset($templateset) kann der Wert in $config->otlet_active_templateset zur Laufzeit geändert werden, ohne die Konfiguration anzupassen. Das Verzeichnis des aktiven Templateset ist über die Variablen $config['dirs']['rel']['templatesets'] oder $config->otlet_active_templateset_dir. abrufbar. $config->otlet_active_templateset_dir wird analog zur Laufzeitanpassung des Templateset-Namens durch Aufruf von otlet_templateset($templateset) angepasst. |
Die angepassten Dateien "_vfm_[*].php" in "site/templates" spielen in einer ähnlichen Weise zusammen, wie das Konstrukt der Processwire-Basicpage (Default ab Werk), leiten aber die Steuerung weiter an eine wiederum gleich konzipierte Dateiengruppe im Verzeichis des aktiven Templatesets. Sie bilden eine Abstraktionsschicht, die es ermöglicht, das Templateset durch eine einfache Konfigurationseinstellung zu wechseln, ohne die Verweise in den Templates des PW-Backends ebenfalls ändern zu müssen. Sie erlauben außerdem, designspezifische PHP-Funktionen (angesiedelt in "site/templates/otlet_templatesets/[Aktives Templateset-Verzeichnis]/_vfm_func.php") von designübergreifenden (angesiedelt in "site/templates/_func.php" und site"/templates/_otletlib.php") sauber voneinander zu trennen.
Aufgaben und Anbindung der geladenen Dateien
site/templates/_vfm_init.php | Definition designübergreifender Variablen, die nicht zur Basiskonfiguration gehören. Derzeit: "$otlet_title = $page->get('headline|title');", "$otlet_content = $page->body;" und "$otlet_homepage = $pages->get('/');". | Diese Datei wird in der Templateverwaltung des PW-Backends in vfm-Templates als Preload definiert: "Verwaltung" > "Templates" >" > [Templatename] > "Dateien" > "Datei voranstellen": Eintrag "_vfm_init.php2, "Deaktiviere automatisches Voranstellen von Datei: _init.php" ankreuzen. |
site/templates/_func.php | Diese Datei stellt Funktionen bereit, die unabhängig vom gewählten Templateset für das Rendern der Seite benötigt werden (z.B. eine Ladefunktion für die Einzeldateien des aktiven Seitentemplates). | |
site/templates/_otletlib.php | Diese Datei stellt allgemeine Funktionen bereit, die nicht unmittelbar dem Rendern der Seite dienen (I/O-Funktionen, Logging, Konverter usw.). | |
site/templates/_main.php | Diese Datei liest den Namen des aktiven Templatesets und leitet die Steuerung an die Dateien "_vfm_init.php" und "_vfm_main.php" des betreffenden Templateverzeichnisses weiter. | Diese Datei wird in der Templateverwaltung des PW-Backends in vfm-Templates als Preload definiert: "Verwaltung" > "Templates" >" > [Templatename] > "Dateien" > "Datei anhängen": Eintrag "_vfm_main.php", "Deaktiviere automatisches Anhängen von Datei: _main.php" ankreuzen. |
site/templates/[Aktives Seitentemplate] | Dateien der Namensform "vfm_[Name].php" (z.B. "vfm_home.php") leiten ihren Aufruf an eine gleichnamige Datei im Verzeichnis "site/templates/otlet_templatesets/[Aktives Templateset-Verzeichnis]" weiter. | Automatische Einbindung durch PW zur Laufzeit, gesteuert durch Namensgleichheit von Backend-Template und PHP-Datei. Beispielsweise bewirkt die Bindung einer Seite an das Template "vfmHome" im Backend, dass beim Aufruf der Seite im Frontend die Datei "site/templates/vfmHome.php" aufgerufen wirde. |
site/templates/otlet_templatesets/[Aktives Templateset-Verzeichnis]/_vfm_init.php | Diese Datei übernimmt die Aufgaben der PW-Defaultdatei "site/templates/_init.php", also die Initialisierung von Einstellungen, die für das Rendern der Seite mit dem aktiven Layout (Templateset) erforderlich sind. Beispielsweise liest sie alle HTML-Templates des Maintemplates (des gleichbleibenden Teils des Seitendesigns) in das Array $otlet_templates_main und stellt ein Array $otlet_templates_page für alle HTML-Templates der gerade aufgerufenen Seite bereit. Sie lädt außerdem (ebenfalls analog zu "site/templates/_init.php") die Datei "site/templates/otlet_templatesets/[Aktives Templateset-Verzeichnis]/_vfm_func.php". | |
site/templates/otlet_templatesets/[Aktives Templateset-Verzeichnis]/_vfm_func.php | Diese Datei übernimmt die Aufgaben der PW-Defaultdatei "site/templates/_func.php", also die Bereitstellung von Funktionen, die für das Rendern der Seite mit dem aktiven Layout (Templateset) erforderlich sind. | |
site/templates/otlet_templatesets/[Aktives Templateset-Verzeichnis]/_vfm_main.php | Diese Datei übernimmt die Aufgaben der PW-Defaultdatei "site/templates/_main.php": Sie enthät den gesamten HTML- und PHP-Code, der für die Anzeige des statischen Teils der Seite (Header, Footer, Menü etc.) erforderlich sind. Sie bindet außerdem den Inhalt der gerade aufgerufenen Seite in den variablen Teil des Designs ein ("echo $otlet_content;"). | |
site/templates/otlet_templatesets/[Aktives Templateset-Verzeichnis]/[Aktives Seitentemplate] | Dateien dieser Namensform (z.B. "vfm_home.php") werden von einer gleichnamigen Datei in "site/templates" aufgerufen. Sie lesen den Inhalt der aufgerufenen Seite aus der PW-Datenbank und tragen ihn in ein HTML-Template in einem gleichnamigen Verzeichnis in "site/templates/otlet_templatesets/[Aktives Templateset-Verzeichnis]" ein. |
Beispiel-Ablauf (leicht vereinfacht, ohne _func-Dateien):
Das System arbeitet mit externen HTML-Templates. Der folgende Abschnitt beschreibt das allgemeine Zusammenspiel von PHP-Layer und HTML-Templates am Beispiel des derzeit eingesetzten Bootstrap-Templatesets, Moderna.
Stufe I | |
Hinweis: Es gibt (derzeit) nur ein Template der obersten Hierarchiestufe. Es ist das einzige Template, das direkt im Hauptordner des Templatesets abgelegt ist. | |
site/templates/otlet_templatesets/moderna/_vfm_main.php | Dies ist das Rahmen-Template, in das alle Inhalte direkt oder &uumber;ber Zwischenschritte (durch Einfügen in andere Templates bei der Ausgabe eingebettet werden. Es ist das einzige Template, das eigenen PHP-Code enthät. Alle anderen enthalten lediglich Platzhalter-Tags, die von PHP-Funktionen außerhalb des Template durch Inhalten ersetzt werden. |
Das Template der ersten Stufe existiert, um unterschiedliche Inhalte in derselben HTML-Umgebung anzeigen zu können, ohne diese mehrfach (so oft wie ihre Inhalte) in Kopie vorhalten (und pflegen) zu müssen. Beispiel: Das Hauptmenü der Seite kann an einer einzigen Stelle geändert werden (im Template der Stufe I), und die Änderung wird auf allen Seiten sichtbar. | |
Stufe II | |
Hinweis: In der Regel (nicht immer) werden Templates der Stufen 2 bis n durch lediglich ein PW-Template genutzt. (Gelegentlich teilen sich mehrere PW-Templates solche HTML-Templates auch.) Sie liegen in einem Unterverzeichnis des Templateset-Verzeichnisses, das den gleichen Namen trägt, wie die PHP-Datei, die dem PW-Template zugeordnet ist. | |
Beispiel: site/templates/otlet_templatesets/moderna/vfm_standard/main.tmp | Templates der zweiten Stufe werden unmittelbar in das Template der ersten Stufe eingefügt. Grob gesagt, umfassen sie alle veränderlichen Seiten-Inhalte - das, was der Browser zwischen Kopfbereich (Logo, Menü) und Fußbereich (Links, Impressum usw.) anzeigt. |
Templates der zweiten Stufe existieren, um den Inhalt eines bestimmten Seitentyps aufnehmen und durch Einfügen in das Template der Stufe I anzeigen zu können. Beispiel: Die Seiten zur Satzung bzw. zur Geschichte des vfm teilen sich dasselbe PW- und dassselbe HTML-Template. Änderungen in diesem Template wirken sich auf die Anzeige beider Seiten aus. | |
Stufen III - n | |
Beispiel 1: site/templates/otlet_templatesets/moderna/vfm_gruppe/seg_mitglied.tmp | Templates der der dritten (oder vierten, füften...) Stufe werden in das Template einer höheren Stufe eingefügt. Dieses Template zum Beispiel bildet eine Person als Mitglied einer Gruppe ab. Es wird so oft kopiert und ausgefüllt, bis alle Mitglieder der Gruppe auf der Seite nach demselben Muster (des Templates) abgebildet sind. |
Beispiel 2: site/templates/otlet_templatesets/moderna/vfm_standard/seg_sidebar.tmp | Dieses Template bildet eine Box ab, die zur Anzeige einer Newsliste neben den eigentlich Seiteninhalten verwendet wird. Es wird von verschiedenen PW-Templates aufgerufen, um dieselbe Newsliste in unterschiedlichen HTML-Templates in immer gleicher Form anzuzeigen. |
Templates der Stufen III bis n existieren, (a) um mehrere Inhalte gleicher Art in ein Template höherer Ordnung, oder (b) den gleichen Inhalt auf unterschiedlichen Seiten (mit unterschiedlichen PW- und HTML-Templates (höherer Ordnung )) einfügen zu können (s.o. Beispiele 1 und 2). |
Templates bestehen aus unveränderlichem HTML-Code, der an den Browser ausgegeben und von diesem für die Darstellung der Seite verwendet wird, und aus Platzhaltern, die vor der Ausgabe durch wechselnde Inhalte ersetzt werden, die der Browser anzeigen soll. Beispiel
HTML-Code (einer Überschrift) | <h1 style="font-size:1em;color:red;"></h1> |
Platzhalter | <otlet>title</otlet> |
HTML-Code + Platzhalter | <h1 style="font-size:1em;color:red;"><otlet>title</otlet></h1> |
Inhalt im Feld "Titel" der Seite | KI in der Mediendokumentation |
HTML-Ausgabe nach Austauschen des Platzhalters gegen den Feldinhalt | <h1 style="font-size:1em;color:red;">KI in der Mediendokumentation</h1> |
Anzeige im Browser | KI in der Mediendokumentation |
Alle Platzhalter folgen der Form: <otlet>[Platzhaltername]</otlet>.
In der Regel entsprechen Platzhalter, die den Inhalt eines Datenfeldes aufnehmen sollen, dem Feldnamen (nicht: dem Feldlabel) in der Datenbank (s.o. "title"). Allerdings werden alle möglichen Inhalte für Platzhalter gesetzt, nicht nur Feldinhalte, sondern auch ganze Seitensegmente. In der Regel sind die Namen der Platzhalter so gewählt, dass die Art ihrer Verwendung
Handelt es sich um den Platzhalter für den Wert eines Datenfeldes einer einfachen Seite, kann es genügen, ihn einfach in ein Template neu einzufügen, um das Feld zur Anzeige zu bringen. Allerdings werden manche Seiten aus Elementen mehrerer Objekte (PW-PageReferences, PW-Repeater usw.) zusammengesetzt. In diesen Fällen wird meist der PHP-Code anzupassen sein, um den betreffenden Inhalt auf die Seite zu bringen.
Manche Platzhalter dienen der Ausgabesteuerung, nicht der Aufnahme von Inhalten (s.a. Nutzerverwaltung, Leselevels)
Leerfeld-Steuerung | Ist ein Datenfeld leer, wird sein Platzhalter einfach gegen eine leere Zeichenfolge ausgetauscht. Dabei können jedoch unerwünschte Effekte entstehen. Ein einfacher Fall wäre zum Beispiel die Anzeige einer Leerzeile, etwa bei Fehlen eine Untertitels. |
KI in der Mediendokumentation Versuch einer vorläufigen Einordnung Lieschen Müller, Klingonischer Rundfunk |
Nieder mit IT Pigor & Eichhorn |
||
Um dies zu vermeiden, kann ein Platzhalter der Form
<otlet:[feldname]:wrapper>[...]</otlet:[feldname]:wrapper>
verwendet werden. Ist Feld "feldname" leer, wird der gesamte Inhalt
zwischen den beiden Platzhalter-Tags gelöscht. |
<otlet>titel<otlet><br> <otlet:untertitel:wrapper> <otlet>untertitel<otlet> <br> </otlet:untertitel:wrapper> <otlet>autor<otlet> |
|
Nieder mit IT Pigor & Eichhorn |
||
Statt des gelöschten Template-Segments kann alternativ ein anderes angezeigt werden (das seinerseits gelöscht wird, falls das betreffende Feld nicht leer ist.) |
<otlet>titel<otlet><br> <otlet:autor:wrapper> <otlet>autor<otlet> </otlet:autor:wrapper> <otlet:autor:wrapper:alt> (Ohne Autor) </otlet:autor:wrapper:alt> <br> |
Die Nutzerverwaltung basiert auf drei Bausteinen:
Berechtigungen (Permissions) | Eine Berechtigung erlaubt einem Nutzer die Ausfürung einer bestimmten Aktion im System: Seiten (in einem bestimmten Bereich) einzusehen, Seiten (einer bestimmten Art) anzulegen, Seiten zu ändern usw.. |
Rollen (Roles) | Rollen bündeln Berechtigungen unter einem Namen. |
Nutzer (Users) | Nutzer sind (aus Sicht des Systems) Gruppen von Rollen, die mit einem Namen und Authentifizierungsinformation verknüpft sind. |
|
Grundsätzlich verknüpfen sich FE-Zugriffsrechte in PW mit Rollen und Templates. Eine Unterscheidung im Zugriffsrecht zwischen mehreren Seiten gleichen Templates oder zwischen einzelnen Seitenabschnitten ist nicht vorgesehen. Da beim vfm der Zugriff auf Seminar-Material, Tagungsinformation usw. in der Regel auf Teilnehmer und Organisatoren beschränkt ist, wurde dieses Rechtekonzept erweitert.
Anwendung des Leseschutzes auf Textfelder (Voll-/Rich-Textfeld, andere) und Template-Textteile:
www.vfm-online.de verwendet folgende (Site-)Module
LanguageDefault | Änderung der PW-Default-Sprache von Englisch zu Deutsch. | https://processwire-recipes.com/recipes/change-homepages-default-language/. Siehe unten |
Login Register Pro | FE-Registrierung und Profilpflege (Self service). | https://processwire.com/store/login-register-pro/ |
VFM Rechnungssteller | Erzeugung einer Teilnahme-Rechnung (HTML, PDF), Zustellung per E-Mail. | Homegrown |