mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-13 19:46:53 +01:00
145 lines
5.1 KiB
Plaintext
145 lines
5.1 KiB
Plaintext
View
|
|
====
|
|
|
|
En vy (view) är ett PHP-skript huvudsakligen bestående av element som hör till
|
|
användargränssnittet. Vyn kan innehålla PHP-satser, men det rekommenderas att
|
|
dessa satser inte ändrar datamodeller samt att de förblir relativt enkla. I
|
|
andan av separation mellan programlogik och presentation, bör stora block av
|
|
programlogik placeras i kontroller eller modell istället för i vyn.
|
|
|
|
En vy har ett namn avsett att identifiera vyns skriptfil vid rendering. Vyn och
|
|
dess skriptfil har samma namn. Till exempel, vyn `edit` refererar till en
|
|
vyskriptfil med namnet `edit.php`. En vy kan renderas genom anrop till
|
|
[CController::render()] med vyns namn bifogat. Metoden kommer att söka efter
|
|
motsvarande vyfil i katalogen `protected/views/ControllerID`.
|
|
|
|
I vyns skriptfil kan kontrollerinstansen adresseras med hjälp av `$this`. Vi kan
|
|
därför hämta in (`pull`) varje egenskap (property) från kontrollern genom att utvärdera
|
|
`$this->propertyName` i vyn.
|
|
|
|
Vi kan också trycka ut (`push`) data till vyn:
|
|
|
|
~~~
|
|
[php]
|
|
$this->render('edit', array(
|
|
'var1'=>$value1,
|
|
'var2'=>$value2,
|
|
));
|
|
~~~
|
|
|
|
I ovanstående exempel kommer metoden [render()|CController::render] att
|
|
extrahera arrayen i parameter 2 till variabler. Resultatet blir att vi i
|
|
vyskriptet kan använda de lokala variablerna `$var1` och `$var2`.
|
|
|
|
Layout
|
|
------
|
|
|
|
Layout är en speciell vy som används för att dekorera vyer. Den innehåller
|
|
vanligtvis delar av användargränssnittet vilka är gemensamma för många vyer.
|
|
Till exempel kan en layout innehålla sidhuvud och sidfot samt bädda in innehållsvyn däremellan,
|
|
|
|
~~~
|
|
[php]
|
|
......header here......
|
|
<?php echo $content; ?>
|
|
......footer here......
|
|
~~~
|
|
|
|
där `$content` innehåller renderingsresultatet för innehållsvyn.
|
|
|
|
Layout blir underförstått applicerad vid anrop till
|
|
[render()|CController::render]. Som standard används vyskriptet
|
|
`protected/views/layouts/main.php` som layout. Detta kan anpassas genom att
|
|
ändra antingen [CWebApplication::layout] eller [CController::layout]. Använd
|
|
[renderPartial()|CController::renderPartial] för rendering av en vy utan att
|
|
applicera någon layout.
|
|
|
|
Widget
|
|
------
|
|
|
|
En widget är en instans av [CWidget] eller nedärvd klass. Den är en komponent
|
|
huvudsakligen avsedd för presentation. Widget bäddas vanligen in i vyskript för
|
|
att generera något komplext, men ändå komplett och oberoende, användargränssnitt.
|
|
Till exempel kan en kalenderwidget användas till att rendera ett avancerat
|
|
kalendergränssnitt. Widget möjliggör bättre återanvändningsbarhet av
|
|
användargränssnittet.
|
|
|
|
För att använda en widget, gör så här i ett vyskript:
|
|
|
|
~~~
|
|
[php]
|
|
<?php $this->beginWidget('path.to.WidgetClass'); ?>
|
|
...body content that may be captured by the widget...
|
|
<?php $this->endWidget(); ?>
|
|
~~~
|
|
|
|
eller
|
|
|
|
~~~
|
|
[php]
|
|
<?php $this->widget('path.to.WidgetClass'); ?>
|
|
~~~
|
|
|
|
Det senare används när widget:en inte behöver omfatta innehåll (body content).
|
|
|
|
Widget kan konfigureras för anpassning av dess beteende. Detta sker genom att
|
|
man sätter dess initiala propertyvärden vid anrop till
|
|
[CBaseController::beginWidget] eller [CBaseController::widget]. Till exempel,
|
|
för [CMaskedTextField] widget:en, vill vi kunna specificera vilken mask som
|
|
skall användas. Detta kan göras genom att lämna med en array av initialvärden
|
|
för widget-egenskaper (property) på följande sätt, där arrayens nycklar är
|
|
egenskapsnamn, arrayvärdena initialvärden för widgetens egenskaper:
|
|
|
|
~~~
|
|
[php]
|
|
<?php
|
|
$this->widget('CMaskedTextField',array(
|
|
'mask'=>'99/99/9999'
|
|
));
|
|
?>
|
|
~~~
|
|
|
|
För att definiera en ny widget, ärv en underklass från [CWidget] och åsidosätt metoderna
|
|
[init()|CWidget::init] och [run()|CWidget::run] med egna:
|
|
|
|
~~~
|
|
[php]
|
|
class MyWidget extends CWidget
|
|
{
|
|
public function init()
|
|
{
|
|
// this method is called by CController::beginWidget()
|
|
}
|
|
|
|
public function run()
|
|
{
|
|
// this method is called by CController::endWidget()
|
|
}
|
|
}
|
|
~~~
|
|
|
|
En widget kan. liksom en kontroller, ha sin egen vy. Som standard har en widget
|
|
sina vyfiler placerade i underkatalogen `views` till katalogen som innehåller
|
|
widgetens klassfil. Dessa vyer kan renderas genom anrop till
|
|
[CWidget::render()], ungefär som med en kontroller. Den enda skillnaden är att
|
|
ingen layout appliceras på en widgetvy. `$this` i vyn refererar till widgetens
|
|
instans i stället för till kontrollerinstansen.
|
|
|
|
Systemvy
|
|
--------
|
|
|
|
Systemvyer refererar till de vyer som Yii använder för att presentera
|
|
felmeddelanden och loggningsinformation. Till exempel, när en användare skickar
|
|
en begäran gällande en icke-existerande kontroller eller åtgärd, kommer Yii
|
|
att signalera en exception som förklarar felet. Yii presenterar en exception med
|
|
hjälp av en specifik systemvy.
|
|
|
|
Namn på systemvyer följer vissa regler. Namn i stil med `errorXXX` avser vyer
|
|
för presentation, [CHttpException] med felkod `XXX`. Till exempel, om
|
|
[CHttpException] signaleras med felkod 404, så kommer vyn `error404` att visas.
|
|
|
|
Yii erbjuder en standarduppsättning systemvyer placerade under
|
|
`framework/views`. Dessa kan anpassas genom att vyfiler med samma namn placeras
|
|
under `protected/views/system`.
|
|
|
|
<div class="revision">$Id: basics.view.txt 2367 2010-08-29 17:29:22Z qiang.xue $</div> |