2009-10-28 3 views
2

Я не могу настроить динамическую переменную $template сайта, построенного на Kohana.Настройка имени шаблона Kohana динамически

Если я расширить класс Template_Controller, я могу установить имя шаблона, как это:

public $template = 'template_file_name'; 

Но я не могу установить его динамически как:

public $template = $this->setTemplate(); 

или

switch($var): 
    default: 
     public $template = 'filename'; 
     break; 
endswitch; 

Изменение переменной $template с использованием $this->template в конструкторе разбивает T emplate_Controller как-то:

Fatal error: Call to a member function render() on a non-object

Мне нужно установить шаблон файл на основе переменного набора в конструкторе, или, возможно, вытащил из внешней библиотеки.

Любые идеи, как сделать это возможным?

+0

Я ничего не знаю о Kohana, но setTemplate() действительно возвращает значение? Также вы должны объявить переменную после открытия класса (но вне конструктора): 'public $ template;' и затем установить его в конструкторе: '$ this-> template = 'template';'. –

+0

Хм, это должно быть возможно ..! Что происходит, когда вы пытаетесь? Я использую для этого множество свойств, включая отношения ORM. Никогда не пробовал с именем храма, хотя ... – Cambiata

+0

Нет, setTemplate не возвращает значение - я просто попытался вернуть динамическое значение здесь из внутренней функции. Изменение переменной $ template с использованием шаблона $ this-> в конструкторе каким-то образом разбивает Template_Controller: Неустранимая ошибка: вызов функции-объекта-члена() для объекта без объекта – jmccartie

ответ

8

эта ссылка может иметь ответ:

http://stii.co.za/php/overriding-default-template-in-kohana-php/

просто запустить свой шаблон конструктор, как это:

public function __construct() 
    { 
     $this->template = 'foobar'; 
     parent::__construct(); 
    } 
+0

так просто - спасибо. (установка шаблона перед родительским конструктором) – jmccartie

5

я делаю это так:

public function action_myaction() 
{ 
    // template 
    $this->template = "template/overlay"; 
    parent::before(); 

    // display 
    $this->template->title = 'My Action'; 
    $this->template->content = View::factory('myaction') 
} 

Дополнительная информация здесь: http://www.workinprogress.ca/kohana32/

+0

Спасибо! Оно работает ! – Winston

Смежные вопросы