Processwire vfm-online.de


Autor: michael.hafner@vfm-online.de

Versionen

Vorversionen

Inhalt

  1. Einleitung (Admins, Nutzer:innen)
    1. Allgemeine Hinweise (Admins, Nutzer:innen)
  2. Pflege www.vfm-online.de (Admins, Nutzer:innen)
    1. Grundsätzliches, Allgemeines (Admins, Nutzer:innen)
    2. Seitenübergreifend verwendbare Inhalte (Admins, Nutzer:innen)
    3. Startseite (Admins, Nutzer:innen)
    4. Gern mal vergessen... (Admins, Nutzer:innen)
  3. Administration www.vfm-online.de (Admins, Nutzer:innen)
    1. Installation (Admins)
    2. Grundlagen zum Zusammenspiel von Frontend und Backend (Admins, Nutzer:innen)
    3. Grundlagen zum Zusammenspiel von Frontend und Backend (Admins)
    4. HTML-Templates (Admins)
    5. Nutzerverwaltung (Admins)
    6. ANHANG: Module (Admins)
    7. ANHANG: Site-Konfiguration (Admins)
    8. ANHANG: Bekannte Probleme, Workarounds (Admins)
    9. ANHANG: Änderung der Default-Sprache (Admins)

Einleitung

Zweck des Dokuments

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:

Konventionen

Notation in diesem Dokument

Entwicklungsname des Projekts

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:

Pfadangaben

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".

Begriffe, Abkürzungen

Backend
Die Pflege- und Administrationsoberfläche des Systems.
Frontend
Die Website, die die Inhalte des Systems anzeigt.

Pflege www.vfm-online.de

Grundsätzliches, Allgemeines

Positionierung und Benennung von Seiten, Redirects

"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.

Seitenübergreifend verwendbare Inhalte

Linkliste

Seiten / Home / Linkliste

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.

Startseite

Fußzeile: Servicespalten

Seiten / Home / Fußzeile / [Name der Spalte]

Die Fußzeile der Startseite enthält mehrere Spalten mit Servicelinks. Diese Links werden der allgemeinen Linkliste entnommen.

Gern mal vergessen...

Manche allgemeine Regeln vergessen sich gern bei der Arbeit. Dieser Abschnitt dient als Notizzettel für kleine Fehler.

Administration www.vfm-online.de

Allgemeine Hinweise

Installation

Das System wurde am 09.09.2020 in Version 3.0.165 installiert.

Schritte

Basiskonfiguration

Die Basiskonfiguration nach Aufruf Installscript:

Grundregel (Admins)

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.

Grundlagen zum Zusammenspiel von Frontend und Backend

  1. Inhalte, die das Frontend (FE; die Seite) anzeigt, werden im Backend (BE) erfasst.
  2. Im BE erfasste Inhalte werden in Feldern gespeichert.
  3. Einige Felder sind von PW vordefiniert; der BE-User kann weitere Felder hinzufügen.
    1. Es können beliebig viele Felder hinzugefügt werden.
      1. Felder werden im BE unter "Verwaltung" > "Felder" > "Neues Feld hinzufügen" angelegt.
      2. Beim Hinzufügen eines Feldes legt der BE-User einen Datentyp fest, der angibt, welche Art von Daten ein Feld speichern kann. Datentypen sind z.B. "Text" (für einfache Zeichenfolgen), "Datum" (für Kalenderdaten), "Options" (für vordefinierte Listen zugelassener Einträge).
        1. Der Typ wird bei der Anlage des Feldes unter "Typ" angegeben.
        2. Fehlt ein benötigter Feldtyp in der Liste, muss er möglicherweise installiert werden: "Module" > "Core", Listeneinträge, die mit "FieldType" beginnen.
  4. Ein neu definiertes Feld ist nicht ohne weitere Schritte nutzbar. Es muss zunächst in ein "Template" eingebunden werden.
    1. Ein Template ist (im wesentlichen) eine Liste von Feldern, die einer Seite zugeordnet wird. Siehe hierzu Kap. Templates
    2. Um ein Feld einem Template hinzuzufügen, im BE "Verwaltung" > "Templates" > [Name des Templates] aufrufen, dann Liste "Feld hinzufügen" öffnen.
    3. Ein Feld kann mehreren Templates hinzugefügt werden.

Templates

Template Sets

