как использовать разные шаблоны для каждого из представлений внутри контроллера в Kohana 3?

у меня есть один контроллер шаблонов (например, Controller_DefaultTemplate), а другие (например, Controller_Admin) расширяют его. В учебниках (например, здесь http://www.dealtaker.com/blog/2009/12/30/kohana-php-3-0-ko3-tutorial-part-3/) они делают это в Controller_DefaultTemplate:

public $template = 'admin/index';

но мне нужны разные представления для разных действий внутри

    class Controller_Admin extends Controller_DefaultTemplate {
    function action_material(){ 
        $template = 'admin/material';
}
    function action_newsedit(){ 
        $template = 'admin/newsedit';
}

... и так далее, можно ли?


person shershen    schedule 01.03.2011    source источник


Ответы (3)


Другой способ - установить имя файла View с помощью метода set_filename(). Используя стиль зомбора, вы потеряете все переменные, которые были установлены для $this->template.

public function action_newsedit()
{
    // note that $this->template is already View object as we are in Controller_Template
    $this->template->set_filename('admin/newsedit');
}
person biakaveron    schedule 02.03.2011

Конечно, вот так:

public function action_newsedit()
{
    $this->template = new View('admin/newsedit');
}

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

person zombor    schedule 02.03.2011
comment
в обоих случаях я получаю Kohana_View_Exception [ 0 ]: The requested view template could not be found ошибку - person shershen; 02.03.2011
comment
Вам нужен уже существующий шаблон по умолчанию (before() все еще нужно запустить и создать файл шаблона). По умолчанию это views/template.php - person zombor; 03.03.2011

Шаблон — это оболочка для всех ваших представлений. Внутри шаблона у вас будет <?php echo $content; ?>, а затем в действии вы просто вызовете свое представление для размещения внутри этого шаблона. $this->template->content = View::factory('page'); Насколько я понимаю, так оно и должно работать.

person mikelbring    schedule 03.03.2011