如何重写,或者新建 模板的layout

技术分享 · Fecmall · 于 5年前 发布 · 2788 次阅读

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 重写功能

共收到 1 条回复
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics