Yii erlaubt es dem Entwickler, seine eigene bevorzugte Template-Syntax (z.B. von Prado oder Smarty) für Controller- und Widget-Views zu verwenden. Dazu kann eine viewRenderer-Anwendungskomponente erstellt werden. Diese Komponente fängt die Aufrufe von CBaseController::renderFile ab, kompiliert die entsprechende View-Datei mit der angepassten Syntax (z.B. von Prado oder Smarty) und rendert das Ergebnis.
Info: Es wird empfohlen, die alternative Syntax nur bei Views einzusetzen, die vermutlich weniger wiederverwendet werden. Andernfalls wäre jeder, der den View wiederverwenden möchte, gezwungen, die selbe alternative Syntax in seiner Anwendung einzusetzen.
Im Folgenden zeigen wir, wie der CPradoViewRenderer verwendet werden kann, damit ein Entwickler eine ähnliche Syntax wie die des Prado-Frameworks verwenden kann. CPradoViewRenderer ist ein guter Ausgangspunkt, falls jemand einen eigenen View-Renderer entwickeln möchte.
CPradoViewRenderer
¶Um CPradoViewRenderer einzusetzen, müssen wir nur die Anwendungskomponente wie folgt konfigurieren:
return array(
'components'=>array(
......,
'viewRenderer'=>array(
'class'=>'CPradoViewRenderer',
),
),
);
Standardmäßig kompiliert der CPradoViewRenderer die Quell-View-Dateien 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. So verringert der Einsatz von CPradoViewRenderer die Leistungsfähigkeit nur unwesentlich.
Tipp: Der CPradoViewRenderer führt hauptsächlich neue Template-Tags ein, um das Schreiben von Views zu vereinfachen und zu beschleunigen. Sie können aber immer noch wie gewohnt PHP-Code in View-Dateien einsetzen.
Nachfolgend zeigen wir, welche Template-Tags von CPradoViewRenderer unterstützt werden.
Kurze PHP-Tags sind abgekürzte Schreibweisen für PHP-Ausdrücke und
-Anweisungen in einem View. Der Ausdrucks-Tag <%= Ausdruck %>
wird zu <?php
echo Ausdruck ?>
übersetzt, während der Anweisungs-Tag <% Anweisung %>
zu
<?php Anweisung ?>
übersetzt wird. So wird
<%= CHtml::textField($name,'value'); %>
<% foreach($models as $model): %>
übersetzt zu
echo CHtml::textField($name,'value'); foreach($models as $model):
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
Pfad-Alias des Widgets definiert und die
Startwerte für Eigenschaften entweder in doppelten Anführungszeichen oder als
PHP-Ausdruck in geschweiften Klammern wie folgt angegeben werden können:
<com:CCaptcha captchaAction="captcha" showRefreshButton={false} />
würde übersetzt werden 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.
Cache-Tags sind Abkürzungen für das Cachen von Seitabschnitten. Ihre 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->cache('profile', array('duration'=>3600))): // Informationen zum Benutzerprofil $this->endCache(); endif;
Wie Cache-Tags sind auch Clip-Tags 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.
Clip-Tags werden übersetzt zu
$this->beginClip('clipID'); // Inhalt des Clips $this->endClip();
Kommentar-Tags sind für View-Kommentare gedacht und nur für Entwickler sichtbar. Kommentar-Tags werden vor der Anzeige aus dem View entfernt. Die Syntax lautet hier
<!---
View-Kommentare, der später entfernt wird
--->
Signup or Login in order to comment.