2009-12-08 94 views
-2

我正在使用Kohana的網站的管理部分。我在views文件夾中創建了一個「admin」子文件夾來存儲管理視圖。我還使用了模板控制的修改實例稱爲管理模板控制管理部分,在這裏看到:Kohana - 視圖文件夾內的子文件夾

abstract class Admin_Template_Controller extends Template_Controller 
{ 
    public $template = 'admin/template'; 

    public function __construct() 
     { 
      parent::__construct(); 

      $this->template = View::set_filename($this->template); 
      $this->template->css = 'adminstyles'; 
      $this->template->js = 'html5'; 
     } 
} 

不過,我收到的CSS變量不是「管理中定義的錯誤/模板「文件。此時,模板文件與視圖文件夾中的模板文件相同,我已成功用於創建大部分前端,因此它不在那裏。另外,當我使用視圖文件夾中的模板文件(用於前端)時,它會正確加載頁面,這一點很重要。

這使我相信它與位於子文件夾中的模板文件有關。這令我感到困惑,因爲我成功從相同的「views/admin」文件夾加載另一個視圖文件。該文件不包含任何變量,所以也許這就是它加載的原因。

我已經試過

$this->template = View::factory($this->template); 

要加載新的模板文件也,但它返回一個錯誤的觀點必須渲染之前被調用。我認爲這是由於自動渲染,但我想要它。

任何想法將是一個很大的幫助。顯然,我可以將該文件移出admin文件夾並重新命名,但這並不能幫助我瞭解正在發生的事情。

回答

0

我找到了我的問題的答案。該行:

$this->template = View::set_filename($this->template); 

需要刪除。也許它會再次加載模板並取消變量。我不確定。不過,我認爲該行對於更改已擴展的模板控制器中已定義的模板文件名是必需的。我認爲我在Kohana論壇上正確地閱讀了這一點。我想不是。希望這可以幫助別人。

2

這行你刪除:

$this->template = View::set_filename($this->template); 

被打破,因爲set_filename()不是一個靜態方法;應該在視圖的現有實例上調用該方法,因爲該方法返回自身(對於方法鏈接有用)。但是,您並不需要首先這樣做,因爲您要擴展Template_Controller類,該類會在您使用parent :: _ construct()調用的構造函數中爲您創建模板視圖。

如果您有現有的模板對象,但只想更改與其關聯的視圖而無需重新創建整個新對象,則只需使用set_filename()方法。

最後,auto_render選項會觸發控制器掛鉤,在控制器完成時呈現視圖;這對控制器類的任何方法內的代碼都沒有任何影響。

0

視圖子文件夾應該與控制子文件夾中視圖的控制器完全一致。

相關問題