Korzystanie z alternatywnych składni szablonów

Yii pozwala deweloperom na korzystanie ze swojej ulubionej składni szablonów (np. Prado, Smarty) podczas pisania kontrolera lub widoków widżetu. Jest to możliwe poprzez utworzenie
i zainstalowanie komponentu aplikacji viewRenderer.

Generator widoków przechwytuje wywołania metody CBaseController::renderFile, kompiluje plik widoku przy użyciu niestandardowej składni szablonów i generuje wynik kompilacji.

Info: Rekomenduje się używanie niestandardowej składni szablonów tylko podczas
pisania widoków, które są rzadko używane ponownie. W przeciwnym przypadku, ludzie którzy chcą użyć ponownie widoku, zmuszeni są do używania tej samej, niestandardowej składni szablonów w swojej aplikacji.

W dalszej części, pokażemy jak używać CPradoViewRenderer, widoku generatora, który umożliwia deweloperowi używania składni szablonu podobnej do tej z frameworku PRADO. Dla ludzi, którzy chcą utworzyć swoje własne generatory widoków, CPradoViewRenderer jest dobrym przykładem.

1. UżywanieCPradoViewRenderer

Aby móc używać CPradoViewRenderer musimy jedynie skonfigurować aplikację w następujący sposób:

return array(
    'components'=>array(
        ......,
        'viewRenderer'=>array(
            'class'=>'CPradoViewRenderer',
        ),
    ),
);

Domyślnie, CPradoViewRenderer będzie kompilował pliki źródłowe widoków i zapisywał wynikowy plik PHP w katalogu runtime. Tylko wtedy, gdy plik źródłowy widoku zmienił się, plik PHP będzie przegenerowany. Dlatego też używanie CPradoViewRenderer pociąga za sobą niewielki spadek wydajności.

Wskazówka: Podczas gdy CPradoViewRenderer głównie dostarcza nowe tagi szablonu w celu tworzenia widoków w sposób łatwiejszy i szybszy, wciąż możesz używać kodu PHP w dotychczasowy sposób w plikach widoku.

W dalszej części przedstawiamy taki szablonów, które są wspierane przez CPradoViewRenderer.

Skrócone tagi PHP

Skrócone tagi PHP są skrótami do pisania wyrażeń PHP w widoku. Tag wyrażenia <%= expression %> tłumaczony jest na <?php echo expression ?>; natomiast tag z wyrażeniem <% statement %> jest tłumaczony na <?php statement ?>. Na przykład:

<%= CHtml::textField($name,'value'); %>
<% foreach($models as $model): %>

tłumaczone jest na

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

Tagi komponentów

Tagi komponentów używane są do wstawiania widżetu do widoku. Używają one następującej składni:

<com:WidgetClass property1=value1 property2=value2 ...>
    // zawartość ciała widżetu
</com:WidgetClass>
 
// widżet bez zawartości ciała
<com:WidgetClass property1=value1 property2=value2 .../>

gdzie WidgetClass określa klasę widżetu lub alias ścieżki klasy, a inicjalna wartość właściwości może być zarówno umieszczonym w cudzysłowie łańcuchem lub też wyrażeniem PHP zamkniętym w parę okrągłtych nawiasów. Na przykład:

<com:CCaptcha captchaAction="captcha" showRefreshButton={false} />

would be translated as

<?php $this->widget('CCaptcha', array(
    'captchaAction'=>'captcha',
    'showRefreshButton'=>false)); ?>

Uwaga: Wartość showRefreshButton określona jest jako {false} zamiast "false" ponieważ druga oznacza ciąg znaków zamiast wartości boolowskiej.

Tagi buforowania

Tagi buforowania są skrótami używanymi do buforowania fragmentarycznego. Ich składnia jest następująca:

<cache:fragmentID property1=value1 property2=value2 ...>
    // zawartość, która będzie zbuforowana
</cache:fragmentID >

gdzie fragmentID powinien być identyfikatorem, który jednoznacznie definiuje zawartość, która zostanie zbuforowana a part właściwość-wartość są używane do konfiguracji dla buforowania fragmentarycznego, na przykład

<cache:profile duration={3600}>
    // użyj tutaj informacji z profilu
</cache:profile >

będzie przetłumaczone na

<?php if($this->cache('profile', array('duration'=>3600))): ?>
    // zawatość profilu użytkownika
<?php $this->endCache(); endif; ?>

Tagi klipsa (ang. Clip Tags)

Tag jak tagi buforujące, tagi klipsa są skrótem do wywołania metody CBaseController::beginClip oraz CBaseController::endClip w widoku. Składnia dla nich jest następująca:

<clip:clipID>
    // zawartość klipsa
</clip:clipID >

gdzie clipID jest identyfikatorem, który jednoznacznie identyfikuje zawartość klipsa. Tagi klipsa będą przetłumaczone jako

<?php $this->beginClip('clipID'); ?>
    // zawartość klipsa
<?php $this->endClip(); ?>

Tagi komentarza

Tagi komentarza są używane do pisanie komentarzy w widoku, które powinny być widoczne jedynie dla deweloperów. Tagi komentarza będą wycięte podczas wyświetlania widoku użytkownikowi końcowemu. Składnia dla tagów komentarza jest następująca,

<!---
komentarz w widoku, który zostanie wycięty
--->
$Id: topics.prado.txt 417 2008-12-28 05:29:16Z qiang.xue $

Be the first person to leave a comment

Please to leave your comment.