Контроллер Шаблонов

Комментарии: 32  Просмотры: 45 895

Фреймворк Кохана идет сразу с со специальным контроллером шаблонов (Template Controller), который позволяет намного проще работать с файлами шаблонов и делает код в Контроллере, где идет работа с шаблонами, гораздо компактнее. Предлагаю разобрать все это на примерах. Откройте наш старый знакомый Контроллер Welcome и измените код на следующий:

class Controller_Welcome extends Controller_Template {
 
    public function action_index()
    {
        $content = View::factory('welcome')
              ->bind('age', $age);
        $age = 'больше 18';
        $content->name = 'Васька';
        $this->template->content = $content;
    }
 
} // End Welcome

В папке с Видами создайте еще один файл с названием template.php и напишите в нем следующее:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Работаем с Контроллером Шаблонов</title>
</head>
 
<body>
    <?php echo $content; ?>
</body>
</html>

Теперь можно обновить нашу страницу. Визуально ничего не поменялось (разве что у страницы появился title — Работаем с Контроллером Шаблонов). Но если посмотреть html-код страницы, видно, что внутри template.php, между тегами body, вывелся шаблон welcome.php.

Что мы поменяли? Прежде всего изменилось наследование в классе Controller_Welcome. Теперь наследуется не Controller, а Controller_Template. Если заглянуть в файл /system/classes/kohana/controller/template.php с классом Controller_Template, видно, что он в свою очередь наследует уже знакомый нам класс Controller. Также видно, что шаблоном по умолчанию там назначен template (поэтому мы и назвали наш файл template.php):

/**
 * @var  View  page template
 */
public $template = 'template';

Если мы хотим назвать базовый шаблон по другому, например main.php, то в Контроллере Welcome в самом верху нужно прописать его как базовый шаблон, т.е. просто

public $template = 'main';

и теперь можно смело переименовывать файл.

Что все это нам дает ? Возможность очень удобно передавать данные как в базовый шаблон, так и в другие шаблоны. Например так:

class Controller_Welcome extends Controller_Template {
 
    // Определяем шаблон по умолчанию
    public $template = 'main';
 
    public function action_index()
    {
        $content = View::factory('welcome');
 
        // Передаем данные в шаблон welcome.php
        $content->age = 'больше 18';
        $content->name = 'Васька';
 
        // Передаем данные в шаблон по умолчанию - main.php
        $this->template->title = 'Работаем с Контроллером Шаблонов';
        $this->template->description = 'Учимся передавать данные в шаблоны';
        $this->template->content = $content;
    }
 
} // End Welcome

и в файле шаблона main.php тоже немножко поменяем:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php echo $title; ?></title>
<meta name="description" content="<?php echo $description; ?>" />
</head>
 
<body>
    <?php echo $content; ?>
</body>
</html>

Удобно ? По-моему вполне. А если вдруг нужно, чтобы какие-то переменные было видно во всех файлах Вида, можно использовать Глобальные переменные Вида. Их мы и рассмотрим в следующем уроке.

<< Назад | Вперед >> | Обсудить на форуме


К записи оставлено 32 коммент.

Уф! Нашел ошибку. я вместо
class Controller_Welcome extends Controller_Template {
оставил
class Controller_Welcome extends Controller {

для тех кто сделал также =)

внатуре, пасиба чувак

При наследовании от Controller_Template вызывает ошибку

ErrorException [ 8 ]: Array to string conversion ~ SYSPATH\classes\Kohana\Log\Writer.php [ 81 ]

бороду сбрей и все получится



Оставить комментарий или два

Пожалуйста, зарегистрируйтесь для комментирования.