Parser
Damit aus ConPresso-Templates Artikel werden, müssen diese einen mehrstufigen Parser-Prozess durchlaufen. Dieses geschieht in der Datei _include/parser.php. Vor dem Einbinden dieser Datei mit include() müssen einige Variablen mit Inhalt gefüllt werden:
$template_datei
Enthält das darzustellende Template des Artikels.
$template_datei_full
Enthält das komplette Template des Artikels. Der Inhalt besteht aus allen drei Template-Teilen für die Index-, die Detail- und die Javascript/PHP-Seite in einem String. Dieses ist nötig um auch Inhalte zu erkennen, die nicht in $template_datei vorkommen, aber z.B. per ifSet überprüft werden.
$db_nr
Enthält die Nummer des Artikels und ist notwendig um die dazugehörigen Inhalte aus den content-Tabellen zu laden.#
$db_rubric_id, $db_titel, $db_autor, $db_email, $db_initial, $db_template, $db_idx, $db_pub_datum, $db_verfallsdatum
Diese Werte sind nicht zwingend erforderlich, sollten aber die jeweiligen Werte enthalten, um eventuelle vorkommende Value-Felder (bzw. $db_rubric_id für das Rubrikverzeichnis für URLs aus den Rubrikeinstellungen) anzeigen zu können.
Funktionsweise des Parsers (in Arbeit, unvollständig!)
Der ConPresso-Parser _include/parser.php, der die Templates mit Artikeldaten füllt, ist aufgrund seiner Funktion sehr komplex. Im folgenden wird versucht einen kleinen Überblick über den Vorgang zu geben.
Begriffe
<!-- TYP: NAME[; PARAMETER]; -->
Wichtige Variablen
Im Parser gibt es einige Variablen, die für den Ablauf wichtig sind.
- $content[] - Inhalte der Platzhalter; wird im ersten Schritt des Parse-Vorgangs gefüllt.
- $db_content - ein Datenbank-Objekt, das zum Laden der Inhalte aus der Datenbank benutzt werden kann.
- $replacer[] - Array mit den Zuordnungen "Platzhalter" => "Ersetzungsstring"; wird im zweiten Schritt des Parse-Vorgangs gefüllt.
- $iftags[] -
- $fetchedcontent[] - $fetchedcontent['TYPE']==true, wenn die Inhalte für diesen Typ schon geladen wurden. Die Standard-Platzhalter nutzen dieses Array, um die Datenbankanfragen zu minimieren.
- $placeholder[] - speichert die Einstellungen zu den Platzhaltern in der Form:
$placeholder['NAME (TYP)'] = array('OPTION'=>'WERT', ...)
- $_fullmatch - kompletter Platzhalter-String
- $_type - TYP des Platzhalters
- $_name - NAME des Platzhalters
- $_params - PARAMETER des Platzhalters (als String)
- $key = $_name.' ('.$_type.')'
Ablauf
- Die Einstellungen zu den Platzhaltern des Templates mit der id $templates_id werden aus der placeholders-Tabelle geladen und im Array $placeholder[] abgelegt.
- Alle Platzhalter werden aus dem String $template_datei_full extrahiert und in einer Schleife abgearbeitet. Die möglichen Platzhalter stammen aus den Keys des Handlers $hdlr_parser_replacement[].
- Die Variablen $_fullmatch, $_type , $_name, $_params, $key werden definiert.
- Inhalte für den $key werden in das Array $content[$key] übertragen, falls dieses noch nicht vorher geschehen ist. Hierzu wird der Handler $hdlr_parser_content['TYPE'] ausgeführt.
- Gibt es keinen Inhalt für einen $key (ist also $content[$key] nicht definiert), wird der Platzhalter durch einen Leerstring ersetzt.
- Die Parameter aus dem $_params-String werden in ein Array $parameters konvertiert.
- Das Ersetzungs-Array $replacer wird mit dem auszutauschenden Inhalt gefüllt. Hierzu wird der Handler $hdlr_parser_replacement['TYPE'] ausgeführt, der den auszutauschenden Inhalt als $replacement zurückliefern muss.
- Alle if[Not]Set-Tags werden aus $template_datei extrahiert und in einer Schleife abgearbeitet.
- Abhängig vom Platzhalter-Namen wird überprüft, ob in $content[] ein Wert für diesen Namen enthalten ist und je nach Ergebnis das Ersetzungs-Array $iftags[] gefüllt.
- Austausch der Werte aus dem Ersetzung-Array $iftags[] im String $template_datei
- Austausch der Werte aus dem Ersetzung-Array $replacer[] im String $template_datei
Die Schritte 2.2 und 2.5 sind besonders für Modulentwickler interessant. Die für diese Schritte benutzten Handler werden auf der Modulhandler-Seite? beschrieben.