Heute möchte ich euch ein großartiges CMS (Content Management System) vorstellen: ProcessWire.

ProcessWire 2.2 ist kostenlos (GNU GPL v2 Lizenz) verfügbar und bietet eine offene API (und Dokumentation) um das entwickeln von Webseiten, Modulen und Templates möglichst einfach zu gestalten. Dieses CMS hat mir auf Anhieb sehr gut gefallen – Es ist sauber geschrieben, einfach zu benutzen, extrem modular und bietet eine nahezu perfekte API Dokumentation! Außerdem gibt es noch eine aktive Community und extrem viele Plugins (insgesamt über 100) die eigentlich kaum noch Wünsche offen lassen!

Auch wenn ich selbst erst „relativ kurz“ mit ProcessWire arbeite möchte ich im heutigen Posting einige Codebeispiele vorstellen. Wenn ihr mehr über die ProcessWire API lernen wollt besucht bitte die offizielle Doku.

Grober Aufbau einer Seite in Processwire

Was mir an dem CMS besonders gut gefällt ist die Idee auf der es basiert! Die benutzbaren Elemente werden ganz weit runter gebrochen – Und zwar bis auf Feld-Ebene (welche dann noch in einzelne Module gekapselt sind). Von groß nach klein haben wir also folgende Abhängigkeiten:

  • Seiten basieren auf Templates.
  • Templates basieren auf mehreren Feldern.
  • Die Felder bestimmen den Datentyp (Text, Textarea, Bild, „Kommentare“, …).

Um das ganze noch mal etwas einfacher darzustellen habe ich hier eine kleine Grafik erstellt.

Ich habe ganz grob versucht eine Webseite darzustellen mit „Header“, „Template“ und „Footer“… Die gepflegten Inhalte landen im Template-Bereich und ergeben den Content unserer Seite!

Features

Vorneweg, dies ist keine komplette Feature-Liste (da wäre ich womöglich Morgen noch am tippen) – Sondern eine kleine Auswahl die ich für erwähnenswert halte:

  • Rechtesystem mit Rollen und Berechtigungen
  • Selbstständiges 404-Handling
  • Sortieren von Seiten innerhalb der Seitenstruktur mit Drag’n’Drop
  • Zweistufiges veröffentlichen einer Seite („Speichern“ und „Veröffentlichen“)
  • Zweistufiges Löschen von Seiten („In den Mülleimer“ und „Löschen“)
  • Kompatibel zu „HTTP“ und „HTTPS“
  • Caching mechanismus für generierte Bilder und Seiten
  • Viele Admin-Themes
  • Module lassen sich relativ einfach selbst erstellen
  • Abhängigkeiten innerhalb von Modulen
  • Module lassen sich mit einem Klick installieren
  • Aktuell über 100 Module
    • Verschiedene Feldtypen
    • Verschiedene Formulartypen
    • jQuery + einige Plugins (UI, Fancybox, …)
    • Multilanguage support
    • + sämtliche (Core) Komponenten des CMS sind installierte Module

Ich war sehr beeindruckt als ich herausgefunden habe das sämtliche Komponenten des CMS eigene Module sind und nicht direkt zum „Core“ gehören.
Das hat natürlich einen großen Vorteil: Sollte es einen Bugfix oder ein Performance-Update geben lässt sich nur das entsprechende Modul updaten während der komplette Rest des Systems unangetastet bleibt!

Template (Code) Beispiele

Kommen wir anschließend zu ein paar kleinen Beispielen, die ich aus den mitgelieferten Templates extrahiert habe und auch in der kommenden Version meines Portfolios nutzen werde:

Ein wichtiges Snippet – Erstellen der Seitennavigation.

/*
 * Die "pages" Variable wird vom CMS definiert und wird genutzt um
 * beliebige Seiten der Webseite zu selektieren.
 *
 * Mit der "get" Methode können wir einen Pfad, eine Seiten-ID oder einen Selektor übergeben
 * und bekommen die gefundene Seite als Ergebnis. Wir selektieren hier die oberste Seite ("/").
 */
$homepage = $pages->get("/");

// Wir holen uns die untergeordneten Seiten.
$children = $homepage->children;

// Anschließend können wir durch die Seiten iterieren
foreach($children as $child)
{
    // Und die links zu den Seiten darstellen
    echo '<a href="' . $child->url . '">' . $child->title . '</a> ';
}

Ein weiteres wichtiges Beispiel, wenn man ein Portfolio auf die Beine stellt, ist eine Galerie inklusive Vorschau-Bilder („Thumbnails“):

/*
 * Die "page" Variable kommt, wie auch "pages", aus dem CMS selbst und definiert
 * die "Seite" auf der das Template eingebunden wurde (z.B. "http://sn4ke.de/photography/").
 * 
 * Die "images" Variable wiederum kommt aus dem gleichnamigen Feld "Images" der Seite
 * und beinhaltet mehrere Bilder, die wir im CMS eingepflegt haben.
 */
foreach ($page->images as $image)
{
    // Wir generieren uns von jedem Bild ein Thumbnail mit den Maßen 250x200.
    $thumb = $image->size(250, 200);
    echo '<a href="' . $image->url . '">
        <img src="' . $thumb->url . '" alt="' . $thumb->description . 
        '" width="' . $thumb->width . '" height="' . $thumb->height . '" />
        </a>';
} // foreach

Zugegeben, mit den Variablen und der Erklärung „kommt aus dem CMS“ kann man zuerst nicht viel anfangen, dafür müsstet ihr euch einfach mal selbst ProcessWire aufsetzen und etwas damit rumspielen – Ich kann euch nur sagen: Es lohnt sich!

Nachteile?

Nachteile gibt es eher indirekt – Zumindest aus meiner Sicht.
ProcessWire kann nämlich pro Seite nur ein einziges Template darstellen – Soll heißen jedes Template repräsentiert (zusammen mit „header“ und „footer“) eine komplette Seite. Es ist also nicht möglich innerhalb einer Seite mehrere verschiedene Templates darzustellen wie z.B. ein „News“ und ein „Teaser“ Template zum gleichzeitigen Darstellen von zwei unabhängigen Bereichen auf einer Seite.
Das wäre ein absolut geniales Feature, würde aber vermutlich eine Menge der Benutzerfreundlichkeit kaputt machen… Vielleicht lassen sich die Entwickler ja noch etwas schlaues einfallen 😉

Mit diesen Worten möchte ich den heutigen Eintrag abschließen und wünsche euch allen eine erfolgreiche Woche und viel spaß mit ProcessWire!

Update, 30.April 2012

Meine Formulierung was die Nachteile angeht war wohl etwas unglücklich gewählt – Es ist durchaus möglich mehrere Templates innerhalb einer Seite darzustellen, allerdings über einen kleinen „Logik Umweg“. Innerhalb eines ProcessWire Templates lassen sich mit einem Befehl Beispielsweise die Templates von anderen Seiten auslesen und darstellen (siehe Kommentar von Marc).
Ich möchte mich für die falsche bzw. schlecht formulierte Info entschuldigen 🙂

Ich wünsche euch allen noch einen schönen Montag Abend!

