我在控制器里把layout属性设置成false,但是还是利用了布局文件,头和尾都显示出来了
看不懂,show your code!!!!
@water #1楼
他的意思是:比如。
1、在appfront/local/local_modules本地目录下想重写某个模块的controller,而且他还不想渲染layout的布局。 2、之所以他设置无效是因为fecshop\app\appfront\modules\AppfrontController这个类的findLayoutFile方法重写了yii2的方法。 3、重写的方法里面一定会有一个layout布局文件被渲染出来。 问题来了:本来他就不想要任何的layout布局,比如登陆页面,只需要自己的render,跟任何的公共布局都没关系。 解决:希望能在fecshop\app\appfront\modules\AppfrontController类中的方法findLayoutFile加一段代码: if(Yii::$service->page->theme->layoutFile === false){ return false; }
补充:加了代码后,就可以在重写的controller中加上\Yii::$service->page->theme->layoutFile = false;
其实我也遇到这个问题,不知道还有什么地方可以直接设置不需要加载layout的布局内容。还望water赐教。
@jackqin #3楼 你不使用view,就不会加载layout,
譬如controller中:
https://github.com/fecshop/yii2_fecshop/blob/master/app/appfront/modules/Cms/controllers/ArticleController.php
// 网站信息管理 public function actionIndex() { $data = $this->getBlock()->getLastData(); return $this->render($this->action->id, $data); }
你把代码return $this->render($this->action->id, $data); 去掉,就不会加载layout这些,layout都是rener函数调用进而访问的
return $this->render($this->action->id, $data);
rener
@Terry [#4楼](#comment4) 我先说一下场景。不知道这么描述是否能解释清楚,先说吧:
1、一个首页、一个登录页,两功能。从商城首页点登录页面的过程中
2、layouts布局中有home.php。这个事全局的布局文件。只要在商城中都通用
3、现在去到登录页,我登录页全部的布局跟home的header、body(main)布局都不一样,这时候我只想渲染我自己的theme下的account/login模板文件。不需要任何的layouts布局
4、总结:只想要渲染自己的模板布局,不需要加载layout的公共布局。
1.还是用layout,只不过这个layout里面是空的,用 blank layout
https://github.com/fecshop/yii2_fecshop/blob/master/app/appfront/theme/base/front/layouts/blank.php
在controller的相应action的第一行加入代码:
Yii::$service->page->theme->layoutFile = 'blank.php';