rss-icon mail-icon

Portfolio Christian Waldmann

Vom:
Modx Revolution Tutorial: Zugriff auf Resources und <nobr>Template-Variablen</nobr>

Blog

Mein "Kompendium" und sonstige Projekte

Modx Revolution Tutorial: Zugriff auf Resources und Template-Variablen

Modx 2.x (Revolution) hat eine sehr mächtige API. In diesem Tutorial befasse ich mich mit den „Basics“. Zu diesen zähle ich den Zugriff auf Resources (Dokumente) in einem „Snippet“ über die API ($modx) und deren Ausgabe über ein „Chunk“.

Modx Revolution verfügt über eine sehr gute Dokumentation. Dieser Artikel sollte eher als Ergänzung bzw. als „Cheat-Sheet“ gesehen werden.

Die offizielle Modx Revolution Dokumentation ist zu finden unter: http://rtfm.modx.com/display/revolution20/Home

Dort gibt es auch einen ausführlichen Artikel über „Snippets“ (Englisch).

Was ich in diesem Tutorial zeige ist:

  1. Wie eine Resource (Dokument) geladen wird
  2. Wie der Inhalt der Template Variablen geladen wird
  3. Wie die Ausgabe über ein Chunk realisiert wird

Tipps bevor es losgeht

getResources

Es gibt bereits ein Add-On, welches über eine ähnliche Funktionalität verfügt, die hier besprochen wird. Es heißt „getResources“ und kann über den Paket-Manager installiert werden.

CodeMirror

Bevor es losgeht solltet ihr euch das Add-On „CodeMirror“ über den Paket-Manager installieren. Dieses rüstet euren „Code-Editor“ mit Syntax-Highlighting aus.

Ein neues Snippet anlegen

Zunächst muss ein neues „Snippet“ angelegt werden. Dazu muss auf den Reiter „Elements“ geklickt werden. Wenn man nun „rechts“ auf „Snippets“ klickt, öffnet sich ein Kontext-Menü. In diesem kann auf „Neues Snippet“ oder „Snippet schnell erstellen“ geklickt werden, um ein neues „Snippet“ zu erstellen.

Ressources (Dokumente) auslesen

Die einfachste Möglichkeit auf (mehrere) Dokumente zu zugreifen ist über die Methode $modx->getCollection(). Diese verfügt über folgende Parameter:

getCollection($className, $criteria= null, $cacheFlag= true)

Wobei uns nur die ersten beiden Interessieren. Mit $className wird angegeben, welcher Typ geladen werden soll. In unserem Fall wollen wir auf eine „modResource“ zugreifen.

Mit $criteria wird bestimmt, welche Dokumente geladen werden sollen.

Der Zugriff auf die Resources kann nun folgendermaßen aussehen:

//Query zusammenstellen, um Resources auszulesen
$c = $modx->newQuery('modResource');
$c->where(array(
   'parent' => 9,
   'deleted' => false,
   'hidemenu' => false,
   'published' => true
));
$c->sortby('menuindex','ASC');
$c->limit(3);

//Resources auslesen
$resources = $modx->getCollection('modResource',$c);

Der Parameter „parent“ gibt nun an, dass alle Child-Resources der Resource mit der ID 9 geladen werden sollen.

Die einfachste Möglichkeit, den Inhalt auszugeben ist nun folgende:

$output = "<ul>";
foreach($resources as $item) {
  $output .= "<li>".$item->pagetitle."<li>";
}
$output .= "/<ul>";

return $output;

„modResource“-Member Variablen

Type Name
int id
string pagetitle
string longtitle
string description
string alias
boolean published
int pub_date
int unpub_date
int parent
string introtext
string content
string menutitle
boolean hidemenu
boolean deleted
string uri

Den Inhalt über ein Chunk ausgeben

Der elegantere Weg, die geladenen Resources auszugeben, ist über ein „Chunk“.

//output
$output = "";
foreach($resources as $item) {

	//Array zusammenstellen mit den Informationen, welche
	//auch im Chunk zur Verfügung stehen sollen
	$array = array ();
	$array ['pagetitle'] = $item->pagetitle;
	$array ['content'] = $item->content;

	//Chunk über die API anfordern
	$chunk = $modx->getObject('modChunk',array('name' => 'unserChunk'));

	//Inhalt renderen
	$output .= $chunk->process ($array);

}

return $output;

Template Variablen (TV) zusätzlich laden

Der Zugriff auf die Template Variablen erfolgt über die Methode „getMany“ des „modResource“-Objects. Hier mit werden alle Template-Variablen der Resource geladen (nicht jedoch der Inhalt von diesen). Nachdem die Variablen geladen wurden, kann über die Methode des „modTemplateVar“-Objects Zugriff auf den Inhalt genommen werden.

Der Code sieht nun folgendermaßen aus:

$output = "";
foreach($resources as $item) {
	//Array zusammenstellen mit den Informationen, welche
	//auch im Chunk zur Verfügung stehen sollen
	$array = array ();
	$array ['pagetitle'] = $item->pagetitle;
	$array ['content'] = $item->content;

	//Template Variablen auslesen
	$templateVars = $item->getMany('TemplateVars');

	foreach ($templateVars as $tv) {
		//Den Inhalt der Template Variable auslesen
		$tvContent = $tv->getValue($item->get('id'));

		//Im Array zur Weiterverarbeitung speichern
		$array [$tv->get('name')] = $tvContent;
	}

	//Chunk über die API anfordern
	$chunk = $modx->getObject('modChunk',array('name' => 'unserChunk'));

	//Inhalt renderen
	$output .= $chunk->process ($array);

}

return $output;

Download

Den gesamten Beispiel-Code herunterladen

Kategorie: MODx