MoG
Administrator
      

Dabei seit: 06.10.2005
Beiträge: 425
Herkunft: Fischbach (Kr. Kaiserslautern)
 |
|
| Template-Enginge "Smarty" |
 |
Hallo
Wie schon angekündigt ist hier der Thread zu Smarty.
Diese Template-Enginge funktioniert ähnlich wie die Funktionen unserer Forensoftware hier. Der Unterschied ist das bessere (sinnvollere) cachen der Templates.
Warum überhaupt Templates? Nun, ich will einfach eine klare Trennung zwischen Verarbeitung und Ausgabe, zwischen den Programmierern und den Designern. Veränderungen im Quellcode sollen sich nicht auf das Design auswirken und umgekehrt.
Die Syntax ist ein wenig gewöhnungsbedürftig, ich wills mal kurz machen.
1) Einbinden der Enginge
2) Syntax innerhalb des Templates und der PHP-Datei
3) Weiterführende Links
####################
zu 1)
In jeder PHP-Datei, die nachher ein Template ausgeben soll, muss folgendes an den Anfang:
| php: |
1:
2:
3:
4:
5:
6:
|
<?php
require 'acp/libs/Smarty.class.php';
$smarty = new Smarty;
$smarty->compile_check = true;
$smarty->debugging = false;
?> |
|
Erklärung
über Smarty.class.php greifen wir auf die Methoden der Klasse Smarty zurück, die wir erzeugt haben. Ohne diesen Schritt wird die Enginge nicht aktiviert und wir könnten keine Templates ausgeben.
Zu compile_check muss ich ein wenig mehr erzählen: Diese Engine ist in der Lage, Änderungen in Templates festzustellen. Sie vergleicht das aktuelle Template mit einem Abbild. Wenn eine Änderung vorliegt, wird das Template neu kompiliert.
Folge: Wenn wir mit dem Design komplett fertig WÄREN, WÜRDEN wir oben den Wert von compile_check auf 'flase' setzen, damit uns das Kompilieren erspart bleibt und die Performance steigt.
ACHTUNG: Während der Entwicklung MUSS dieser Wert immer auf TRUE stehen, da ansonsten Neuerungen in Templates nicht erkannt werden und somit verborgen bleiben!
$smarty->debugging ist eher eine Spielerei, die ihc standardmäßig ausschalte. Wenn es aktiviert wird, wird dem Template ein Popup über JS angehängt, in dem wir Infos erhalten über Anzahl Variablen, Arrays, deren Felder, Ladezeit, Ausgabezeit, etc.
Den oben beschriebenen "kopf" habe ich in der Datei a_tpl.php abgelegt, so brauchen wir nurnoch diese Datei via "include" miteinzubeziehen.
Sollte das Infopopup erwünscht sein, einfach "$smarty->debugging = true;" nach der include-Anweisung anhängen
zu 2)
Etwas verwirrend mag die Definition von Variablen sein. Bisher war man es gewohnt, einfach in der PHP-Datei folgendes zu schreiben:
| php: |
1:
2:
3:
|
<?php
$test = "sahne";
?> |
|
Klar, das ist auch jetzt noch möglich, aber in dem Template kann man diese variable nicht einfach über $test abfragen, da sie in dem Template nicht existiert ^^
Warum? Weil sie nicht in die Enginge geladen wurde...
ALLES, was außerhalb der PHP-Datei verwendet werden soll, also in dem Template, muss über folgende Methode geschehen:
| php: |
1:
2:
3:
|
<?php
$smarty->assign();
?> |
|
Nun gibt es für verschiedene Fälle verschiedene Schreibweisen. Um das Sahne-Beispiel aufzugreifen würde es dann wie folgt aussehen:
| php: |
1:
2:
3:
|
<?php
$smarty->assign('test', 'sahne');
?> |
|
Nun existiert in dem Template die Variable $test mit dem Wert "sahne".
Alternativ könnte die Variable $test in der PHP-Datei deklariert worden sein und wir wollen diese ausgeben:
| php: |
1:
2:
3:
|
<?php
$smarty->assign('test', $test);
?> |
|
geht auch
Ausgabe der Variablen im Template:
Die Ausgabe ist einfach, man muss nur auf die geschweiften Klammern um die Variablen achten, also {$test}
Nehmen wir an, wir machen eine einfache Datenbank-Abfrage... Unsere Variable enthält folglich ein Array. Die Ausgabe eines Arrays ist einfach.
{$test.feldname}
zu 3)
Deutsches Handbuch zu smarty 
Ausgabe von Variablen in den Templates 
Variablen in einer PHP-Datei (auch Arrays) 
Alles in allem ist es gewöhnungsbedürftig, aber es ist irgendwo machbar. Die umständliche Übergabe von Variablen an das Template zwingt einen fast dazu, wenig an Variablen zu übergeben, der Faulheit wegen. Ist ja nich unbedingt falsch
Zudem sieht man durch die "->" recht schnell, wo Informationen an das Template übergeben wurden.
Fragen zur Enginge bitte in diesen Thread!
mfg mog
__________________

|
|