Yii tillåter urvecklare att använda sin egen favoritmallsyntax (t.ex. Prado, Smarty) för att skriva kontroller- eller widgetvyer. Detta uppnås genom att skriva och installera en applikationskomponent, viewRenderer. Vyrenderaren fångar upp invokeringar av CBaseController::renderFile, kompilerar vyfilen med anpassad mallsyntax, och renderar de kompilerade resultaten.
Info: Det rekommenderas att anpassad mallsyntax bara används till att skriva vyer som med liten sannolikhet kommer att återanvändas. I annat fall kommer personer som återanvänder vyerna att tvingas använda samma anpassade mallsyntax i sina applikationer.
I det följande, introduceras hur man använder CPradoViewRenderer, en vyrenderare som tillåter utvecklare att använda en mallsyntax snarlik den i Prado-ramverket. För personer som vill utveckla sina egna vyrenderare, är CPradoViewRenderer en bra referens.
CPradoViewRenderer
¶För att använda CPradoViewRenderer, behöver man konfigurera applikationen som följer:
return array(
'components'=>array(
......,
'viewRenderer'=>array(
'class'=>'CPradoViewRenderer',
),
),
);
Som standard, kommer CPradoViewRenderer att kompilera vyfilernas källkod och spara de resulterande PHP-filerna i runtime-katalogen. bara när vyfilernas källkod har ändrats, kommer PHP-filerna att genereras på nytt. Därför åsamkar CPradoViewRenderer mycket liten prestandaförlust.
Tips: Medan CPradoViewRenderer huvudsakligen introducerar ett antal nya mall-taggar för att göra det lättare och snabbare att skriva vyer, kan man fortfarande skriva PHP-kod precis som vanligt i vyernas källkod.
I det följande introduceras de mall-taggar som stöds av CPradoViewRenderer.
Korta PHP-taggar är kortformer för att skriva PHP-uttryck och -satser i en vy.
Uttrycks-taggen <%= expression %>
översätts till <?php echo expression ?>
;
medan sats-taggen <% statement %>
översätts till <?php statement ?>
. Till
exempel,
<%= CHtml::textField($name,'value'); %>
<% foreach($models as $model): %>
översätts till
echo CHtml::textField($name,'value'); foreach($models as $model):
Komponent-taggar används för att infoga en widget i en vy. De använder följande syntax:
<com:WidgetClass property1=value1 property2=value2 ...>
// body content for the widget
</com:WidgetClass>
// a widget without body content
<com:WidgetClass property1=value1 property2=value2 .../>
där WidgetClass
specificerar widgetklassens namn eller
sökvägsalias, och där initialvärden för propertyn
kan bestå av antingen strängar mellan citationstecken eller PHP-uttryck omgivna
av ett par krumparenteser. Till exempel,
<com:CCaptcha captchaAction="captcha" showRefreshButton={false} />
översätts till
$this->widget('CCaptcha', array( 'captchaAction'=>'captcha', 'showRefreshButton'=>false));
Märk: Värdet på
showRefreshButton
specificeras till{false}
i stället för"false"
eftersom det senare innebär en sträng i stället för ett boolskt värde.
Cache-taggar är kortformer för att använda fragmentcachning. Deras syntax är som följer,
<cache:fragmentID property1=value1 property2=value2 ...>
// content being cached
</cache:fragmentID >
där fragmentID
skall vara en identifierare som oförväxelbart identifierar
innehållet som cachas, och där property-värdeparen används till att konfigurera
fragmentcachen. Till exempel,
<cache:profile duration={3600}>
// user profile information here
</cache:profile >
översätts till
if($this->cache('profile', array('duration'=>3600))): // user profile information here $this->endCache(); endif;
Snarlikt cache-taggar är urklipps-taggar kortformer för anrop till CBaseController::beginClip och CBaseController::endClip i en vy. Syntaxen är som följer,
<clip:clipID>
// content for this clip
</clip:clipID >
Där clipID
är en identifierare som oförväxelbart identifierar klippinnehållet.
Urklipps-taggarna översätts till
$this->beginClip('clipID'); // content for this clip $this->endClip();
Kommentars-taggar används för att skriva vykommentarer som endast skall vara synliga för utvecklare. Kommentar-taggar kommer att vara borttagna när vyerna presenteras för slutanvändare. Syntaxen för kommentars-taggar är som följer,
<!---
view comments that will be stripped off
--->
Signup or Login in order to comment.