多模板系统参看的magento的模板系统,多份模板按照优先级叠加,譬如模板路径按照优先级存放到一个数组:
[ '@appfront/theme/base/default', '@thrid/theme/act/theme01', '@fecshop/app/appfront/theme/base/default', ]
当我去找一个view文件的时候,,譬如是 cms/home/index.php
会根据优先级,先查找
@appfront/theme/base/default/cms/home/index.php 文件是否存在,如果不存在,则去第二优先级的模板路径下面找
@thrid/theme/act/theme01/cms/home/index.php,如果文件不存在,则去第三优先级的模板路径下面查找
@fecshop/app/appfront/theme/base/default/cms/home/index.php ,直到找到文件为止,如果到最后还找不到文件,则会throw exception。
@fecshop/app/appfront/theme/base/default 这个是最后一个模板,这个模板是最全的底层模板,这个模板文件是不允许改动的,如果要对模板进行二次开发,可以在上层模板通过文件覆盖的方式进行改动。
当后续升级,@fecshop/app/appfront/theme/base/default里面的模板文件可能会有所改动,上层模板可以通过比对差异性,将升级的部分代码添加上去来解决。
通过多模板系统,用户可以通过在高级别的模板路径下面添加模板文件,而不需要修改 fecshop的模板文件,这样就做好了安全隔离,各自不会出现文件冲突,用户可以一直二次开发模板,fecshop根据功能的添加持续升级,相互干扰性降低到最小。
模板系统是由 Yii::@app->page->theme管理,在初始化的时候,当前用户local路径,第三方路径,fecshop会通过配置的方式添加到theme组件中,
fecshop\app\appfront\modules\AppfrontController 在init对theme组件进行了参数设置,重写了render方法,按照上面的模板优先级加载文件,只要您的controller集成了AppfrontController,就可以通过render方法,使用多模板系统。
除了在controller的render使用多模板外,还有独立块也是可以使用,使用独立块的方法,具体:如何使用yii2 fecshop的小部件widget
在上面的view文件,可以通过绝对路径的方式加载view,也可以使用多模板的方式加载view。