Letzte Kommentare

PlayJaps: Ïðèâåò Æäåì íà ñòîïî÷êó :) Êëàññíî! KAPOW…

Klaus: Guten Tag, ich habe Ihre Seite über die Google-Suche gefunden, weil…

Michael: Hallo Josef, Wo du die gezeigte Funktion hinein kopierst ist ziemlich…

Josef: Guten Tag! Ich habe mich mit der PHP-Template-Thematik noch nie beschäftigt.…

L3o: Danke, das rettet mir den Tag, ich schreibe nämlich im Moment gerade selbst…

Zum mitnehmen

Für Programmierer:

Für Anwender:

Minimalistische Template-Engine für PHP

Tags: php, script, template 18 Kommentare

13 Zeilen PHP-Code kommen natürlich nie an Giganten wie Smarty heran, aber ich bin ja immer für einfache und flexible Lösungen und das ist diese Template-Engine sicher.

Die Funktion

<?php
/**
 * Render template files
 *
 * @param string $template
 *  Name of the template file
 * @param array $variables
 *  Array of alle variables to set availalbe in the template.
 *  Key = name; Value = content
 * @copyright
 *  Michael Bertsch (www.michaelbertsch.eu)
 */
function render($template$variables = array()) {
    if(
file_exists('templates/'$template .'.tpl.php')) {
        
// Set variables available
        
if(count($variables)) {
            
extract($variablesEXTR_SKIP);
        }
        
// Start output buffering
        
ob_start();
        include 
'templates/'$template .'.tpl.php';
        
$contents ob_get_contents();
        
ob_end_clean();
        return 
$contents;
    }
}
?>

Die Funktion setzt einen Ordner "templates" voraus, in dem alle Template-Dateien mit der Endung ".tpl.php" abgelegt sind. Also z.B. templates/blog.tpl.php.
Wenn das Template nun existiert werden die Variablen "entpackt", das Template geladen und per output buffering als string zurück gegeben.

Ein Beispiel

Vorab: <?= $var ?> ist nur ein anderer/kürzerer Syntax für <? echo $var ?>.

Das Template sieht folgendermaßen aus:
<h3><?= $title ?></h3>
<div><?= $content ?></div>

Und gerendert wird das dann so:
<?php
$content 
render('test', array(
        
'title' => 'hello world!',
        
'content' => 'Lorem ipsum dolor sit amet...')
    );
?>

Mit statischem Text macht das ganze natürlich nur wenig Sinn.

Beispiel zum Download

Ich habe aus dem ganzen Code ein Beispielskript gebaut, welches die Anwendung (auch zusammen mit MySQL) klar machen soll:

Download

Kommentare

Daniel am 05. Juni 2007, 17:54 Uhr

Das deine Engine nicht in Smarty herankommen kann stimmt zwar, dennoch kann ich vieles was mit Smarty möglich ist auch in deiner Engine machen. Für Schleifen, Abfragen (if) etc. kann ich ja ganz einfach die PHP-Funktionen verwenden :)

Was ich aber eigentlich sagen wollte: Tolles Script ;)

Internetagentur am 19. März 2009, 14:44 Uhr

Wozu eigentlich eine Template-Engine wie Smarty? An diesem Snippet sieht man mal wieder, dass PHP bereits eine Template Engine ist.

Phil am 28. März 2009, 18:56 Uhr

Hallo,
ich bin der Meinung dass man :

$contents = ob_get_contents(); ob_end_clean(); return $contents;

wegglassen könnte, denn es geht auch ohne! Wenn die 3 Zeilen doch noch irgendeinen Zweck haben lasst es mich wissen.

Ansonsten sehr nettes Tutorial!

Michael am 29. März 2009, 21:35 Uhr

Hallo Phil!

Danke für dein Feedback!
Naja, nicht ganz. Wenn du diese drei Zeilen weg löscht, wird die Template Datei direkt ausgegeben. Mit diesen drei Zeilen wird die Ausgabe in $contents zwischengespeichert und als string zurückgegeben. Somit kann der string später noch weiter bearbeitet werden ohne ihn direkt auszugeben.

Wenn du mehr dazu wissen willst, google am besten mal nach "output buffering".

Schöne Grüße
Michael

Georg am 20. August 2009, 02:19 Uhr

Hat mir wirklich sehr geholfen, vielen dank!
Hab das ganze mal gestumbled, vllt bringt dir das ein bisschen traffic =)

Alec am 02. Oktober 2009, 16:54 Uhr

Hallo Michael!

Das was du dir da ausgedacht hast, ist ein wirklich gute Idee, ich finde das mit dem Copyright jedoch sehr seltsam.

Ich versteh ertens nicht wie du opensource Software nutzt, hinter denen ja auch eine gewisse Philosophie steht udn dann so handelst und zweitens kannst du doch auf Logik garkein Copyright erheben oder nicht? Denn jede/r Andere könnte sich doch theoretisch genau so etwas auch ausdenken.

