Handler

Um dem Modul Zugriff auf verschiedene Teile wie Navigation, Parser, etc. zu erlauben, wird es an diesen Stellen "Handler" - oder "Anfasspunkte" geben, in die das Modul eingreifen kann.

Diese Handler stehen üblicherweise in Form einer Variablen zur Verfügung, die die durchzuführende Aktion enthält. Handelt es sich hierbei um ein Array, werden die Aktionen in der Reihenfolge durchgeführt, in der sie im Array definiert sind.

Achtung: Da diese Aktionen in einer Funktion (doActions()) ausgeführt werden, sind natürlich nur alle Variablen nur lokal in dieser Funktion verfügbar. Wenn man auf globale Variablen zugreifen will, muss man diese auch mit global $variable oder $GLOBALS['variable'] ansprechen. Das gilt sowohl für include: als auch für function:.

Es gibt mehrere Aktionen, die durchgeführt werden können. Hierzu zählen die folgenden:

include:

Die "include:"-Aktion erlaubt das Einbinden von anderen Dateien. Das Format lautet:

 include: Datei1 [Datei2[ ...]]

ConPresso bindet dann die erste existierende und lesbare Datei in der Liste ein. Sollte eine Datei nicht existieren, ergänzt die Funktion doActions() das Basisverzeichnis von ConPresso vor dem Dateinamen und versucht es nochmal. Erst danach wird eine eventuelle Datei2, usw. versucht.

Hinweis: Da die Dateien durch Leerzeichen getrennt werden, muessen die Dateinamen in einem speziellen Format angegeben werden. Als Kodierung wird die in PHP vorhandene Funktion urlencode() benutzt.

function:

Die "function:"-Aktion erlaubt das Ausführen von Funktionen. Das Format lautet:

 function: funktionsname [parameter]

Wenn eine Funktion mit dem Namen "funktionsname" existiert, wird diese aufgerufen. Eventuell anhängende Parameter werden der Funktion als String übergeben.

Standard-Aktion:

Sollte eine Aktion nicht dem Format der oberen Punkte entsprechen, wird die Aktion wie eine einfache Zeichenkette behandelt und ausgegeben.

Mögliche Handler:

$hdlr_navigation

Dieser Handler baut die Navigation am linken Rand des ConPresso Backends auf. Per Default wird nur die Basis-Navigation geladen:

 $hdlr_navigation = array('include: '.urlencode('_include/basic_navigation.inc.php'));

Ein Modul kann diesen Handler ergänzen, um die Navigation anzupassen und so z.B. neue Punkte hinzuzufügen:

 if ($_SESSION['SID_user']['admin']>=ROLE_EDITOR)
     $hdlr_navigation[] = 'function: Testmodul_navigation';

Genauere Informationen zum Aufbau der Navigation findet man auf der Seite Backend Navigation .

$hdlr_parser_content[]

Dieser Handler wird im Parser benutzt und dient dazu die Inhalte für einen Platzhalter-Typ zu laden (z.B. aus der Datenbank). Als Standard sind die ConPresso-Platzhalter definiert:

 $hdlr_parser_content['file']  = array('include: '.urlencode('_include/parser_c_file.inc.php'));
 $hdlr_parser_content['html']  = array('include: '.urlencode('_include/parser_c_html.inc.php'));
 $hdlr_parser_content['image'] = array('include: '.urlencode('_include/parser_c_image.inc.php'));
 $hdlr_parser_content['text']  = array('include: '.urlencode('_include/parser_c_text.inc.php'));
 $hdlr_parser_content['url']   = array('include: '.urlencode('_include/parser_c_url.inc.php'));
 $hdlr_parser_content['value'] = array('include: '.urlencode('_include/parser_c_value.inc.php'));

Der Schlüssel des Arrays entspricht dem Platzhalter-Typen. Der Handler muss das $content-Array des Parsers ergänzen, da Platzhalter ohne zugeordneten $content durch einen Leerstring ersetzt werden.

Das Array hat den folgenden Aufbau:

 $content['NAME (TYP)'] = array(
     'type' => TYP,
     'name' => NAME,
     ...
 );

Ein schönes und überschaubares Beispiel liefert das Textelement in _include/parser_c_text.inc.php:

  1. Zu Anfang werden die benutzten globalen Variablen definiert, da der Handler in der Funktion doActions() aufgerufen wird.
  2. Anschliessend wird überprüft, ob die Daten für den Typ TYP schon geladen wurden. Hierzu wird das Array $fetchedcontent benutzt, dessen $fetchedcontent[TYP]==true ist, wenn die Inhalte schon geladen wurden. \\ Das ganze ist ein kleiner Performancetrick, um möglichst wenige Datenbankabfragen durchzuführen. Anstatt für jeden Platzhalter einzeln die Daten zu laden, werden sofort alle Daten des jeweiligen Typs aus der Datenbank geholt. Kommen z.B. 10 Text-Platzhalter im Template vor, wird hierfür nur eine Datenbankabfrage benötigt.
  3. Wurden die Daten noch nicht geladen, wird eine Datenbankabfrage durchgeführt die "alle Daten dieses Typs zum Artikel mit der nr $db_nr" liefert.
  4. Die gefundenen Daten werden in das Array $content geschrieben.

$hdlr_parser_replacement[]

Dieser Handler wird im Parser benutzt und dient dazu Ersetzungen für die Platzhalter der unterschiedlichen Typen zu erstellen. Als Standard sind die ConPresso-Platzhalter definiert:

 $hdlr_parser_replacement['file']  = array('include: '.urlencode('_include/parser_r_file.inc.php'));
 $hdlr_parser_replacement['html']  = array('include: '.urlencode('_include/parser_r_html.inc.php'));
 $hdlr_parser_replacement['image'] = array('include: '.urlencode('_include/parser_r_image.inc.php'));
 $hdlr_parser_replacement['text']  = array('include: '.urlencode('_include/parser_r_text.inc.php'));
 $hdlr_parser_replacement['url']   = array('include: '.urlencode('_include/parser_r_url.inc.php'));
 $hdlr_parser_replacement['value'] = array('include: '.urlencode('_include/parser_r_value.inc.php'));

Der Schlüssel des Arrays entspricht dem Platzhalter-Typen. Die durchgeführten Aktionen des Handlers müssen den String $replacement als Ergebnis haben. Wird kein Handler gefunden oder liefern die Aktionen kein $replacement, so wird der String '<!-- ERROR: unable to find replacement for the following placeholder (unknown type?): -->' vor den Platzhalter geschrieben. Da sowohl dieser String als auch der Platzhalter HTML-Kommentare sind, taucht kein Inhalt oder Fehler auf der Seite auf.

Ein schönes und überschaubares Beispiel liefert das Textelement in _include/parser_r_text.inc.php. Abhängig davon welche Parameter im $parameters-Array gesetzt sind (z.B. strip_tags oder nl2br) wird die Variable $replacement gesetzt. Der hierfür nötige Inhalt, wird anhand des $keys aus dem $content-Array geholt.