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->beginCache('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
--->

2. Mieszanie formatów szablonów

Poczynając od wersji 1.1.2 możliwe jest mieszanie użyć alternatywnych składni szablonów ze zwykłą składnią PHP. Aby móc to zrobić, właściwość CViewRenderer::fileExtension zainstalowanego renderera widoków musi zostać skonfigurowana poprzez wartość inną niż .php. Na przykład, jeśli właściwość ustawiona jest jako .tpl, wtedy każdy plik widoku kończący się .tpl będzie generowany przy użyciu zainstalowanego renderera, podczas gdy pozostałe pliki kończące się .php będą traktowane jak zwykłe pliki widoków PHP.

$Id: topics.prado.txt 3226 2011-05-18 10:37:47Z mdomba $

Be the first person to leave a comment

Please to leave your comment.