mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-24 00:46:52 +01:00
154 lines
5.4 KiB
Plaintext
154 lines
5.4 KiB
Plaintext
View
|
|
====
|
|
|
|
Ein View ist ein PHP-Script, das hauptsächlich aus Elementen der
|
|
Bedienoberfläche besteht. Es kann auch PHP-Anweisungen enthalten, aber es
|
|
wird empfohlen, dass diese Anweisungen keine Daten-Models verändern und
|
|
relativ einfach gehalten werden. Im Sinne einer Trennung von Logik und
|
|
Präsentation, sollten größere Logikblöcke statt im View, besser im
|
|
Controller oder im Model untergebracht werden.
|
|
|
|
Ein View hat einen Namen, der beim Rendern zur Bestimmung der View-Datei
|
|
verwendet wird. Der Name eines Views entspricht dem Dateinamen des
|
|
View-Scripts. Der View `edit` bezieht sich auf die Script-Datei `edit.php`. Um
|
|
einen View zu rendern, rufen Sie [CController::render()] mit dem Namen des
|
|
Views auf. Die Methode sucht dann im Verzeichnis
|
|
`protected/views/ControllerID` nach der entsprechenden View-Datei.
|
|
|
|
Innerhalb eines View-Scripts können wir über `$this` auf die
|
|
Controller-Instanz zugreifen. So können wir im View mit `$this->propertyName`
|
|
auf jede Eigenschaft des Controllers zugreifen, was man auch als `pull`-Verfahren
|
|
(ziehen) bezeichnet.
|
|
|
|
Wir können auch einen `push`-Ansatz (schieben) verfolgen, um
|
|
Daten wie hier an den View zu übergeben:
|
|
|
|
~~~
|
|
[php]
|
|
$this->render('edit', array(
|
|
'var1'=>$value1,
|
|
'var2'=>$value2,
|
|
));
|
|
~~~
|
|
|
|
In obigem Fall extrahiert die Methode [render()|CController::render] den
|
|
zweiten Array-Parameter in einzelne Variablen. Daher können wir im View-Script
|
|
auf die lokalen Variablen `$var1` und `$var2` zugreifen.
|
|
|
|
Layout
|
|
------
|
|
|
|
Ein Layout ist ein spezieller View, der zum "dekorieren" von Views verwendet
|
|
wird. In der Regel enthält es die Teile der Bedienoberfläche, die mehrere
|
|
Views gemeinsam haben. Ein Layout kann zum Beispiel Header- und
|
|
Footer-Bereiche enthalten, und den View-Inhalt zwischen den beiden einbinden,
|
|
|
|
~~~
|
|
[php]
|
|
......header hier......
|
|
<?php echo $content; ?>
|
|
......footer hier......
|
|
~~~
|
|
|
|
wobei `$content` das gerenderte Ergebnis des Inhalt-Views enthält.
|
|
|
|
Ein Layout wird jedesmal angewendet, wenn [render()|CController::render]
|
|
aufgerufen wird. Per Vorgabe wird das Script in
|
|
`protected/views/layouts/main.php` als Layout verwendet. Dies kann entweder
|
|
über [CWebApplication::layout] oder [CController::layout] angepasst werden.
|
|
Rufen Sie [renderPartial()|CController::renderPartial] auf, um einen View zu
|
|
rendern, ohne ein Layout anzuwenden.
|
|
|
|
Widget
|
|
------
|
|
|
|
Ein Widget (sinngem.: Dings) ist eine Instanz vom Typ [CWidget] oder
|
|
dessen Kindklassen. Es handelt sich um eine Komponente, die im Wesentlichen für
|
|
Präsentationszwecke verwendet wird. Widgets werden für gewöhnlich in ein View-Script
|
|
eingebettet, um einen komplexeren, jedoch in sich geschlossen Teil der
|
|
Anwenderoberfläche zu erzeugen. Zum Beispiel kann man ein Kalender-Widget
|
|
verwenden um ein komplexes Kalender-Bedienelement zu rendern. Widgets
|
|
erlauben eine bessere Wiederverwendbarkeit von Anwenderschnittstellen.
|
|
|
|
Um ein Widget zu verwenden, gehen Sie wie folgt im View-Script vor:
|
|
|
|
~~~
|
|
[php]
|
|
<?php $this->beginWidget('pfad.zu.Widget-Klasse'); ?>
|
|
...Inhalt, der vom Widget erfasst werden kann...
|
|
<?php $this->endWidget(); ?>
|
|
~~~
|
|
|
|
oder
|
|
|
|
~~~
|
|
[php]
|
|
<?php $this->widget('pfad.zu.Widget-Klasse'); ?>
|
|
~~~
|
|
|
|
Letztere Form wird verwendet, wenn das Widget keinen eingebetteten Inhalt
|
|
benötigt.
|
|
|
|
Das Verhalten von Widgets kann per Konfiguration angepasst werden. Dies
|
|
geschieht, indem man beim Aufruf von [CBaseController::beginWidget] oder
|
|
[CBaseController::widget] die gewünschten Eigenschaftswerte übergibt.
|
|
Wenn wir zum Beispiel das Widget [CMaskedTextField] verwenden, können wir die
|
|
zu verwendende Maske angeben. Dazu können wir ein Array mit den
|
|
Eigenschaftsnamen als Schlüssel und den gewünschten Startwerten als Wert
|
|
übergeben:
|
|
|
|
~~~
|
|
[php]
|
|
<?php
|
|
$this->widget('CMaskedTextField',array(
|
|
'mask'=>'99/99/9999'
|
|
));
|
|
?>
|
|
~~~
|
|
|
|
Um ein neues Widget zu definieren, erweitern Sie [CWidget] und überschreiben
|
|
Sie dessen Methoden [init()|CWidget::init] und [run()|CWidget::run].
|
|
|
|
~~~
|
|
[php]
|
|
class MyWidget extends CWidget
|
|
{
|
|
public function init()
|
|
{
|
|
// Diese Methode wird von CController::beginWidget() aufgerufen
|
|
}
|
|
|
|
public function run()
|
|
{
|
|
// Diese Methode wird von CController::endWidget() aufgerufen
|
|
}
|
|
}
|
|
~~~
|
|
|
|
Wie ein Controller, kann auch ein Widget seinen eigenen View besitzen.
|
|
Standardmäßig sind die View-Dateien des Widgets im Unterverzeichnis `views`
|
|
des Ordners abgelegt, der die Widget-Datei enthält. Ähnlich wie im Controller
|
|
können diese Views durch Aufruf von [CWidget::render()] gerendert werden.
|
|
Der einzige Unterschied besteht darin, dass kein Layout auf einen Widget-View
|
|
angewendet wird.
|
|
|
|
System-View
|
|
-----------
|
|
|
|
System-Views beziehen sich auf Views, die von Yii zur Anzeige von Fehler- und
|
|
Log-Informationen verwendet werden. Fordert ein Benutzer zum Beispiel einen
|
|
Controller oder eine Action an, die nicht existieren, löst Yii eine Exception
|
|
aus, die den Fehler beschreibt. Yii stellt diese Exception unter Zuhilfenahme
|
|
eines speziellen System-Views dar.
|
|
|
|
Die Bezeichnung von System-Views folgt den selben Regeln. Namen wie
|
|
`errorXXX` beziehen sich auf Views zur Anzeige einer [CHttpException] mit
|
|
(HTTP-)Fehlercode `XXX`. Wird zum Beispiel eine [CHttpException] mit dem
|
|
Fehlercode 404 ausgelöst, wird der View `error404` angezeigt.
|
|
|
|
Yii stellt eine Reihe von Standard-System-Views bereit, die unter
|
|
`framework/views` zu finden sind. Sie können leicht angepasst werden, indem
|
|
gleichnamige View-Dateien in `protected/views/system` angelegt werden.
|
|
|
|
<div class="revision">$Id: basics.view.txt 416 2008-12-28 05:28:11Z qiang.xue $</div>
|