В предыдущей заметке мы рассмотрели установку framework-а Kohanaphp. А так же познакомились с тем, что из себя представляют контроллер, вид и модель в Kohana. Узнали как передавать параметры в методы контроллеров через строку браузера. И как передавать переменные в файл вида.
Если вы не читали ту заметку, то обязательно прочтите и проделайте все шаги. Без них вам сложно будет понять о чем идет речь в данной заметке. А в ней я начну рассказывать как Kohana помогает вам решать повседневные задачи.
При создании живого проекта на этом фреймворке одной из первых встает проблема создания шаблона. Ведь не удобно в каждом view-файле указывать то, что можно вынести в footer и header. В этой статье мы рассмотрим такую возможность Kohana как шаблоны (templates).
Для того, чтобы понять как это работает, давайте обратимся к контроллеру welcome.php, который был упомянут в прошлой заметке. Откройте у себя этот файл.
Я приведу урезанный вариант кода этого контроллера
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class Welcome_Controller extends Template_Controller { // Устанавливаем имя шаблона, который будем использовать public $template = 'kohana/template'; public function index() { // Подключаем view-файл с контентом $this->template->content = new View('welcome_content'); // Передаем перемнные как и в обычный view $this->template->title = 'Welcome to Kohana!'; $this->template->content->links = array ( 'Home Page' => 'https://kohanaphp.com/', 'Documentation' => 'https://docs.kohanaphp.com/', 'Forum' => 'https://forum.kohanaphp.com/', 'License' => 'Kohana License.html', 'Donate' => 'https://kohanaphp.com/donate.html', ); } } |
Здесь важно что данный контроллер наследуется от класса Template_Controller, который описан в файле system/controllers/template.php. Имя шаблона и путь к нему задается в строке 4 контроллера welcome.
Если мы посмотрим в папку system/views/kohana, то там и будет наш шаблон template.php. В этом файле есть строки
1 2 | <h1><?php echo html::specialchars($title) ?></h1> <?php echo $content ?> |
Они выводят содержимое переменных title и content, которые мы передаем в контроллере welcome. Как мы помним, последняя из этих переменных является объектом View.
Вы заметили, что для нее не вызывается явно метод render()? Дело в том, что если один View-объект является свойством другого, то метод render() буддет вызван автоматически с вызовом этого метода для View-объекта верхнего уровня. Но для него тоже не видно вызова этого метода, да? Если вы загляните в system/controllers/template.php, то увидите, что у Template_Controller есть свойство $this->auto_render == TRUE, которое говорит само за себя.
Итак, вернемся к View-объекту content. Он указывает на application/views/welcome_content.php. И там мы видим только код для внутренней части страницы.
Таким образом мы выносим код view-файлов, который повторяется на каждый странице в файл шаблона и затем ссылаемся к нему. Тем самым мы избавляемся от дублирования кода, а так же получаем простой способ смены шаблона. Это достигается сменой значения свойства $template контроллера.
Читайте о Kohanaphp на страницах этого блога! Я буду рассказывать о том как облегчить вашу сложную работу с помощью мощи Kohana. Чтобы не пропустить следующую статью подпишитесь на RSS или email.
Tags: Kohanaphp, PHP, php-framework