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

  1. Die Einstellungen zu den Platzhaltern des Templates mit der id $templates_id werden aus der placeholders-Tabelle geladen und im Array $placeholder[] abgelegt.
  2. 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[].
    1. Die Variablen $_fullmatch, $_type , $_name, $_params, $key werden definiert.
    2. 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.
    3. Gibt es keinen Inhalt für einen $key (ist also $content[$key] nicht definiert), wird der Platzhalter durch einen Leerstring ersetzt.
    4. Die Parameter aus dem $_params-String werden in ein Array $parameters konvertiert.
    5. 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.
  3. Alle if[Not]Set-Tags werden aus $template_datei extrahiert und in einer Schleife abgearbeitet.
    1. 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.
  4. Austausch der Werte aus dem Ersetzung-Array $iftags[] im String $template_datei
  5. 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.