Tag 14 – Template Class 2


Schon seid vielen Jahren benutzte ich diese Klasse. Immer wenn ich ein kleines Template-System brauche setze ich auf diese Klasse. Die Funktionsweise meiner Klasse ist dabei recht einfach.

Als erstes wird im Konstruktor festgelegt wo die Vorlagen zu finden sind, dazu wird ihn der Pfad mit übergeben. Zusätzlich wird die „value“-Eigenschaft mit einem leeren Array vorbereitet.

  1. public function __construct( $path )
  2. {
  3. $this->path = $path.‚/‘;
  4. $this->values = array();
  5. }

Um aber auch eine konkrete Vorlage zu laden, gibt es in der „Template“-Klasse die „load()“-Methode. Ihr wird der Dateiname übergeben. Die geladene Datei wird als String in die „source“-Eigenschaft abgelegt. Zusätzlich wird die „reload()“-Methode aufgerufen.

  1. public function load( $file )

  2. {
  3. $this->source = file_get_contents( $this->path.$file );
  4. $this->reload();
  5. }

Sie kopiert den geladene String in die „template“-Eigenschaft. So muss nicht beim wiederholten Aufrufen der gleichen Vorlage immer wieder erst die Datei von der Festplatte geladen werden.

  1. public function reload()
  2. {
  3. $this->template = $this->source;
  4. }

Über die „set()“-Methode werden die Werte mit ihren Schlüsselworten in die Klasse geladen. Dabei werden 2 Parameter erwartet: der Schlüssel mit folgender Schreibweise „##SCHLÜSSELNAME##“ (Name in Großbuchstaben) und optional ein Wert.

  1. public function set( $key, $value=)
  2. {
  3. $this->values[$key] = $value;
  4. }

Neben der „set()“-Methode gibt es natürlich auch die „get()“-Methode. Sie hat als Aufgabe aus dem Template einen brauchbare Quellcode für den Browser zu generieren. Dabei prüft sie als erstes ob überhaupt das Template schon geladen wurde. Danach ruft sie die „parse()“-Methode auf, um das Template mit den Werten zu verarbeiten. Falls der Methode über der „sourcecode“-Parameter der statische Wert Template::DISPLAY_CODE mitgegeben wurde, wird die Ausgabe in lesbaren HTML-Code konvertiert.

  1. public function get( $sourcecode=true )
  2. {
  3. if( $this->source==null || $this->source==)
  4. {
  5. return null;
  6. }
  7. $this->parse();
  8. if( !$sourcecode )
  9. {
  10. $out = ‚<pre>‘;
  11. $out .= htmlentities( $this->template );
  12. $out .= ‚</prev>‘;
  13. }
  14. else
  15. {
  16. $out = $this->template;
  17. }
  18. return $out;
  19. }

Die „parse()“-Methode hat nun die Aufgabe die Schlüsselworte innerhalb der Vorlage durch die Werte innerhalb der „values“-Eigenschaft zu ersetzen. Dabei prüft sie als erstes ob überhaupt das Template schon geladen ist. Danach ersetzt sie alle Werte. Zum Schluss werden noch alle nicht ersetzten Schlüsselworte in der Vorlage gelöscht, um unschöne Darstellungen zu vermeiden.

  1. private function parse()
  2. {
  3. if( $this->source == null || $this->source==)
  4. {
  5. die(‚TPL-Error: file not loaded!‘);
  6. }
  7. foreach ( $this->values as $key => $value )
  8. {
  9. $this->template = str_replace( $key, $value, $this->template );
  10. }
  11. $this->template = ereg_replace( ‚##[A-Za-z0-9_]+##‘, , $this->template);
  12. }

Als letzte Methode innerhalb der „Template“-Klasse gibt es noch die „write()“-Methode. Sie macht im Grunde genau das was die „get()“-Methode auch macht, nur gibt sie das Ergebnis direkt an den Browser weiter.

  1. public function write( $sourcecode=true )
  2. {
  3. echo $this->get( $sourcecode );
  4. }

Wie schon eingangs erklärt, ist diese Klasse eine meiner ersten Klassen die ich konstant in meinen Projekten einsetze. Die Verwendung ist dabei sehr einfach. Als erstes erstellt man eine Vorlagendatei mit folgenden exemplarischen Quellcode:

  1. <!DOCTYPE html PUBLIC „-//W3C//DTD XHTML 1.0 Transitional//EN“ „http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>
  2. <html xmlns=„http://www.w3.org/1999/xhtml“>
  3. <head>
  4. <meta http-equiv=„Content-Type“ content=„text/html; charset=utf-8“ />
  5. <title>##TITLEBAR##</title>
  6. </head>
  7. <body lang=„de“>
  8. <div id=„page“>
  9. <div id=„branding“>
  10. <h1>##WEBSITETITLE##</h1>
  11. <h2>##TAGLINE##</h2>
  12. </div>
  13. <div id=„main“>
  14. <div id=„content“>
  15. ##CONTENT##
  16. </div>
  17. <div id=„sidebar“>
  18. ##SIDEBAR##
  19. </div>
  20. </div>
  21. <div id=„copyright“>
  22. <p>&copy; 2008 &ndash; <a href=„http://www.re-design.de“>RE-Design</a></p>
  23. </div>
  24. </div>
  25. </body>
  26. </html>

Um diese Vorlage verwenden zu können muss man in PHP nur folgendes schreiben:

  1. <?php

  2. include_once ‚core/Template.php‘;
  3. $tpl = new Template(‚./templates/layouts‘);
  4. $tpl->load(‚index.tpl.html‘);
  5. $tpl->set(‚##TITLEBAR##‘, ‚RE-Design – Beispiel-Template-Code‘);
  6. $tpl->set(‚##WEBSITETITLE##‘, ‚RE-Design‘);
  7. $tpl->set(‚##TAGLINE##‘, ‚Template-Klassen-Beispiel‘);
  8. $tpl->set(‚##CONTENT##‘, ‚<p>Lorem ipsum dolor sit amet, … et netus et malesuada fames ac turpis egestas.</p>‘);
  9. $tpl->set(‚##SIDEBAR##‘, ‚<div class=“box“><h2>Autor</h2><p>Enrico Reinsdorf</p></div>‘);
  10. echo $tpl->get(Template::DISPLAY_HTML);
  11. ?>

Downloads


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

2 Gedanken zu “Tag 14 – Template Class