Download - ProcessWire – Ein CMS voller Freiheiten
ProcessWireEin CMS voller Freiheiten
• Matthias Mees – @yellowled
• http://netzgestaltung.net
• HTML, (S)CSS, JS/jQuery, CMS
Eckdaten
• Apache mit mod_rewrite und .htaccess
• PHP >= 5.3.8 mit GD2, PDOund mysqli
• MySQL >= 5.0.15
• http://processwire.com
• http://processwire.com/demo/
• http://processwire.com/talk/
Showcase
Backend
• schlicht und schlank
• Eye-Candy über jQuery UI
• aber: ohne JS und in IE < 8 nicht benutzbar
• anpassbare Eingabemasken mit „Hilfetexten“
• Medien sind über Felder Seiten zugeordnet
• keine zentrale Medienverwaltung (im Kern)
• API-Funktionen, um Bilder zu bearbeiten und auf ihre Eigenschaften zuzugreifen
Templates
• jeder Seite ist ein Template zugeordnet
• jedem Template sind Felder zugewiesen
• jedem Feld sind ein Typ und verschiedene Attribute zugewiesen
• Zugriff über API-Variablen und -Methoden
Module
• derzeit 224 Erweiterungen aller Art
• viele Aufgaben von Modulen lassen sich bereits nativ in Templates umsetzen
• statt Themes: Seiten-Profile
Was ist daran nun so ausgesprochen „frei“?
ProcessWire gibt nichts vor
• Struktur, Gestaltung und Verhalten liegen in der Hand des Entwicklers
• es passt sich der eigenen Arbeitsweise an
• oberflächlich wenig komplex, aber sehr leistungsfähig über die API
Alles ist eine Seite
• keine zusätzlichen Inhaltstypen
• jedes Feld ist ein „freies“ Feld
• das gesamte System ist modular auf dem PW-Framework aufgebaut und erweiterbar
Wie jQuery für PHP
• jeder Knoten (Seite) hat ein Eltern- und Kind-Element(e) und unterschiedliche Attribute (Felder) entsprechend seines Typs (Template)
• Methoden, z.B. find(), children(), parent()
• Selektor – Operator – Wert
Code-Beispiele
<?php // Das Feld body der aktuellen Seite ausgeben echo $page->body; !// Die Seite einstellungen finden und // deren Feld copyright ausgeben echo $pages->get("/einstellungen/")->copyright; !// Wie viele Speaker gibt es auf dem WKE 2014? echo $pages->count("template=speaker");
<?php // Navigations-Pfad (Breadcrumb) foreach($page->parents as $p) { echo "<a href='{$p->url}'>{$p->title}</a> » "; } echo $page->title; !// Bildergalerie mit Thumbnails foreach ($page->$images as $i) { $thumb = $i->size(300,225); echo "<li><a href='{$i->url}'><img src='{$thumb->url}' alt='{$i->description}'></a></li>"; }
<?php // Vortragsprogramm des WKE 2014 von heute $today = date('d.m.Y H:i', time()); // nur in Hörsaal 11 sortiert nach Uhrzeit $talks = $pages->find("template=talk,talk_datetime>today,talk_room=11,sort=talk_datetime"); // ausgeben echo "<ul>"; foreach($talks as $talk) { // (<time> nur aus Platzgründen ausgelassen) echo "<li>" . strftime('%H:%M', strtotime($talk->talk_datetime)) . " " . $talk->title . " (" . $talk->speaker . ")</li>"; } echo "</ul>";
Ausgabe Codebeispiel 3(Im Standard-Seitenprofil)