0 follower

Alternativ mallsyntax

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.

1. Använda 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

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

<?php echo CHtml::textField($name,'value'); ?>
<?php foreach($models as $model): ?>

Komponent-taggar

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

<?php $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

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

<?php if($this->cache('profile', array('duration'=>3600))): ?>
    // user profile information here
<?php $this->endCache(); endif; ?>

Urklipps-taggar

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

<?php $this->beginClip('clipID'); ?>
    // content for this clip
<?php $this->endClip(); ?>

Kommentars-taggar

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
--->