Фреймворк Кохана идет сразу с со специальным контроллером шаблонов (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>
Удобно ? По-моему вполне. А если вдруг нужно, чтобы какие-то переменные было видно во всех файлах Вида, можно использовать Глобальные переменные Вида. Их мы и рассмотрим в следующем уроке.
<< Назад | Вперед >> |
Пожалуйста, зарегистрируйтесь для комментирования.
Уф! Нашел ошибку. я вместо
class Controller_Welcome extends Controller_Template {
оставил
class Controller_Welcome extends Controller {
для тех кто сделал также =)
внатуре, пасиба чувак
При наследовании от Controller_Template вызывает ошибку
бороду сбрей и все получится