Как лучше реализовать шаблоны в kohana 3.1?

Привет хабр!

Изучаю фреймворк Kohana 3.1. Возник вопрос как лучше реализовать шаблоны через Controller_template.



Подробнее:

Есть базовый контроллер для шаблонов

class Controller_Design extends Controller_Template {<br><br>
	public $template	= 'design';<br>
	public $auto_render	= TRUE;<br><br>
	protected $current_page;<br><br>
	public function before()<br>
	{<br>
		parent::before();<br><br>
		// Если запрос внутренний или ajax, то не выводим шаблон<br>
		if( ! $this->request->is_initial() or $this->request->is_ajax())<br>
		{<br>
			$this->auto_render = FALSE;<br>
		}<br><br>
		$this->template->title            = '';<br>
		$this->template->meta_keywords    = '';<br>
		...<br>
	}<br><br>
	public function after()<br>
	{<br>
		if($this->auto_render)<br>
		{<br>
			// Default scripts and css's<br>
			$styles = array(<br>
				'public/skin/style.css' => 'screen',<br>
			...<br>
		} else {<br>
			$this->response->body( $this->template->content );<br>
		}<br><br>
         parent::after();<br>
	}<br>
}<br>


Дальше все контроллеры выводящие какие либо страницы сайта от него наследуются

class Controller_Profile extends Controller_Design {<br><br>
	protected $current_page = 'profile';<br><br>
	public function action_index()<br>
	{<br>
		$this->template->styles['public/skin/css/profile.css'] = 'screen';<br>
		$this->template->content = View::factory('pages/profile');<br>
	}<br><br>
}<br>


Проблемы возникают при попытке реализовать hmvc как я его понимаю, т.е:

class Controller_Main extends Controller_Design {<br>
	protected $current_page = 'main';<br>
	public function action_index()<br>
	{<br>
		if( ! Auth::instance()->logged_in())<br>
		{	// If user not logged, then show the page for guests<br>
			$this->template->content = View::factory('pages/main');<br>
		}<br>
		else<br>
		{	// Else show page, like url is /profile<br>
			$this->template->content = Controller::factory('profile')->execute();<br>
		}<br>
	}<br><br>
}<br>


Проблема возникает когда надо от «суб-контроллера» получить список стилей/скриптов, meta и т.д

Что я делаю не так?
  • Вопрос задан
  • 4790 просмотров
Решения вопроса 1
WebSpider
@WebSpider
Наверно всё же имелось ввиду Request::factory('profile')

Что значит «получить от суб-контроллера» список стилей? Вы делаете обычный подзапрос, он возвращает отреднеренную страницу (или часть). Точно так же можно сделать и внешний запрос, типа Request::factory('http://yandex.ru'). Уточните, пожалуйста, вопрос
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
aktuba
@aktuba
Что-за дурацкая выводить стили и скрипты через контроллеры… Если будете шаблон менять — полезете по всему коду править? А за "$this->template->styles['public/skin/css/profile.css'] = 'screen';" по рукам надо битой бить! Либо не используйте вообще (H)MVC, либо следуйте правилам. За внешний вид полностью отвечает V(iew).
Ответ написан
WebSpider
@WebSpider
2aktuba: тоже считаю неправильным задавать части логики отображения в контроллере, поэтому выше и посоветовал пользоваться шаблонизаторами типа Твига. Но тем не менее, эти ссылки присутствуют в официальной документации Коханы:
http://kerkness.ca/kowiki/doku.php?id=template-site:basic_page_controller
http://kerkness.ca/kowiki/doku.php?id=template-site:extending_the_template_controller
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы