SHAFFEL
-- Die freie und liebliche Template-Engine für PHP
shaffel
ist eine kostenlose Open-Source Template-Engine für PHP. Diese soll möglichst einfach einzubinden und zu benutzen sein. Um shaffel
zu benutzen braucht man nur eine moderne PHP-Installation und einen Webserver, über den die Webseite verfügbar sein soll.
Die Installation von shaffel
ist extrem einfach. Dazu lädt man einfach die letzte Version von shaffel
herunter und kopiert die engine.php
in das PHP-Bibliotheken-Verzeichnis.
Dann bindet man diese Datei über den PHP-require
-Befehl ein und ...
... FERTIG
Um ein Template zu laden, muss mindestens der folgende Boilerplate-Code verwendet werden:
<?php
require "pfad/zur/shaffel.php";
$template = new Engine();
$template->load("pfad/zum/template.shaffel");
$template->show();
?>
Dabei sind die beiden Pfade entsprechend zu setzen.
Die Template-Syntax ist relativ einfach. Sie besteht aus verschiedenen 'Template-Expressions', die jeweils in eckige Klammern ([]
) gesetzt werden.
Es gibt folgende Befehle:
Befehl | Syntax | Erklärung |
---|---|---|
Variable ausgeben | [$variablenname] |
Gibt die Variable mit dem Namen variablenname aus |
Variable filtern | ```[$variablenname | filter+filter]``` |
Master-Template-Import | [@master "filename"] |
Macht das Template in der Datei filename (relativ zum aktuellen Template) zum Haupttemplate. Darf nur einmal pro Datei vorkommen |
Platzhaler erstellen | [@area "name"] |
Erstellt einen Platzhalter mit dem Namen name |
Platzhalter füllen | [@extend "name"]...[/@extend] |
Füllt den Platzhalter name mit ... |
Bedingungen | [@if(bedingung1)] ... [@elseif(bedingung2)] ... [@else] ... [/@if] |
Zeigt Text abhängig von den Bedingungen an |
Schleife über eine Liste | [@each($liste -> $eintrag)] ... [/@each] |
Wiederholt ... für jedes Element von $liste . Das aktuelle Element ist unter $eintrag verfügbar. |
Wenn eine Liste in einer Variable gespeichert ist, erhält man ein spezielles Element durch den .
-Operator. Dabei ist zu beachten, dass Listen ab 0 indiziert werden:
<!--
Gibt das 2. Element der Liste aus (Index=1)
-->
[$liste.1]
<!--
Gibt das Element mit dem Index `baum` aus
-->
[$liste.baum]
Um Inhalte zum Template hinzuzufügen, nutzt man das Engine
-Objekt. Dieses bietet einem insgesamt zwei Möglichkeiten, die Ausgabe des Templates zu beeinflussen.
Variablen können mithilfe der Funktion
$template->set("name", wert);
gesetzt werden. Dabei kann wert
vom Typ string
, int
oder boolean
sein oder aus einem Array bestehen, der nur solche Werte enthält.
Wenn eine bereits vorhandene Variable erneut gesetzt werden soll, wird der ursprüngliche Wert überschrieben.
Standardmäßig gibt es nur zwei Filter: html
zum Entschärfen von HTML und url
um Werte URL-sicher zu machen.
Diesse Filter können vom Backend-Programmierer überschrieben werden. Dazu muss dieser die eine Kindklasse der Engine
-Klasse erstellen, in dieser eine on_init
-Methode definieren. In dieser wird dann der Liste $this->filters
ein Element mit einem Schlüssel, der dem Namen entspricht, der im Template verwendet werden soll, und einer Funktion, die aufgerufen werden soll, hinzugefügt.
Wollte man zum Beispiel einen italic
-Filter hinzufügen, der einen Text in Kursivschrift setzt, geht man so vor:
function filter_italic($val) {
return "<i>".$val."</i>";
}
class CustomEngine extends Engine
{
protected function on_init() {
$this->filters["italic"] = 'filter_italic';
}
}
$page = new CustomEngine();
// ...
Diesen Filter würde man mit folgendem Template-Code aufrufen:
[$variable|italic]
In der Version 1.0 hat shaffel
folgende Features:
- Templates laden und ausgeben
- Template-Variablen ausfüllen
- Im Template: über Listen iterieren
- Im Template: If-Elseif-Else-Blöcke
- Master-Template und Platzhalter definieren
Natürlich gibt es noch ein paar Erweiterungsmöglichkeiten:
- Template-Plugins (Syntax:
[[pluginname schluessel=wert]]
) einbinden - Kommentare
- Template-Include (An die aktuelle Position)
- HTML Minifier ...