Das System arbeitet mit externen HTML-Templates (z.Z. Bootstrap Moderna, https://bootstrapmade.com/free-bootstrap-template-corporate-moderna/).

Ladeprozess

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):

HTML-Templates

Allgemeines

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.

Template-Hierarchie

Kein Template bildet eine vollständige HTML-Seite ab. Jedes besteht aus HTML-Code und Platzhaltern, die bei der Seitenausgabe gegen Inhalte oder andere Templates ausgetauscht werden. Entlang dieser Schachtelung (Template in Template in Template...) lassen sich drei quasi hierarchische Schichten unterscheiden:
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).

Platzhalter

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.

Sonderplatzhalter

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>

Nutzerverwaltung

Grundkonzept

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.
  • Einem Nutzer sind eine (Guest) bis mehrere Rollen zugeordnet.
  • Einer Rolle sind null bis mehrere Nutzer zugeordnet.
  • Einer Rolle sind null bis mehrere Berechtigungen zugeordnet.
  • Eine Berechtigung ist einer bis mehreren Rollen zugeordnet.

Registrierungsverfahren: Teil 1

  1. Eine Person ruft über den Menüpunkt "Anmelden | Registrieren" das Anmeldefenster auf.
  2. Sie wählt die Option "Register for an account".
  3. Sie trägt sich mit ihrer Mailadresse ein, wählt ein Passwort und sendet das Formular ab.
  4. Sie erhät eine E-Mail mit einem Bestätigungslink bzw. einem Confirmation Code (z.B. BYRjLbNaacWRHo4xyvDu6DZQeLeBft1kQVFJDsuL).
  5. Sie bestätigt ihre Registrierung per Link oder Eintrag des Confirmation Codes in das Formular.

Registrierungsverfahren: Teil 2

  1. Nach Schritt 1 sind dem neuen Nutzer automatisch die Rollen "Guest" und "Login-Register" zugeordnet.
  2. Fall A: Alle Rollen, die dem neuen Nutzer zugeordnet werden sollen, exisitieren bereits. In diesem Fall werden dem Nutzer unter "Zugriff" > "Benutzer" > [Name des Nutzers] > "Benutzerrollen" alle Rollen zugewiesen, der er erhalten soll.
  3. Fall B: Eine oder mehrere Rollen, die dem neuen Nutzer zugeordnet werden sollen, exisitieren noch nicht. In diesem Fall wird eine neue Rolle unter "Zugriff" > "Benutzerrollen" > "Neu hinzufügen" angelegt und mit Berechtigungen ausgestattet. Danach weiter wie in Fall A.

Zugriffsgeschützter Content (Frontend)

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:

ANHANG: Module

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

ANHANG: Änderung der Default-Sprache

Das System ist mehrsprachig aufgesetzt; die Default-Sprache in Processwire ist Englisch. Dieser default wurde wie folgt geändert:

    Change homepage's default language
    Problem
    You have a multi-language site, and started with for example English as primary, and French as secondary language 
    (so the English homepage is example.org/, the French one example.org/fr). Later in the project you want to set French as primary.

    Solution
    Here is what you can do to redirect the home page '/' to the German home page:

    Set page names for both languages for the home page ('en' for English, 'de' for German)
    In the LanguageSupportPageNames settings, choose the option "No - Root URL performs a redirect to: /name/". 
    When you go to the root url '/' it will redirect you to '/en/'
    Finally, create a module to hook into Session::redirect to force the redirection of the root url to the French 
    translation as follows:
     'LanguageDefault',
                    'version' => 1,
                    'summary' => 'A work around to changing the default language.',
                    'href' => 'https://processwire.com/talk/topic/9322-change-default-language-for-homepage/?p=89717',
                    'singular' => true,
                    'autoload' => true,
                );
            }
            /**
             * Initialize the module
             *
             * ProcessWire calls this when the module is loaded. For 'autoload' modules, this will be called
             * when ProcessWire's API is ready. As a result, this is a good place to attach hooks.
             *
             */
            public function init() {
                $this->session->addHookBefore('redirect', $this, 'setDefaultLanguage');
                // The hook checks whether you are viewing the home page, and whether you are redirecting to the English url, 
                // and if so, it changes the url to the French url
            }

            public function setDefaultLanguage($event) {
                if ($this->page->id == 1 && $event->arguments(0) == $this->page->localUrl('default')) {
                  $event->arguments(0, $this->page->localUrl('de'));
                }
            }
        }
    

