在Yii中,当你使用呈现一个小部件或控制器,你只需要给出文件名(不含.PHP)作为参数,如:Yii:如何更改渲染函数的默认路径?
$this->render('forum', array('data'=>$data));
例如,当使用我在课堂上这个功能扩展CWidget,Yii会试图找到forum.php里面/保护/组件/视图
我怎么能改变这个默认路径到其他地方?为我所有的小部件类(所有类扩展CWidget)?以及如果我只想改变我的一些小部件的路径呢?
在Yii中,当你使用呈现一个小部件或控制器,你只需要给出文件名(不含.PHP)作为参数,如:Yii:如何更改渲染函数的默认路径?
$this->render('forum', array('data'=>$data));
例如,当使用我在课堂上这个功能扩展CWidget,Yii会试图找到forum.php里面/保护/组件/视图
我怎么能改变这个默认路径到其他地方?为我所有的小部件类(所有类扩展CWidget)?以及如果我只想改变我的一些小部件的路径呢?
你需要重写CWidget类的getViewPath方法
如: -
class CMyWidget extends CWidget{
// Returns the directory containing the view files for this widget.
public function getViewPath($checkTheme=false){
// this method does the task of finding the view files containing directory.
// so override it
}
// This method will look for the view under the widget's getViewPath viewPath.
public function getViewFile($viewName)
{
// override it
}
}
最后创建部件时,你将不得不延长CMyWidget类,而不是CWidget
你可以简单地做一个$this->render('//path/forum', array('data'=>$data));
,其中//
指向主视图目录,通常为protected/views
。
您也可以使用别名路径以点符号:
$this->render('application.myviews.test'); // would render protected/myviews/test.php
$this->render('webroot.test'); // would render htdocs/test.php
我的视图文件如何保护/视图外? – 2014-09-02 06:39:12
您可以使用点符号。我更新了我的答案。 – 2014-09-02 09:44:39
我可以把getViewPath()方法中,我创建的部件? 或者我应该做一个setViewPath()方法来改变设置? – 2014-09-02 02:17:33
是的,您可以重写您创建的小部件中的getViewPath(),但是如果您必须创建很多小部件,则必须在每个小部件中重写相同的部件。这将是有问题的,我认为 – 2014-09-02 04:27:12