Das ist doch irgendwie seltsam...

Würd mich freuen, wenn du dazu mal etwas sagst.

Liebe Grüße

Alec

Michael am 02. Oktober 2009, 18:40 Uhr

Hallo Alec,

naja man könnte soweit ich weiß "Logik" patentieren lassen, aber das hier ist was anderes. Meine Codesnippets kannst du verwenden wie du willst. Du kannst sie verändern, kopieren, den Kommentar am Anfang löschen, was auch immer.

Man könnte "copyright" hier genauso "author" nennen. Es soll lediglich ein Verweis auf den ursprünglichen Ersteller sein, damit man weiß wo das Snippet her kommt und wo man sich bei Fragen/Problemen melden kann.

Gruß
Michael

Frank am 07. Oktober 2009, 00:04 Uhr

Wenn man sich keine Lösungen patentieren lassen könnte, die mittels "Logik" entstanden, dann müsste Thomas Alva Edison sein Patent für die Glühbirne zurückgeben.

Ich freue mich über die längst überfällige Feststellung, dass PHP bereits selbst eine Template-Engine ist. Die durch die üblichen Template-Engines entstehenden Scriptsprachen halte ich deshalb letztlich für Spielerei, gerechtfertigt durch angeblich größere "Einfachheit".

Tatsächlich ist der Verzicht auf die Metasprache, die mit PHP gebildet wird, am Ende der größere Dienst an der Einfachheit. Aber wie überall gilt: Jeder soll mit seinen eigenen Ideen glücklich werden - und wir alle halten das auch mühelos aus :-) .

Grüße
Frank

Typo3 Freelancer am 14. Januar 2010, 10:14 Uhr

Wirklich sehr gut erklärt, besonders für Anfänger geeignet.

Paloran am 21. Januar 2010, 20:29 Uhr

Hi, erstmal, sehr schöne Sachen hier auf deiner Seite, mach weiter so. Nun habe ich auch noch eine (ziemlich blöde) Frage, und zwar wo steht (Link) denn nochmal die Definition für solche Erklärunge von Funktionen wie du es gemacht hast? I

Michael am 21. Januar 2010, 21:26 Uhr

Hallo!
Ich habe das nicht nach einer Definition gemacht, sondern so wie es mir gefällt bzw. wie ich es sinnvoll finde.

Was dir vielleicht helfen könnte sind die Syntax Vorgaben vom phpDocumentor (http://phpdoc.org).

Lg
Michael

patrick am 27. Januar 2010, 20:29 Uhr

Ich habe das Problem, dass ich das Script unter Xampp (php 5.3.0) nicht zum laufen bekomme. Unter 5.2.10 läuft es einwandfrei.
Woran könnte das liegen ?

Gruß, Patrick

Michael am 27. Januar 2010, 22:31 Uhr

Was genau funktioniert nicht? Bekommst du eine Fehlermeldung?
Sollte eigentlich nicht an dem Codesnippet liegen.

Lg
Michael

Patrick am 28. Januar 2010, 09:47 Uhr

Die Platzhalter werden nicht ersetzt.

Es wird nur der Code der index.tpl ausgegeben.

// Patrick

Patrick am 28. Januar 2010, 12:08 Uhr

Hallo Michael,
das Problem liegt darin, dass bei xampp die short_open_tag = Off gesetzt ist.
Funktioniert es einwand frei.

Gruß, Patrick

E-Bass am 13. September 2010, 17:25 Uhr

Vielen Dank für das Script und vielmehr die Idee dahinter. Plane eine kleine TYPO3-Erweiterung, womit ich dann den VIEW-Teil des MVC mit Deinem Script umsetzen werde.

Josef am 23. Juli 2011, 22:43 Uhr

Guten Tag!
Ich habe mich mit der PHP-Template-Thematik noch nie beschäftigt. Ich möchte die "Minimalistische Template Engine" mal ausprobieren bei meiner o.g. Seite.
Ganz verstehe ich den Code nicht. Vor allem: in welche PHP-Datei soll die eingangs gezeigte Funktion verpackt werden? In eine index.php oder so?
Die *Kommentare müssen nach Bedarf wohl entkommentiert und befüllt werden?

Bitte um / danke im voraus für gute Tipps
Josef

Michael am 24. Juli 2011, 11:39 Uhr

Hallo Josef,
Wo du die gezeigte Funktion hinein kopierst ist ziemlich egal. Kann auch in der index.php sein. Nein, die Kommentare oben sind nur zur Beschreibung der Funktion - die musst du nicht auskommentieren.

Lad dir am besten den Beispielcode herunter und führ ihn aus, dann siehst du recht gut wie das ganze funktioniert.

Lg
Michael

Kommentar schreiben

  • Erlaubte HTML Tags: <a> <code> <em> <strong> <small> <ul> <ol> <li> <blockquote>
  • Zeilen und Absätze werden automatisch formatiert.
  • Web und E-Mail Adressen werden automatisch umgewandelt.