PHP-Template Engine in einer Zeile

Auf der Suche nach brauchbaren Template-Engines für PHP, die ohne zu großen Overhead auskommen und eine brauchbare Performance bieten können, bin ich über ein sehr smartes Stück Code gestolpert, das mit Sicherheit für viele, insbesondere für kleine Anwendungen mehr als ausreicht. Die Template „Engine“ besteht aus einer Zeile:

print preg_replace("/\{([^\{]{1,100}?)\}/e","$$1",file_get_contents("template.tpl"));

Die Datei template.tpl sieht wie folgt aus:

{header}

{text}

Im PHP-Script setzt man jetzt die Variablen analog zu den Template-Platzhaltern:

$title="Example page";
$header="My Examples";
$text="See the placeholders replaced?";

Ich gebe zu: Man kann sich darüber streiten, ob man einer Template-Engine (und nichts anderes ist PHP ja im Prinzip) noch eine weitere Template-Engine überstülpen muss… Grundsätzlich ist es aber mindestens aus Gründen der Übersichtlichkeit sinnvoll, Logik und Darstellung zu trennen. Da kann der Einzeiler insbesondere bei kleinen Projekten sehr hilfreich sein, ohne dass man gleich den Dinosaurier Smarty oder ähnliche Vertreter nutzen muss.

WordPress-Shortcodes

In WordPress 2.5 wurden sogenannte Shortcodes eingeführt. Das sind Kürzel, die es erlauben, eine php-Funktion aufzurufen, indem man etwas wie [shortcode] (also einen bestimmten Text in eckigen Klammern) im Artikeltext eingibt. Das kann einem helfen, bei bestimmten immer wieder auftauchenden Aufgaben Zeit zu sparen oder coole Features mit knappem Code einzubauen.

Um einen Shortcode zu erstellen, müssen wir php beherrschen, deswegen an dieser Stelle schonmal eine Entschuldigung an all jene, die das nicht können. WordPress-Installationen besitzen eine Datei namens functions.php. Die öffnen wir und können ihr (wer hätte das gedacht?) Funktionen hinzufügen. Dann tun wir das doch…

function newshortcode() {
    return 'Ich bin ein neuer Shortcode!';
}

So eine Datei functions.php gibt es auch noch in jedem Theme (Sollte es zumindest geben. Wenn nicht: Einfach anlegen). In der können wir nun etwas hinzufügen wie:

add_shortcode('tescht', 'newshortcode');

Ich definiere hiermit also ein Kürzel, um die Funktion aufzurufen, die soeben erstellt worden ist. Wenn man jetzt im Editor im HTML-Modus Folgendes eingibt:

[tescht]

Dann erscheint im Artikel statt des Kürzels [tescht]: Ich bin ein neuer Shortcode!

Man kann auf Anhieb sehen, wie mächtig diese Möglichkeit ist, denn in der ursprünglichen Funktion kann man selbstverständlich alles realisieren, was in php geht.