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');

Ostatnia modyfikacja: piątek, 29 styczeń 2016, 20:40