Kleinster PHP Heredoc Template Parser

Die kleinste PHP-Template-Engine bzw kleinste PHP-Template-Parser, der mit Heredoc Syntax arbeitet. Die Heredoc Syntax ist ideal für kleine Prototypen.

Inhalt

PHP Heredoc-Syntax

Der Sprachdialekt PHP ist von Hause aus templatefähig, daher gibt es immer wieder Diskussionen im Web über den Sinn und Unsinn von Template-Engines wie Twig oder Smarty. Ungeachtet dessen möchte ich in diesem Beitrag demonstrieren, wie klein und kompakt ein PHP Template Mechanismus mit Heredoc-Syntax sein kann.

Der Post

Der Post unterteilt sich in einen Kopf- und einen Kopf-Bereich. Im Kopfbereich finden sich einige Informationen zu Titel, Beschreibung und Teaser-Grafik.

...  Oliver Lohse
...  Beschreiben Sie hier den Beitrag, das ist der Anleser mit max. 160 Zeichen
...  17-03-2022
...  ~~~
...  Der vollständige Beitragstext, mit unbegrenzter Anzahl an Zeichen, also der eigentliche Artikel

Code

Der Kopf nimmt drei Metainfos auf und ist vom eigentlichen Inhalt mit drei Bindestrichen getrennt bzw. separiert. Diese Trennung wird für den Parser später wichtig, um die Metainfos vom Inhalt unterscheiden zu können. Wenn Sie mehr Metainfos benötigen, dann tragen Sie einfach weitere ein.

Das HTML-Template

Das Templatefile ist für Demonstrationszwecke ebenfalls recht übersichtlich - auf umständliches CSS wird verzichtet, es kommen Standard-HTML Tags zu Einsatz.

...  <html>
...      <title> {title} </title>
...      <body>
...          <h1> {title} </h1>
...          <hr>
...          <p> {description} </p>
...          <p> {content} </p>
...          <small> {date} </small>
...      </body>
...  </html>

Code

Das Template-File nimmt jeweils einen Template-Token für Titel, Beschreibung, Inhalt und Datum auf. In späteren Ausbaustufen können Sie dies durch eigene Tokens leicht ersetzen und ausgiebig mit CSS, z.B. Bootstrap, elegant formatieren.

Der PHP Template Parser (Heredoc Syntax)

Der folgende Code ist die vollständige Zusammenstellung der Beitragsdatei, des Templates und des Parsers in einem übersichtlichen PHP-Script in Heredoc-Syntax.

001  <?php
002  // Beitrag (Heredoc Syntax)
003  $md = <<<EOD
004  Oliver Lohse
005  Beschreiben Sie hier den Beitrag, das ist der Anleser mit max. 160 Zeichen
006  17-3-2022
007  ~~~
008  Der vollständige Beitragstext, mit unbegrenzter Anzahl an Zeichen, also der eigentliche Artikel
009  EOD;
010  // Template (Heredoc Syntax)
011  $template = <<<EOD
012  <html>
013      <title>{title}</title>
014      <body>
015          <h1>{title}</h1>
016          <hr>
017          <p>{description}</p>
018          <p>{content}</p>
019          <small>{date}</small>
020      </body>
021  </html>
022  EOD;
023  // Parser
024  $upper_and_lower_section   = explode('~~~', $md);
025  $header_section = explode("\n", trim($upper_and_lower_section[0]));
026  
027  $header_section[] = $upper_and_lower_section[1];
028  $templatetarget  = array(
029      '{title}',
030      '{description}',
031      '{date}',
032      '{content}'
033  );
034  
035  $template = str_replace($templatetarget, $header_section, $template);
036  echo $template;
037  
038  ?>

Code

Zum besseren Verständnis, einige wichtige Codezeilen Erläutert.

  • Zeile 003 - Die Beitragsdatei kann über die Variable $md angesprochen werden.
  • Zeile 011 - Die Templatedate wird über die Variable $template angesprochen.
  • Zeile 024 - Trennt den Beitrag anhand des −−− in einen oberen und unteren Beitragsteil auf und weist das Ergebnis dem Array $upper_and_lower_section zu. Der Slot [0] enthält den oberen und Slot [1] den unteren Teil.
  • Zeile 025 - Trennt die einzelnen Einträge im Metabereich anhand RETURN in ein Array auf. Der Slot [0] enthält den Titel, Slot [1] die Beschreibung und Slot [2] das Datum.
  • Zeile 027 - fügt beide Arrays (oben und unten) zusammen
  • Zeile 028 - ein Array mit Template-Tokens wird aufgebaut, welches die Ersetzungen aufnimmt
  • Zeile 035 - ersetzt das Template-Array (Tokens) mit dem dem Inhalts-Array
  • Zeile 036 - gibt das HTML-Formular mit den ersetzten Tokens am Browser aus.

Hinweis: Die Reihenfolge der Metainformationen des Beitrags, muss der Reihenfolge des Arrays $templatetarget entsprechen. Der {content} wird immer am Schluss angehägt, was durch Zeile 027 verursacht wird.

Fazit

Zugegeben, der kleine Template-Parser ist nicht sehr praktikabel, da er keine externen Dateien läd, er läd weder eine Beitragsdatei, noch eine Template-Datei. Dennoch kann dies einfach angepasst werden und nicht zuletzt soll der Code ein Beispiel für das Parsing mit PHP-Mitteln sein.

Tipp: Die so genannte Heredoc-Syntax ist ideal dafür geeignet, mal eben schnell einen Prototypen zu erstellen, der später externe Dateien verarbeiten soll, diese aber zu Demonstrationszwecken intern läd. In späteren Ausbaustufen können diese dann extern ausgelagert werden und mittels Dateizugriff gelesen werden.

Hinweis: Die Metainformationen in diesem Beispiel müssen immer eine festgelegte Reihenfolge haben, ändern Sie diese, müssen Sie dies auch im Code anpassen. In solchen Fällen sind andere Formate wie YAML oder JSON besser geeignet, da diese unabhängig von der Reihenfolge der Keys sind.


FlightCMS
2024-01-28
Beitrag,Sortieren,Datum,Titel,ASC,DESC
post
17

Ein eigenes CMS programmieren I.

In diesem mehrteiligen Workshop entwickeln Sie ein eigenes kleines Content Management System mit einer Flatfile Datenbank und Markdown Parser - inkl. Download.

Ein eigenes CMS programmieren II.

In der zweiten Hälfte des Workshops, geht es darum, das kleine CMS noch weiter auszubauen und vollwertig zu machen. Sie binden die Template-Engine Smarty ein.