Ein Heredoc-Parser und Mini CMS mit PHP zum Templating erstellt

Dieser Beitrag zeigt einen Heredoc Template Parser und mini CMS, erstellt in PHP, unter Nutzung der Heredoc-Syntax. Content, Template und Parser in einer Datei.

Juli 5, 2023 - Lesezeit: 6 Minuten

Inhalt

Was ist Heredoc

Ein Heredoc, auch here document (von englisch, wörtlich hier dokument) genannt, ist ein Sprachkonzept der Informatik zur Spezifikation eines Zeichenfolgenliterals in Kommandozeileninterpretern wie beispielsweise der bash, Windows PowerShell und der Bourne-Shell sowie in Programmiersprachen wie etwa Perl, PHP, Python und Ruby. Der Bezeichnung entsprechend dienen Heredocs zur Definition von Textabschnitten. Im Unterschied zu herkömmlichen Stringdefinitionen werden enthaltene Zeilenumbrüche sowie Einzüge und viele Sonderzeichen im Text bewahrt. Einige Sprachen ermöglichen auch die Interpolation von Variablen oder auch Programmcode innerhalb der Zeichenfolge.

Der Content

Der serielle Content unterteilt in einzelne Sektionen die der Reihe nach vom Parser in die {#}-Tokens des Templates eingesetzt werden. Die Bereiche des Contents werden mit Hilfe sonst unbenutzer Zeichenkombinationen unterteilt, etwa so:

$data = <<<EOD
Titel 1
---
Das ist der Text zu Titel 1
---
Titel 2
---
Das ist der zweite Text zum zweiten Titel
...
...
EOD;

Das HTML-Template

Das vollständige HTML-Template ist mit {#}-Token angereichert, an den Stellen, an denen Ersetzungen aus dem Content in das Template erfolgen sollen, etwa so:

...
<h1>{#}</h1>
<p class="lead">{#}</p>
...

Alle mit {#} gekennzeichneten Stellen, werden vom Parser mit je einem Baustein aus dem Content-Block ersetzt. Für das Template ist es nicht die Tokens, wie in anderen Parsern erforderlich, zu benennen.

Der Parser

Der Parser des kleinen Heredoc CMS übernimmt die Aufgabe den Content in kleine Häppchen aufzuteilen (explode), die nicht nummerierten {#}-Tokens in nummerierte Tokens umzuwandeln und dann den Text mittels str_replace() im Template zu ersetzen.

...
$data                  = explode("---", trim($data));   // teilt den Content in einzelne Blöcke auf
$template              = explode('{#}', $template);     // zerlegt das Template anhand der {#}-Tokens
$token_count           = 0;                             // zählt die {#}-Tokens
$template_order        = '';                            // nimmt das neue Template mit {#1}, {#2}... auf
$template_target_array = array();                       // nimmt das Ziel-Array {#1}, {#2},... auf

foreach ($template as $value) {
    $template_order .= $value.'{#'.$token_count.'}';          // konkatiniert string{#1}string{#2}string...
    $template_target_array[] = '{#'.$token_count.'}';         // erzeugt Array Inhalte {#1}, {#2},...
    $token_count = $token_count+1;
}

$template = str_replace($template_target_array, $data, $template_order);
echo $template;
...

Der vollständige Code

Sie sehen unten den vollständigen CMS und PHP-Template Parser in Heredoc-Syntax. Zu optisch schöneren Darstellung, habe ich das CSS-Framework Bootstrap in Zeile 042 eingehängt.

001  <?php
002  
003  //-----------------------------------------------------------------------------
004  // Der serielle Content unterteilt in einzelne  Sektionen die der Reihe nach in 
005  // die {#}-Tokens des Templates eingesetzt werden
006  //-----------------------------------------------------------------------------
007  
008  $data = <<<EOD
009  HeredocParser - home
010  ---
011  HeredocParser
012  ---
013  Eigenständig lauffähiger Heredoc-Template Parser in PHP
014  ---
015  Content
016  ---
017  Der Content ist Bestandteil der PHP-Datei und liegt in der Heredoc-Syntax vor.
018  Der Content wird dabei mit drei Bindestrichen in Blöcke unterteilt. Alternativ
019  können andere Platzhalter genutzt werden.
020  ---
021  HTML Template
022  ---
023  Das HTML-Template befindet sich im zweiten Teil der PHP-Datei ebenfalls in der
024  Heredoc Syntax verfasst. Das Template ist mit {#} Tokens angereichert, in denen
025  der spätere Content eingesetzt wird.
026  ---
027  Tokens
028  ---
029  Die {#}-Tokens stellen alle Stellen im Template dar, in denen Content der Reihe
030  nach eingesetzt werden soll. Der Parser wandelt alle normalen {#}-Tokens in
031  nummerierte {#1}, {#2},... um.
032  EOD;
033  
034  //-----------------------------------------------------------------------------
035  // Das vollständige HTML-Template mit den {#}-Token
036  //-----------------------------------------------------------------------------
037  
038  $template = <<<EOD
039  <!doctype html>
040  <html lang="de">
041      <head>
042          <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
043          <title>{#}</title>
044      </head>
045      <body>
046  
047          <div class="container-fluid py-5 bg-secondary text-light shadow">
048              <div class="container">
049                  <h1>{#}</h1>
050                  <p class="lead">{#}</p>
051              </div>
052          </div>
053  
054          <div class="container py-5">
055              <div class="row">
056 <div class="col-sm"> <h2>{#}</h2> <p>{#}</p> </div>
057 <div class="col-sm"> <h2>{#}</h2> <p>{#}</p> </div>
058 <div class="col-sm"> <h2>{#}</h2> <p>{#}</p> </div>
059 </div> 060 <div class="row">
061 <div class="col-sm"> <h2>{#}</h2> <p>{#}</p> </div>
062 <div class="col-sm"> <h2>{#}</h2> <p>{#}</p> </div>
063 <div class="col-sm"> <h2>{#}</h2> <p>{#}</p> </div>
064 </div> 065 </div> 066 067 </body> 068 </html> 069 EOD; 070 071 //----------------------------------------------------------------------------- 072 // Der Parser und Renderer ersetzt alle {#}-Tokens durch die nummerierten {#1}, 073 // {#2},... Tokens und fügt den Content der Reihe nach in jeden Token ein. 074 //----------------------------------------------------------------------------- 075 076 $data = explode("---", trim($data)); // teilt den Content in einzelne Blöcke auf 077 $template = explode('{#}', $template); // zerlegt das Template anhand der {#}-Tokens 078 $token_count = 0; // zählt die {#}-Tokens 079 $template_order = ''; // nimmt das neue Template mit {#1}, {#2}... auf 080 $template_target_array = array(); // nimmt das Ziel-Array {#1}, {#2},... auf 081 082 foreach ($template as $value) { 083 $template_order .= $value.'{#'.$token_count.'}'; // konkatiniert string{#1}string{#2}string... 084 $template_target_array[] = '{#'.$token_count.'}'; // erzeugt Array Inhalte {#1}, {#2},... 085 $token_count = $token_count+1; 086 } 087 088 $template = str_replace($template_target_array, $data, $template_order); 089 echo $template; 090 ?>

Die index.php kann wie gewohnt auf dem Webserver abgelegt und via URL gestartet werden. Sie erhalten die Anzeige eine Webseite mit Header und drei Spalten-Artikel.

Weiterführende Informationen

Dieser kleinste Heredoc Template-Parser und PHP CMS ist ideal für kleine und schnelle Interventionen oder das Prototyping im Bereich Webdesign. Alles liegt innerhalb einer transportablen und kompakten Datei und kann easy angepasst werden. Das Templating ist überaus simpel, da auf konkrete Template-Token, wie sie beispielsweise aus Twig oder Smarty bekannt sind, verzichtet werden kann. Zudem ist dieser Parser überaus sicher!

Das Skript erhebt nicht den Anspruch ein vollständiger und ausgereifter CMS Parser zu sein, es soll lediglich einige Sachverhalte darstellen und Denkanstöße liefern - mehr nicht.

Schlagworte:

Beiträge in der Kategorie "PHP":

Wie können Sie Programm Kommentare in json Dateien und Files vornehmen? Gibt es einen Kommentar-Token oder einen anderen Trick um in json zu kommentieren?

Sie können mit PHP ein Verzeichnis mit Ordnern und Dateien einlesen und anzeigen. Der Beitrag zeigt ein kurzes Codesegment mit dem opendir() Befehl aus PHP.

Mit diesem Beitrag erstellen Sie (oder als Download) eine unabhängige Affiliate Datenbank, die Sie in jedem CMS, jeder Webseite oder jedem Blog nutzen können.

Die Formularverarbeitung durch PHP ist der beliebteste Standard im Web. Nutzen Sie ein intelligentes Design, können Sie sich viel Arbeit und Stress ersparen.

Möchten Sie einen Log-Mechanismus entwickeln den Sie leicht in jedes PICO Template einbinden können, dann ist JavaScript und PHP ideal dafür.

Das Auflösen mehrdimensionaler Arrays ist in PHP sehr sperrig, daher in diesem Beitrag ein einfaches diskretes Design-Pattern, für die Auflösung von Arrays

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

Mit diesem kleinen Script realisieren Sie einen Mailversandt mit Standard PHP und einer Sperrliste die den Versand abbricht wenn Sperrworte enthalten sind.

In diesem Beitrag können Sie eine kleine FlatFile Projekt Datenbank herunterladen. Eine Beispielimplementierung in Anlehnung an die FlatFileDB von H.Wiledal

Sie möchten einen alten Artikel aus dem Google-Index entfernen dann sollten Sie vorher diesen Beitrag lesen

Dieser Beitrag zeigt einen Heredoc Template Parser und mini CMS, erstellt in PHP, unter Nutzung der Heredoc-Syntax. Content, Template und Parser in einer Datei.

Mit diesem PHP Script lesen Sie eine Mail in Ihrem Postfach, werten den Inhalt mittels PHP aus und löschen im Anschluss die Mail aus dem Posteingang mit PHP.

Möchten Sie große Mengen Content verwalten und systematisch organisieren oder entwickeln ein eigenes Flatfile CMS, dann hilft die Flatfile DB von Hugo Wiledal

Das ist die kleinste PHP Template-Engine, bzw. das kleinste PHP-CMS der Welt, erstellt mit der Programmiersprache PHP und 7 Zeilen Code.

Beiträge mit PHP-Mail an die Seite senden und veröffentlichen

Kategorien

Automad

Das kostenlose Flat File CMS Automad bietet bereits nach der Installation auf dem Server das beste Layout unter allen CMS am Markt.

Bludit

Das kostenlose Flatfile CMS Bludit ist das beliebteste Content Management System, das dem großen WordPress sehr nahe kommt, jedoch deutlich mehr Sicherheit bietet.

CMS

In dieser Rubrik geht es um übergreifenden Themen aus dem Bereich der Content Management Systeme.

Coast

Coast ist ein CMS aus deutscher Feder und ist mit einem exzellenten HTML/PHP Frontend-Editor zu vergleichen, die Daten werden direkt in der HTML-Datei gespeichert.

GetSimple

Das kostenlose Content Management System GetSimple verspricht genau das, was der Name andeutet, ein stabiles Flat File CMS auf der Basis von XML-Dateien.

GRAV

Das kostenlose Content Management System GRAV gehört zu den komplexesten CMS, da es den größten Funktionsumfang mitbringt.

Handlebars.JS

Handlebars.js ist eine kostenlose JavaScript Template-Engine mit der einfache Webseiten oder Prototypen leicht und schnell erzeugt werden können.

htaccess

Die .htaccess ist die wohl wichtigste und mächtigste Datei, über die der Server seinen Umgang mit den Daten und Besuchern steuert.

Java

Java ist die strategische Programmiersprache für verteilte Anwendungen im Internet oder auch in der Client-Server Architektur und sogar auf dem Host.

Monstra

Das CMS Monstra ist ein überaus gelungenes und sauber entwickeltes CMS mit Admin-Backend und Flat File Datenbank.

PHP

PHP ist die strategische Programmiersprache des Internets, mit PHP geht alles und ohne PHP nichts! Allerdings ist PHP nicht auf lokalen Client-Umgebungen verbreitet (aber möglich).

Pico

Das CMS Pico ist derzeit das ausgereifteste und einfachste headless CMS für den Einsatz großer Mengen an MarkDown-Files (Content).

Smarty

Smarty ist eine Template-Engine auf Basis der Programmiersprache PHP und ist in der Lage HTML-Vorlagen (Templates) dynamisch mit Content zu versorgen.

Typemill

Typemill ist zunächst ein ganz normales Flat File CMS, entfaltet jedoch sein wahres Potenzial mit einigen besonderen Plugins, die es zum kraftvollen Publishing-Tool macht.

WonderCMS

WonderCMS ist das mit Abstand kleinste CMS das es derzeit kostenlos gibt. WonderCMS kommt mit einem PHP-Script und einer JSON-Datenbank aus und bietet ein Backend.

WordPress

Das datenbankbasierte Content Management System WordPress ist das beliebteste CMS und hält die meisten Installationen - ist allerdings auch das am meisten attackierte System.

Derzeit sind noch keine passenden Beiträge vorhanden.