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|CWebApplication::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|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](http://www.pradosoft.com/). 
Dla ludzi, którzy chcą utworzyć swoje własne generatory widoków, [CPradoViewRenderer] 
jest dobrym przykładem.

Używanie`CPradoViewRenderer`
--------------------------

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

~~~
[php]
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](/doc/guide/basics.convention#directory). 
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.

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

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

tłumaczone jest na

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

### Tagi komponentów

Tagi komponentów używane są do wstawiania [widżetu](/doc/guide/basics.view#widget) do widoku. Używają one następującej składni: 

~~~
[php]
<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 ](/doc/guide/basics.namespace) 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: 

~~~
[php]
<com:CCaptcha captchaAction="captcha" showRefreshButton={false} />
~~~

would be translated as

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

> Note|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](/doc/guide/caching.fragment).
Ich składnia jest następująca:  

~~~
[php]
<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

~~~
[php]
<cache:profile duration={3600}>
	// użyj tutaj informacji z profilu
</cache:profile >
~~~
będzie przetłumaczone na 

~~~
[php]
<?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:

~~~
[php]
<clip:clipID>
	// zawartość klipsa
</clip:clipID >
~~~

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

~~~
[php]
<?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,

~~~
[php]
<!---
komentarz w widoku, który zostanie wycięty
--->
~~~

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.


<div class="revision">$Id: topics.prado.txt 3226 2011-05-18 10:37:47Z mdomba $</div>