Quelle (angepasst): https://processwire-recipes.com/recipes/change-homepages-default-language/

ANHANG: Site-Konfiguration

Anmerkungen, Hinweise

Konfiguration

// Kopie aus site/config.php | site/config-dev.php
$otlet_buffer = array();
$otlet_buffer['names'] = array(
  'prodname' => 'Otlet',
  'prodversion' => '0.1'
);
$otlet_buffer['active_templateset'] = 'moderna';
$otlet_buffer['sitesearch_active_selector'] = 'standard';
$otlet_buffer['params'] = array(
  // 0 = no messages, 1 = vital/fatal, 2 = important, 3 = details, 4 = pedantic
  'msglevel' => 3,
);
$otlet_buffer['urls'] = array(
  'templates' => $config->urls->templates,
  'templatesets' => $config->urls->templates.'otlet_templatesets/',
  'active_templateset' => $config->urls->templates.'otlet_templatesets/'.$otlet_buffer['active_templateset'].'/',
  'images' => $config->urls->templates.'otlet_images/',
  'styles' => $config->urls->templates.'otlet_styles/',
);
$otlet_buffer['dirs'] = array(
  'rel' => array(
    'templatesets' => 'otlet_templatesets/',
    'active_templateset' => 'otlet_templatesets/'.$otlet_buffer['active_templateset'].'/',
  )
);
$otlet_buffer['files'] = array(
  'mainlog' => $config->paths->logs.'otlet.log',
  'debuglog' => $config->paths->logs.'debug.log',
  'logo_home' => $config->urls->templates.'otlet_images/vfm-logo.png',
  'logo_std' => $config->urls->templates.'otlet_images/vfm-logo.png',
  'favicon' => $config->urls->templates.'otlet_images/favicon.ico',
);
$otlet_buffer['placeholders'] = array(
  'openingtag' => '',
  'closingtag' => ''
);
$otlet_buffer['sitesearch_selectors'] = array(
  'standard' => "title|body~=".$otlet_buffer['placeholders']['openingtag']."q".$otlet_buffer['placeholders']['closingtag'].", limit=50",
);
$otlet_buffer['messages'] = array(
  0 => array('Variable not set', 3),
  1 => array('File included', 4),
  2 => array('Change of templateset', 2),
  3 => array('Message Level is', 1),
  4 => array('Active template set is', 1),
  5 => array($otlet_buffer['names']['prodname'].' '.$otlet_buffer['names']['prodversion'].' started', 1),
  6 => array('Person not found', 1),
  7 => array('No vfm address found', 1),
);

$config->otlet_active_templateset = $otlet_buffer['active_templateset'];
$config->otlet_active_templateset_dir = $otlet_buffer['dirs']['rel']['templatesets'].$config->otlet_active_templateset.'/';
$config->otlet_active_templateset_url = $otlet_buffer['urls']['templatesets'].$config->otlet_active_templateset.'/';
$config->otlet_sitesearch_active_selector = $otlet_buffer['sitesearch_active_selector'];
$config->otlet_active_subtemplates = array();
$config->otlet = $otlet_buffer;
unset($otlet_buffer);

function otlet_templateset($otTemplateset = '') {
  global $config;
  if($otTemplateset) {
    $config->otlet_active_templateset = $otTemplateset;
    $config->otlet_active_templateset_dir = $config['dirs']['rel']['templatesets'].$otTemplateset.'/';
    $config->otlet_active_templateset_url = $config['urls']['templatesets'].$otTemplateset.'/';
  }
  return $config->get('otlet_active_templateset');
}
function otlet_sitesearch_active_selector ($otSelector = '') {
  global $config;
  if($otSelector) $config->otlet_sitesearch_active_selector = $otSelector;
  return $config->otlet_sitesearch_active_selector;
}
function otlet_update_sitesearch_selectors ($otSelector_name, $otSelector) {
  global $config;
  if(!$otSelector_name || $otSelector) return '';
  $config['sitesearch_selectors'][$otSelector_name] = $otSelector;
  return $config['sitesearch_selectors'][$otSelector_name];
}
// Ende Kopie aus site/config.php | site/config-dev.php

ANHANG: Bekannte Probleme, Workarounds