yii2 fecshop 功能特性添加

fecshop,全程: Fancy E-Commerce Shop

今天进一步整理了fecshop的需求。

一:view部分

在yii2的view中,大致分两部分,一个是layout.php文件,先通过render画出这个文件的html,然后具体的view文件在通过render函数画出来,内容放到layout.php文件的$content中替代。

对于view部分的路径查找,一共有两个部分,一个是所在的namespace,也就是绝对根目录,另外一个就是相对文件路径,这两个拼出来view文件和layout.php文件的路径。

1.对于决定根目录,这个是由模板决定,优先级最高的是当前的   模板包/模板名称  路径,然后是中间层模板路径,这个是第三方插件在初始化的时候设置的,最后是fecshop的模板路径,fecshop的模板路径是优先级最低的,但是是文件最全的,也就是说,如果当前的模板想修改fecshop的某个view,可以在当前模板下面把这个文件复制过来,然后修改。

2.对于layout.php文件,首先由全体设定,也就是yii2整体的application中读取,如果module设置了,那么以module为准,如果controller设置了,那么以controller为准,也就是层层覆盖,优先级最高的是controller,然后是module,然后是全体设置,然后得出当前的layout文件的相对路径

3.现在我们有了多个模板的根路径,以及优先级,和view,layout的相对路径,那么我们先到当前模板下面找view文件和layout文件,如果不存在,那么我们去第三方模板或者插件的路径下面找,如果还找不到,我们就去fecshop的文件路径下面找,如果还找不到就报错,

4.到这里,我们的多模板系统的优先级找文件,和各个页面的layout文件的设置就完成了,这里可以让第三方和当前模板通过覆盖的方式,重写fecshop的任何一个view文件。

5.对于第三方的模板或者插件可能有多个,可以通过全局配置的方式添加,譬如模板,也可以通过某个controller文件下面动态设置,譬如插件只对某个页面进行了view的修改,

6.目前想的是通过Yii::$app->page->theme进行,  theme->currentTheme设置当前的模板,譬如:   [ ‘name’ => ‘terry/theme01’,’path’=>’@app/theme’]。

当前模板路径是为了给用户二次开发的。

theme->middleTheme = [

[ ‘name’ => ‘fec/theme01’,’path’=>’@vendor/fancyecommerce/fecshoptheme’],

[ ‘name’ => ‘mage/theme01’,’path’=>’@app/fancyecommerce/fecshoptheme’],

],

前面的优先级最高。如果您有多个模板,请不要一定都设置,这样叠加后可能会出问题,

对于插件,一般在某几个controller中做view的更改,我们建议您通过动态加载的方式,在controller中设置middleTheme的值,进行更高。

theme->baseTheme ,这个是固定值,由fecshop决定。这个是最基础最全面的theme。

7.重写yii\web\controller 的render方法,在生成view路径前,先通过优先级去找view文件,找到后返回,然后画出来页面。

总之,通过配置的方式,各个模板进行优先级的查找view文件,找到后就加载之。

二:第三方开发,插件和模板

1.配置,配置通过在index.php加载的方式加载插件或者模板的配置,通过顺序进行优先级的调整,顺序为:common的配置,fecshop的配置,第三方插件和模板的配置,本地local的配置,其中后面的会覆盖前面的,

2.扩展可以重写yii2框架的文件,可以重写fecshop的services,modules,module controller,block,view文件等等,也就是说可以重写所有的fecshop和 yii2框架的文件,对于重写,后面的优先级最高,如果对同一个service进行重写,在入口文件中,配置在最后面和前面的取他们的并集,如果某个key的value都存在,则会覆盖。

3.对于配置型数据和页面   cms 和statici block

要可以加入配置变量,可以配置布局文件layout,可以加入配置块等

4.review 通过配置的方式决定是全语言显示还是单语言显示,全语言显示,标注store

5.对于同一个服务,可能后期会重构另外一种,那么通过扩展的方式让用户自己选择加载,譬如购物车,订单,优惠券,积分,网站联盟,要改成分库分表的方式,则通过一个插件,通过重构service的方式,来重构,上面的modules则不必更改

6.为了尽量的避免冲突,view文件要尽可能的碎小。

7.多语言采用,翻译文件,数据库数据,配置数据来实现多语言。

8.controller,集成于fecshop的controller,然后fecshop controller集成yii\web\controller. 这样后期可以加入统计等一些功能,然后通过队列的方式,进行一些统计的事情等等,方便后期扩展。

9.对于ajax,后期是否考虑开启不同的入口,譬如在app/web下面新建一个文件夹ajax

app/web/ajax/index.php,这个文件中只有很少的加载文件,更快的速度执行,

10.对于货币,基于session或者cookie,没有url的改变

11.产品购物车通过配置的方式决定跳转还是不跳转

12.类似jd的购物车产品选择下单的方式

13.登录和游客下面的功能的开启和关闭

14,积分分为可用和不可用积分。

15.思考以后分库分表的变迁,如何解决。这些的解决方式,是通过扩展的方式重构service的方式,而不是修改fecshop的代码的方式,这样让客户根据自己的需要,选定不同的插件,根据公司的方式状况进行不同的重构方式。

16.网站联盟affiliate,积分points,团购,线下分销dropship,批发wholesale等等后续的功能,可以通过插件的方式,也可以在fecshop升级的方式加载。来让fecshop的功能越来越强大。

发表评论

电子邮件地址不会被公开。 必填项已用*标注