2012-10-02 38 views
1

我想知道yii組件是否也支持主題功能?在我的環境中,組件僅考慮component/views/文件夾中的文件。
既然我也在使用主題,那麼告訴組件查找themes/themeName/文件夾下的視圖會很好。Yii:組件的主題支持?

使用下面的方法我可以解決這個問題,但它肯定不會覺得這是做這件事的方法。

protected function renderContent() 
{ 
    $view = './../../../themes/'.Yii::app()->theme->name.'/views/viewName'; 
    $this->render($view); 
} 

您知道更優雅的解決方案嗎?

+2

不幸的是,yii不支持對組件進行主題化。但它在小部件上運行 – GBD

回答

3

組件上沒有任何主題。主要是因爲他們不打算爲任何內容呈現內容。雖然沒有錯,但有時它是必需的。

最簡單的解決辦法可能只是使其更具可讀性,使用路徑別名總是幫助:

protected function renderContent() 
{ 
    $view = 'webroot.themes.'.Yii::app()->theme->name.'.views.viewName'; 
    $this->render($view); 
} 

或者你可以添加一個方法的組成部分,或延長CComponent得到它的所有組件,如果你想它:

public function getViewsPath(){ 
    return 'webroot.themes.'.Yii::app()->theme->name.'.views'; 
} 

或者你可以設定一個路徑別名:

Yii::setPathOfAlias('theme','webroot.themes.'.Yii::app()->theme->name); 

則Y ou可以在應用程序中的任何位置使用,只要您在此過程中足夠早的時候運行它。

+0

你會在哪裏運行'Yii :: setPathOfAlias()'? – jrn

+1

這完全取決於您的應用程序。在組件類文件的頂部?但是,它不會是全局的,只是本地的,無論在該組件之後加載什麼。可能在'CController'的擴展版本中,雖然不適用於控制檯命令。這有點麻煩,但如果真的沒有其他地方,它總是可以放在配置文件的頂部。 – Paystey

+0

太好了,非常感謝您的非常詳細和有益的答案! :) – jrn