В предыдущей заметке мы рассмотрели установку frameworkKohanaphp. А так же познакомились с тем, что из себя представляют контроллер, вид и модель в 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: , ,

Comments are closed.