Struktur
- Einordnung
- Konzept
- API
- Backend
- Fragen & Links
ProcessWire
- Content-Management-/Applikations-Framework
- Requirements: PHP > 5.3.8, MySQL > 5.0.15, URL Rewriting, GD2
- Open Source: Mozilla Public License 2.0 (GPL < MPL < MIT)
Zahlen
Geschichte
- 2003: Dictator CMS closed source
- 2007: ProcessWire 1.x, closed source
- 2011: ProcessWire 2.x
- 2016: ProcessWire 3.x
„The Loop“
- Template (≅ Klasse) erstellen.
- Field (≅ Klassenattribute mit Eingabemechanismus) erstellen und Template hinzufügen+.
- Page (≅ Objekt) aus Template erstellen+.
- Template File (≠ Template) für die Ausgabe erstellen.
- Bei Bedarf wieder bei 1. beginnen.
Hands On!
Und nun zur Praxis: Beispiel CMS-Directory
Einfache aber mächtige API
…abgeschaut von jQuery
- DOM ≅ Site Map
- Selektoren
- Traversing
- Fluent Interface
- teilweise gleiche Methodennamen (
find()
, child()
, parent()
, siblings()
, etc.)
$page
$page->id
$page->url
$page->get("field")
$page->field
$page->parent
$page->children
$page->children("selector")
- …und weitere
$pages
$pages->find("selector")
$pages->count("selector")
$pages->save($page)
$pages->delete($page)
- …und weitere
Selektoren
title*=processwire
version>2
sort=-created,limit=10
- Komplexe Suchbedingungen mit AND, OR, Bedingungsgruppen und Abfrage von Untereigenschaften möglich
- …und weitere
Mehr API-Variablen
$input
: Zugriff auf GET-, POST-, & Cookie-Daten
$session
: Zugriff auf Sessiondaten
$user
: Zugriff auf aktuellen Benutzer
$config
: Zugriff auf seitenweite Konfigurationsdaten
$fields
& $templates
: Seitenweiter Zugriff auf Felder und Templates
$sanitizer
: Funktionen für Validierung und Bereinigung von Nutzereingaben
$log
: Umgang mit Logdateien
Mehr Template-Eigenschaften
Modularität
- Das Backend besteht fast vollständig aus ProcessWire-Modulen, ein großer Teil aller Funktionsaufrufe ist hookbar.
- Achtung: Flexibilität rächt sich beim Debuggen (
Wire::__call()
)!
Wichtige Core-Module
- Nutzer- & Rechteverwaltung
- Mehrsprachigkeit & Übersetzungstools
- Logging
- etc.
Community-Module
Mit Modulen kann die (Backend-)Funktionalität erweitert werden, z.B.: