English Version medianotions.de RSS-Feed abonnieren

20.04.2008

MODx-Feature: Snippets – die Alleskönner

Themen: MODx, Snippets | zuletzt bearbeitet: 16.06.2010


In MODx werden dynamische Funktionen mittels PHP-basierten Snippets realisiert, die sich in Templates, Dokumenten oder Chunks aufrufen lassen. Snippets sind ein Hauptbestandteil von MODx und ermöglichen erst den dynamischen Aufbau von Inhalten.

Die prominentesten Snippets sind wohl Ditto und Wayfinder, die fester Bestandteil jeder MODx-Installation sind. Ditto ist ein mächtiges Werkzeug um Dokumentlisten in jeglicher Form auszugeben, in diesem Blog zum Beispiel die Liste „Letzte Artikel“ rechts oder die Artikel-Übersicht auf der Startseite. Wayfinder hingegen wird für den Aufbau von Website-Navigationen verwendet.

Sehen wir uns ein einfaches Snippet am besten gleich mal in der Praxis an. Zunächst erstellen wird das Snippet unter Ressourcen > Ressourcenverwaltung > Snippets

Snippet erstellen in MODx

Date-Snippet PHP-Quelltext 1.0

<?php
   $format="d.m.Y";
   $date=date($format);
   
   echo($date);
?>

Der Snippet-Aufruf kann nun wie bereits erwähnt in einem Template, Dokument oder Chunk erfolgen: Aktuelles Datum: [[Date]] liefert das Ergebnis Aktuelles Datum: 21.04.2008. Und damit ist unser einfaches Date-Snippet fertig und einsatzbereit!

Snippet-Parameter

An Snippets können auch Parameter übergeben werden. Erweitern wir unser Date-Snippet um einen optionalen Parameter format sieht der Snippet-Aufruf so aus [[Date? &format=`Y`]]. Der Parameter format steht uns nun in PHP als Variable zur Verfügung und kann entsprechend verwendet werden:

Date-Snippet PHP-Quelltext 1.1

<?php
   if(!isset($format)) $format="d.m.Y";         
   $date=date($format);
   
   echo($date);
?>

MODx API

Snippets wären nur halb so nützlich ohne die MODx-API, die es dem Entwickler erlaubt auf MODx-Elemente auf einfache Weise zuzugreifen. Als Beispiel soll uns das Snippet DocList dienen, das wie Ditto eine Dokumentliste zusammenstellt und ausgibt. Zunächst legen wir in einem Chunk die gewünschte Ausgabe mittels HTML und MODx-Platzhaltern fest:

Chunk DocListTpl

<li>
   <h2>[+title+]</h2>
   <p>
      [+summary+]<br>
      <a href="[+link+]">mehr …</a>
   </p>
</li>

Und so könnten DocList-Aufruf und DocList-Quelltext aussehen, die dafür sorgen, dass alle direkten Unterdokumente des Dokuments mit der ID 5 wie im Chunk DocListTpl definiert ausgegeben werden:

DocList-Aufruf

<h1>DocList in Aktion:</h1>
<ul>
   [[DocList? &parentID=`5`]]
</ul>

DocList-Snippet PHP-Quelltext

<?php
   // Dokument-Array erstellen
   $documentArray=$modx->getDocumentChildren($parentID);
   
   // Alle Dokumente durchgehen
   foreach($documentArray as $document)
   {
      // Chunk-Parameter bestimmen 
      $params['title']=$document['pagetitle'];
      $params['summary']=$document['introtext'];
      $params['link']==$modx->makeUrl(intval($document['id']));
      
      // Chunk DocListTpl ausführen
      $documentOutput.=$modx->parseChunk('DocListTpl', $params, '[+', '+]');
   }
   
   // Ausgabe
   echo($documentOutput);
?>

Ich gehe an dieser Stelle nicht weiter auf die einzelnen Funktionen der MODx-API ein, diese werden in der MODx-Doku beschrieben. Für MODx-Entwickler, die mit SQL vertraut sind lohnt sich auf jeden Fall auch der Blick auf die MODx-DBAPI.

Caching

Wird ein Snippet von einem Dokument mit eingeschaltetem Caching aufgerufen, wird auch die Snippet-Ausgabe im Cache gesichert und das Snippet bei weiteren Aufrufen nicht mehr ausgeführt. Will man die Ausführung eines Snippets auch bei eingeschaltetem Caching erzwingen, wird der Aufruf mit eckiger Klammer + Ausrufezeichen notiert: [!Date? &format=`H:i:s`!]. Somit ist zum Beispiel sicher gestellt, dass die Uhrzeit, die mittels unseres Date-Snippets ausgegeben werden soll, immer die aktuelle ist und nicht aus dem Cache kommt.

Endlose Möglichkeiten (Again!)

Snippets bieten Web-Entwicklern mittels der API und DBAPI alle Möglichkeiten, aufbauend auf dem MODx-Framework, eigene Funktionen für eine Website oder ganze Web-Applikationen zu entwickeln. Datenstrukturen können dabei je nach Anforderung entweder auf mit Template-Variablen erweiterten MODx-Dokumenten oder auf eigenen Tabellen in der MODx-Datenbank basieren.


Bookmark setzen oder Seite empfehlen

Kommentar schreiben


0 Kommentare