Tworzymy własny szablon
Szablony są przechowywane w katalogu themes. Nazwa szablonu jest taka jak nazwa podkatalogu. Czyli szablon ttst będzie w katalogu themes/ttst. Struktura tego katalogu jest taka jak jak dla układu (layout) aplikacji. Czyli układ strony jest w pliku views/layouts/main.php (dla szablonu ttst pełna ścieżka do pliku będzie: themes/ttst/views/layouts/main.php). Najprostszy szablon musi zawierać tylko jedną instrukcję php:
<?php echo $content; ?>
Wraz z minimalną strukturą html:
<html>
<head><meta charset=utf-8" /></head>
<body>
<?php echo $content; ?>
</body>
</html>
Aby stworzyć szablon należy więc:
1. Utworzyć katalog ttst w katalogu themes.
2. Utworzyć w katalogu themes/ttst podkatalogi views/layouts/.
3. Do katalogu themes/ttst/views/layouts/ kopiujemy plik protected/views/layouts/main.php.
4. Zmieniamy plik themes/ttst/views/layouts/main.php według swoich potrzeb.
5. Ustawiamy w parametrach nazwę szablonu. W tym celu w pliku protected/config/main.php dopisujemy:
'theme'=>'ttst',
Często do pliku układu/szablonu (main.php) dodajemy własne skrypty (pliku JavaScript) i arkusze stylów (css). Możemy teoretycznie umieścić je w dowolnym miejscu, podając w pliku szablonu ścieżkę (url) do nich. Należałoby jednak należy podać pełny adres – przez co tracimy walor uniwersalności. Jeśli umieszczamy pliki (test.css i test.js) w podkatalogach css i js szablonu ttst, musimy podać:
<link href="/themes/ttst/css/test.css" rel="stylesheet" type="text/css">
<script type="javascript" src=="/themes/test/js/jquery.smint.js"></script>
To jednak zawiedzie, jeśli url nie będzie wskazywał na katalog główny (na przykład zamiast http://www.example.com będzie to http://www.example.com/page1. Możemy użyć zmiennych PHP:
<script type="javascript" src="http://<?php
print $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; ?> themes/test/js/jquery.smint.js"></script>
Framework Yii daje jednak lepsze rozwiązanie: rejestracji plików (http://www.yiiframework.com/wiki/572/how-to-include-javascript-css/). Pozwala on na:
-
łatwiejsze ustalenie ścieżki do plików,
-
dołączanie każdego pliku tylko raz,
-
umieszczanie linków do plików w nagłówku z dowolnego miejsca aplikacji.
Przykład:
<?php
$baseUrl = Yii::app()->theme->baseUrl;
// url aplikacji (a nie szablonu): Yii::app()->baseUrl;
$cs = Yii::app()->getClientScript();
$cs->registerScriptFile($baseUrl.'/js/test.js');
$cs->registerCssFile($baseUrl.'/css/test.css'); ?>
Obiekt ClientScript (typu CclientScript) ma jeszcze jedną funkcję rejestracji: registerCoreScript. Umożliwia ona zarejestrowanie skryptu bez w aktualnej wersji. Najczęściej dotyczy to skryptu jquery:
$cs = Yii::app()→clientScript;
// w razie problemów: wskazać gdzie szukać skryptów
// $cs->coreScriptPosition = CClientScript::POS_HEAD;
$cs->registerCoreScript('jquery');