11 comments on “Processwire, das geniale OpenSource CMS – Update

  • hi! I’m a ProcessWire user. I read your post with Google translation, so forgive me if I understood it wrong 🙂
    Just wanted to clarify that the template that comes with the default install is a simplified example of what you can do, PW is much more powerful and flexible than what’s shown there, and your example of „News“ and „Teaser“ could be very easily achieved. Also, the „head“ and „footer“ approach, is only one of many possible solutions.

  • Seit einigen Tagen schaue ich mir ProcessWire etwas genauer an. Und ich bin begeistert.

    Ich glaube, ich habe endlich einen Nachfolger für MODX gefunden. Denn ProcessWire bietet mir genau das, was mir damals an MODX Evolution gefallen hat: leicht zu handhabende benutzerdefinierte Felder, ein einfaches und sehr detailliert anpassbares Backend (damit auch die größten DAUs damit klarkommen) und die Möglichkeit, einfach meinen HTML-Dummy ins Template-Verzeichnis zu schmeißen und Stück für Stück mit den notwendigen Platzhaltern für die Inhalte zu füllen. Leider entwickelt sich die neue MODX-Version (MODX Revolution) immer mehr zum alles-können-wollenden CMS-Dickschiff und wird damit auch immer komplizierter.

    Dazu kommen ein paar hübsche Features bei ProcessWire, die es längst nicht bei allen CMS gibt. Zum Beispiel die Möglichkeit, die TinyMCEs für verschiedene Eingabefelder unterschiedlich anzupassen. Hätte ich vor einiger Zeit bei einem WordPress-Projekt gut gebrauchen können. Ging aber nicht. Bei ProcessWire sind solche Spielereien grundlegender Bestandteil 🙂

  • Auch ich experimentiere gerade mit PW und komme zu ähnlichen Schlüssen: CMS/CMF wie es sein sollte.

    Zu Deinem „Nachteil“: Ich verstehe nicht ganz, was Du damit meinst. Templates sind einerseits die Standarddarstellung einer „Page“. Heißt: Wenn Du eine Page aufrufst, wird sie mit dem ihr zugewiesenen Template dargestellt. Soweit, so normal, so langweilig. Du kannst ja aber jederzeit von jeder beliebigen anderen Seite die Felder ansprechen und so verwursten wie Du lustig bist. Also in in Deinem Beispiel hättest Du für die News (mind.) zwei Felder, „teaser“ und „content“. In Deinem News-Template würdest Du eben die News im Detail anzeigen. An anderer Stelle auf der Seite würdest Du dann eben die Teaser generieren mit (Pseudocode):

    $teasers = $pages->find(‚template=news‘);
    foreach ($teasers as $teaser){
    echo $teaser->teaser;
    }

    … kann aber auch sein, dass ich Dein Problem nicht verstanden habe 😉

  • Hallo zusammen,
    vielen Dank für die Kommentare! Wie im Eintrag geschrieben arbeite ich noch nicht ganz so lange mit ProcessWire – Daher kenne ich noch nicht die ganzen Feinheiten.

    Klar ist es mit Hilfe von PHP-Logik (wie Marc schrieb) innerhalb eines Templates möglich ein weiteres Template darzustellen oder zu referenzieren (Ich bin immer noch begeistert von der Dynamik die ProcessWire mit sich bringt!).

    Im Eintrag selbst wollte ich allerdings eher erklären das es nicht „ohne weiteres“ bzw. vom CMS selbst her möglich ist (sprich für Designer oder Redakteure die den Content pflegen). Ich dachte dabei an die Möglichkeiten von anderen CM-Systemen in denen man quasi pro Seite mehrere Slots definieren kann und hier nach belieben Templates mit Inhalt reinwirft (wie z.B. im Open Source CMS „Diem“).

    Ich werde den Absatz gleich etwas umformulieren 😉

    @Diogo Thanks for the comment – You understood it right, but I just wanted to show some simple things for people who are completely new to PW. I’m planning to write some more articles about this great CMS and describe some more complex methods and templates (like what Marc wrote here).

    @Michael van Laar Von MODX habe ich schon öfters durch Bekannte gehört, habe es mir allerdings noch nicht selbst angeschaut. Soll aber auch ein sehr gutes CMS sein 🙂 Ich bin noch immer begeistert wie einfach das Templating und die Handhabung von PW ist.

    @Marc Vielen Dank für das einfache Code-Beispiel, wie bereits geschrieben werde ich den Eintrag gleich noch etwas anpassen – Plane aber auch in Zukunft noch ein paar weitere Artikel zu schreiben. Allerdings erst wenn ich mich etwas weiter in das System eingefuchst habe 😉

    Viele Grüße und einen schönen Abend!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.