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.

  Download Heredoc Parser
CMS Workbench Bludit Pico WordPress Smarty Twig Automad PHP
WordPress 5 Das Praxisbuch

WordPress 5 Das Praxisbuch - WordPress ist weltweit das beliebteste CMS-Tool. Dieses Buch führt Sie in die Welt der Blogs ein, ohne Programmierkenntnisse vorauszusetzen. Verschiedene Arten von Blogs, passende Themes sowie hilfreiche Plugins werden vorgestellt, das Erstellen von Beiträgen und der Umgang mit Bildern beschrieben. Sie erfahren wichtige Details zu Kommentaren, Newslettern, Abonnenten sowie zum Administrationsbereich. Wertvolle Tipps zur Suchmaschinenoptimierung runden das Werk ab. Der Titel ist für Anfänger und Fortgeschrittene zum Lernen und Nachschlagen geeignet. Ein Buch aus der Praxis für die Praxis. (*

kaufen...
Inhaltsverzeichnis
  •   Was ist Heredoc
  •   Der Content
  •   Das HTML-Template
  •   Der Parser
  •   Der vollständige Code
  •   Weiterführende Informationen

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.


Heredoc Parser Template PHP CMS EOD EOF
12.05.2022
Oliver Lohse

Es wurden noch keine Kommentare verfasst, sei der erste!

Weitere passende Artikel

_____

Zufällige Affiliate-Links auch ohne externe Plugins mit Hilfe von YAML und der Templatesprache Twig in Pico CMS realisieren, das ist sogar wirklich sehr einfach.
Erstellen Sie im CMS Automad eigene Templates, dann sollten Sie einen Blick auf diese Ordner werfen, denn sie sind maßgeblich für das Template wichtig.
So können Sie das freie Feld TEMPLATE in den Beitragseinstellungen verwenden. Fragen Sie es mit dem folgenden Coding des Beitrags ab und steuern das Templating
Möchten Sie den Backend-Editor des Autors oder Admin individuell anpassen? Dann finden Sie hier den richtigen Pfad zur Programm-Source edit-content.php.
So steuern Sie die Templatevorgabe in Beiträgen mit dem CMS Bludit. Sie können den Tamplatenamen bei der Erstellung von Beiträgen im Backend angeben.
Brandings der Entwickler sind natürlich eine gute Sache, jedoch dürfen sie auch abgestellt werden. Wie das für das Bludit Theme DEVTHEME geht, lesen Sie hier
Im Bludit Theme DEVTHEME wird das Label "latest Post" angezeigt. Manchmal kann das störend sein. Entfernen Sie das Label doch einfach in der home.php
So aktivieren Sie den integrierten und deutlich einfacheren Markdown-Parser des Bludit CMS und schalten die visuellen Editoren TinyMCE und EasyMDE ab.
Mit diesem Coding können Sie verschiedene Templates starten, jenachdem ob der Leser eine Seite, Kategorie, home oder Tag wählt. Bludit kennt vier Seiten-Typen
Wenn Sie Bludit-Themes und Templates entwickeln dann können Sie dem Leser die Möglichket geben das Theme live umzuschalten für den ersten Eindruck.
Das Bludit Theme TYPERITE ist vielversprechend, da es ein Optimum an Customizing ermöglicht. Entfernen Sie das Branding aus dem Footer - das ist erlaubt.
Flatfile CMS erfreuen sich sehr großer Beliebtheit und bieten zudem sehr viele Vorteile die Sie so kaum von den Platzhirschen am Markt erwarten dürfen.
Meine ganz persönliche Empfehlung für ein CMS aufgrund meiner Erfahrungen als Langjähriger Autor und Opfer vieler Hacker-Angriffe auf meine Seiten.
Das GRAV CMS Admin Backend muss separat heruntergeladen und installiert werden, erst dann bietet GRAV ein bequemes Backend für den Admin und die Redakteure.

Dipper fast YAML Parser - YAML Files lesen und schreiben - yaml Flat File CMS full YAML driven headless Flat File CMS

YAML • YML • Dipper • PHP • lesen • schreiben • Git • GitHub • static
Dipper ist der kleinste YAML-Parser mit dem YAML Dateien gelesen und geschrieben werden können. Ein PHP-Beispiel zum lesen und schreiben von YAML mit Dipper.

Download - Plugins -

Download • kostenlos • Plugin • Template • Theme
Kostenlose Plugins und Templates für Bludit, Pico CMS, WonderCMS, GetSimple, WordPress und co, zum kostenlosen Download
Legen Sie ein Array in der Sprachdatei de_DE.json des Templates an und greifen aus dem Template auf einzelne Key Value Paare zu um Affiliate Links zu erzeugen
Teil 1 - Der Einstieg in das Templating mit dem freien CMS GetSimple - der Name ist Programm, denn dieses CMS ist klar und leicht beherrschbar strukturiert.
Teil 3 - Ein GetSimple Template erstellen. In Verbindung mit dem freien und beliebten CSS-Framework Bootstrap eine leichte Sache auf dem Weg zum eigenen Blog.
Dieser Beitrag zeigt ein einfaches Demo Template für die JavaScript basierte Template Engine Handlebars. Dieses Template ist sogar offline funktionsfähig.
Das ist die kleinste PHP Template-Engine, bzw. das kleinste PHP-CMS der Welt, erstellt mit der Programmiersprache PHP und 7 Zeilen Code.
Greifen Sie mit der Methode User() auf Attribute des angemeldeten und registrierten Benutzers zu und zeigen Namen, Avatare oder Kontaktdaten unter Beiträgen an
Erarbeiten Sie als Prototypen ein reines HTML-Template das Ihnen zusagt. HTML-Templates sind schneller entwickelt und müssen weniger Restriktionen einhalten.
Die Formularverarbeitung durch PHP ist der beliebteste Standard im Web. Nutzen Sie ein intelligentes Design, können Sie sich viel Arbeit und Stress ersparen.
Das ist die kleinste PHP-Template-Engine bzw der kleinste Template-Parser in PHP, der mit Heredoc Syntax arbeitet. Die Heredoc Syntax ist ideal für kleine Prototypen.
Mit der Markdown Syntax können Sie auch einen klickbaren Bildlink im Text eintragen. Es ist eine Schachtelung verschiedener bekannter Markdown Format-Befehle.
Möchten Sie in Smarty Templates Bedingungen abfragen, dann können Sie den IF Befehl des Smarty Parsers nutzen, um die Ausgabe des Templates zu steuern.
In welcher Schreibweise sollten Sie CMS Templates erstellen? Gemischt HTML und PHP oder doch lieber waschechtes PHP? Dieser Beitrag erleichtert den Einstieg.
Werden Sie zum Template-Entwickler und beginnen mit leichten Arbeiten, portieren Sie Ihre Templates später in die großen CMS wie WordPress, Bludit oder Joomla
So einfach ziehen Sie mit einer Typemill CMS Webseite auf eine neue Domain um, es sind drei einfache Schritte die Sie kinderleicht machen können.
Was ist CoastCMS? Coast CMS ist ein ContentManagementSystem, das etwas anders funktioniert als die meisten anderen CMS: Es wird in bereits bestehende, statische HTML-Websites integriert und macht diese editierbar
Die besten Content-Management-Systeme im Vergleich: Alles was ihr über WordPress, Joomla!, Drupal, TYPO3 und Co. wissen müsst. Jetzt Vergleich ansehen.
GRAV CMS ist ein kostenloses Content Management System (kurz CMS), welches ohne Datenbank auskommt. Der Webinhalt wird in reinen ASCII-Files gespeichert.
yamlCMS ist mein Beitrag und meine eigene Vorstellung an eine sichere Webseite auf Basis eines Flat File CMS mit lesbarer Datenbankstruktur ohne 'Firlefanz'.
Eine häufige Frage in vielen Foren, daher eine kleine Empfehlung zur Auswahl des richtigen CMS, denn oft reicht ein Template-Parser wie Twig oder Smarty aus!
Mit diesem Trick legen Sie neue Datenbank-Felder in der JSON-Datenbank des WonderCMS vollkommen automatisiert an - mit nur einer Codezeile im WonderCMS Theme.
Das WordPress Plugin steht im Verdacht Malware zu enthalten. In unterschiedlichen Foren im Netzt sind dazu widersprüchliche Infos zu finden - es ist abzuwarten
WordPress Easy - Redaktion

About me

Mein Name ist Oliver Lohse. Ich bin diplomierter Wirtschafts-Informatiker und Organisations-Programmierer in verschiedenen Programmier-Sprachen und Markup-Dialekten, z.B. Java, JEE, COBOL, PHP, Python, MySQL, HTML, CSS, ANSI C, Lisp, Rexx, JavaScript, Scheme, ActionScript 2.0, Maschinensprache, Assembler und JCL. Seit mehr als 24 Jahren arbeite ich als Entwickler in einem großen Softwareunternehmen für Versicherungen in Hannover Niedersachsen und seit etwa 37 Jahren im EDV-Sektor mit wechselnden Aufgaben.