fecshop的layout是基于Yii2框架,进行了一些封装而来
下面说一下原理:
1.fecshop是分模块的,目前都是在模块里面进行,指定layout
譬如:https://github.com/fecshop/yii2_fecshop/blob/master/app/appfront/modules/Cms/Module.php
Yii::$service->page->theme->layoutFile = 'home.php';
指定的是模板路径
下面的layouts/home.php
fecshop appfront入口的默认模板路径是:https://github.com/fecshop/yii2_fecshop/tree/master/app/appfront/theme/base/front/
,因此,进入这个文件夹后,你可以看到 layouts/home.php
2.重写模板layout文件,譬如重写:layouts/home.php
你可以参看fecshop的多模板机制:http://www.fecshop.com/doc/fecshop-guide/develop/cn-1.0/guide-fecshop-theme.html
3.修改layout文件,指定一个新文件
3.1你可以在layout中新建一个php文件(你可以在本地模板路径中新建即可,不要在vendor新建,原理参看上面的fecshop多模板机制)
3.2你可以以模块的方式替换,也就是在Module.php
中,譬如上面的Yii::$service->page->theme->layoutFile = 'home.php';
重做设置指定即可,譬如设置:Yii::$service->page->theme->layoutFile = 'xxxx.php';
3.3如果你想在module下面的某个controller做特殊的指定,你可以controller文件中指定,
譬如:https://github.com/fecshop/yii2_fecshop/blob/master/app/appfront/modules/Cms/controllers/ArticleController.php
的init方法中执行:
Yii::$service->page->theme->layoutFile = 'xxxx.php';
3.3controller中的某个action方法中执行,你可以在方法中执行上面的代码,甚至在action里面,通过逻辑判断,让其加载那个layout文件。
譬如:
public function actionIndex()
{
Yii::$service->page->theme->layoutFile = 'xxxx.php';
$data = $this->getBlock()->getLastData();
return $this->render($this->action->id, $data);
}
4.另外注意的是,一定不要修改vendor下面的文件,而是通过fecshop重写的机制来搞
参看:fecshop 重写功能