Alternative Templatesyntax
Yii erlaubt es dem Entwickler, seine eigene bevorzugte Templatesyntax (z.B. von Prado oder Smarty) für Controller- und Widgetviews zu verwenden. Dazu muss eine viewRenderer-Komponente erstellt bzw. konfiguriert werden. Diese Komponente fängt die Aufrufe von CBaseController::renderFile ab, kompiliert die Viewdatei in der entsprechenden Syntax und rendert das Ergebnis.
Info: Es wird empfohlen, die alternative Syntax nur bei Views einzusetzen, die kaum wiederverwendet werden. Andernfalls müssten alle, die den View wiederverwenden möchten, die selbe alternative Syntax in ihrer Anwendung einsetzen.
Wir zeigen im Folgenden, wie man den CPradoViewRenderer verwendet, um mit einer ähnlichen Templatesyntax wie in Prado zu arbeiten. Möchte man seinen eigenen Viewrenderer verwirklichen, ist der CPradoViewRenderer ein guter Ausgangspunkt dafür.
Einsatz des CPradoViewRenderer
Um den CPradoViewRenderer zu verwenden, muss folgende Anwendungskomponente konfiguriert werden:
return array( 'components'=>array( ......, 'viewRenderer'=>array( 'class'=>'CPradoViewRenderer', ), ), );
Standardmäßig kompiliert der CPradoViewRenderer die Viewdateien und speichert die resultierenden PHP-Dateien im Runtime-Verzeichnis der Anwendung. Diese PHP-Dateien werden nur dann neu generiert, wenn die Quelldatei sich geändert hat. Auf diese Weise verringert der Einsatz von CPradoViewRenderer die Performance nur unwesentlich.
Tipp: Der CPradoViewRenderer führt hauptsächlich vereinfachende Templatetags für Views ein. Daneben kann man aber auch immer noch normalen PHP-Code in Views verwenden.
Folgende Templatetags werden vom CPradoViewRenderer unterstützt:
Kurze PHP-Tags
Kurze PHP-Tags sind Kurzschreibweisen für PHP-Ausdrücke und
-Anweisungen in einem View. Der Tag <%= Ausdruck %>
wird zu <?php
echo Ausdruck ?>
übersetzt, während <% Anweisung %>
zu
<?php Anweisung ?>
übersetzt wird. So wird
<%= CHtml::textField($name,'value'); %> <% foreach($models as $model): %>
übersetzt zu
echo CHtml::textField($name,'value'); <?php foreach($models as $model):
Komponententags
Komponententags dienen zum Einfügen eines Widgets in einem View. Sie verwenden diese Syntax:
<com:WidgetKlasse eigenschaft1=wert1 eigenschaft2=wert2...> // Eingebetteter Inhalt des Widgets </com:WidgetKlasse> // Ein Widget ohne eingebetteten Inhalt <com:WidgetKlasse eigenschaft1=wert1 eigenschaft2=wert2.../>
wobei WidgetKlasse
den Klassennamen oder
Pfadalias des Widgets definiert und die
Startwerte für Eigenschaften entweder in doppelten Anführungszeichen oder als
PHP-Ausdruck in geschweiften Klammern angegeben werden können.
<com:CCaptcha captchaAction="captcha" showRefreshButton={false} />
würde damit übersetzt zu
$this->widget('CCaptcha', array( 'captchaAction'=>'captcha', 'showRefreshButton'=>false));
Hinweis: Der Wert für
showRefreshButton
wird als{false}
statt"false"
angegeben, da letzteres einen String statt eines boole'schen Wertes darstellen würde.
Cachetags
Cachetags sind Abkürzungen zum Cachen von Fragmenten. Die Syntax lautet
<cache:abschnittID eigenschaft1=wert1 eigenschaft2=wert2...> // Zu cachender Inhalt </cache:abschnittID>
wobei abschnittID
ein eindeutiger Bezeichner für den zu cachenden Inhalt
sein sollte und die Eigenschafts-Werte-Paare zum konfigurieren des Caches
dienen. Zum Beispiel würde
<cache:profil duration={3600}> // Informationen zum Benutzerprofil </cache:profil >
übersetzt werden in
if($this->beginCache('profile', array('duration'=>3600))): // Informationen zum Benutzerprofil <?php $this->endCache(); endif;
Cliptags
Wie Cachetags sind auch Cliptags Abkürzungen um CBaseController::beginClip und CBaseController::endClip in einem View aufzurufen. Die Syntax lautet
<clip:clipID> // Inhalt des Clips </clip:clipID >
wobei clipID
ein eindeutiger Bezeichner für den Clipinhalt ist.
Cliptags werden übersetzt zu
$this->beginClip('clipID'); // Inhalt des Clips <?php $this->endClip();
Kommentartags
Kommentartags sind für Viewkommentare gedacht und nur für Entwickler sichtbar. Kommentartags werden vor der Anzeige aus dem View entfernt. Die Syntax lautet hier
<!--- View-Kommentare, der später entfernt wird --->
Mischen von Templateformaten
Seit Version 1.1.2 kann die alternative Templatesyntax auch gemeinsam mit der
normalen PHP-Syntax von Viewdateien eingesetzt werden. Dazu muss
CViewRenderer::fileExtension des Viewrenderers auf einen anderen Wert als
.php
gesetzt werden. Konfiguriert man diese Eigenschaft z.B. auf .tpl
,
werden alle Dateien mit der Endung .tpl
mit dem angegebenen Viewrenderer
dargestellt. Alle anderen Dateien werden als normale PHP-Viewdateien
behandelt.