Yii2 开源电商 BSD 协议 - Fecshop

2017-05-17 14:13:39 +08:00
 terrywater


开源协议:遵循 BSD-3-Clause 协议,和 Yii2 框架一样的开源协议。

项目状态:

正式版本已经出来,后台( appadmin )和 pc 端( appfront )已经完成,( appapi )端,完成了一些基本的 api,下一步做手机 web 端( appfront ),目前正在开发中,手机 web 端地址,搞完后, 下一步搞手机 app 端( appserver )。

正是因为加了一层 service 层,各个入口的开发会更加的便捷。

1、Fecshop 介绍

Fecshop 全称为 Fancy ECommerce Shop,是基于 php Yii2 框架之上开发的一款优秀的开源电商系统,遵循 BSD-3-Clause 协议(和 Yii2 框架一样的开源协议), Fecshop 支持多语言,多货币,架构上支持 pc,手机 web,手机 app,和 erp 对接等入口,您可以免费快速的定制和部署属于您的电商系统。

详细参看地址:Fecshop 介绍

FecShop Email: 2358269014@qq.com

FecShop English Demo: http://fecshop.appfront.fancyecommerce.com/

FecShop 中文演示地址: http://fecshop.appfront.fancyecommerce.com/cn

FecShop 后台演示地址:加 QQ 群,在群公告里面有后台演示地址,账号密码等信息

FecShop QQ 群:186604851,入群验证:fecshop

FecShop 作者 QQ:2358269014

FecShop Github 地址: https://github.com/fancyecommerce/yii2_fecshop

2、Fecshop 文档

二开以及安装文档: Fecshop 安装开发文档 [初版文档撰写完成]

使用帮助说明文档: Fecshop 使用帮助文档 [初版文档撰写完成]

3、安装 Fecshop

请务必按照说明安装,vagrant 安装为新手通过 box 加载过来,不需要配置环境, 懂 Yii2,还是自己来配置环境安装吧,也就是通过 3.2、全手动安装

3.1、vagrant 安装:

通过 vagrant 加载 box 的方式直接安装,环境和 fecshop 的配置都已经弄好,详细可以参看文档地址:Fecshop vagrant 安装

3.2、全手动安装:

从基础 linux 一步一步的配置的方式,详细参看文档: Fecshop 全手动安装

推荐使用第一种方式快速部署。

4、fecshop 配置:

配置详细参看:fecshop 配置

如果您使用 vagrant box 的安装方式,上面的这些步骤,在 box 都配置好了。

5、架构特色

架构特色:参看详细介绍:Fecshop 架构特色

下面是简叙:

Fecshop 全称为 Fancy ECommerce Shop,是一款优秀的开源电商系统,遵循 BSD-3-Clause 协议(和 Yii2 框架一样的开源协议), 目的是为了方便 yii2 用户快速的 开发商城,Fecshop 作为一款可以持续性发展的商城系统, 在框架层面有以下特性:

  1. 由于商城系统的复杂性,原始的框架 MVC 结构,显的有点力不从心,Fecshop 框架 加入了Block 层, Controller 层只负责调度,Model 只负责数据库映射,中间的处理逻辑由 block 来完成,View 层 负责显示,这样各司其职, 以免造成 controller 文件过于庞大。

  2. 加入独立功能块,有点类似 Yii2 的 Widget,目的是为了让一些侧栏公用块 可以通过配置的方式 添加,同时,还可以具有设置缓存的功能,譬如侧栏的产品浏览记录, newsletter 等独立显示块可能在很多 页面用到,通过独立功能块可以配置方便的载入。

  3. 在 Model 层的上层加入服务层 Services,这样,Controller,Block,View 层,在原则上 不能直接调用 model,必须通过 Services 层以及子 Services 层,然后 Services 访问各个 model,组织数据,事务处理等操作, 将数据结果返回给上层,这种设计可以方便以后业务 发展后,进而根据业务特点进行重构,或者以后如果出现新技术,新方式, 都重构成自己想要的样子,譬如, 将某个底层由 mysql 换成 mongodb,或者为了应付高并发读写并且多事务性的功能部分, 进行分库分表的设计方式。

  4. Fecshop 多模板系统,Fecshop 设置了多个模板路径,各个模板路径下的文件被加载 的优先级不同,其中,Fecshop 的模板路径下的文件最全面,但是优先级最低, ,第三方模板路径优先级其次,用户本地模板路径优先级最高, 用户可以通过 复制相应路径下的 view 或者 js,css 文件到本地模板路径,存在于高优先级 模板路径的文件会被优先加载,这样用户可以通过多模板系统的原理进行模板的 制作,同时,不影响 Fecshop 模板的升级,如果 Fecshop view 文件升级后被修改, 那么用户可以比对本地模板文件与升级模板文件的代码的不同, 复制更改的代码到本地模板路径 即可。第三方的模板路径的优先级介于本地模板路径和 Fecshop 模板路径之间。

  5. 重写机制,Fecshop 的功能基本都可以被用户重写,包括 servies 层,Modules, Controller,Block,Views,View Layout, 以及 Js Css Img 等,都可以被用户重写,其中 Js,Css,Img,Views,View Layout 是通过多模板 路径优先级来实现的,其他的是通过配置文件的覆盖更改来实现重写,这样,用户 就可以很方便重构 Fecshop 或者第三方的功能和模板。

  6. 升级最小化干扰,Fecshop 的核心文件是放到 vendor/fancyecommerce/fecshop 路径下面,和第三方扩展,用户二次开发路径完全隔离开, Fecshop 可以通过 composer 进行核心功能的升级,用户只需要通过 composer 升级 即可。

  7. 快速高效,Fecshop Servises遵循 Yii2 的懒加载方式,只初始化使用到的组件服务, 缓存方面有整页缓存,block 部分缓存,动态数据 ajax 加载等方式,让您的网站快速响应。

  8. Fecshop 多入口模式,分为 appadmin (后台),appfront ( PC 前端),apphtml5 (手机 web ), appserver (手机 app 服务),appapi ( erp,或者其他接口对接), 不同的业务,不同的设备,进入不同的入口,各个入口共用服务层 services, 但是 modules 部分独立,这样相互干扰最小,可以相互独立开发。

  9. 后台封装化,fec_admin 扩展可以快速的实现增删改查类型的表单列表, 方便用户快速的做增删改查。

鉴于以上特点,您可以下载安装 fecshop,然后更改 fecshop 的模板和功能,扩展自己想要 的功能,或者安装第三方开发好了的扩展或者模板,来快速的组建起来您的网站。

5514 次点击
所在节点    分享创造
42 条回复
wujunze
2017-05-18 11:30:52 +08:00
支持一下 重写机制 这个是参考 OpenCart 的?
sobigfish
2017-05-18 13:10:30 +08:00
这波福利可以,没搜到 alipay wxpay
加新的支付方式的是直接加 class 到 fecshop\services\payment 和 config/services/Payment.php ?
直接 extends Service 没有基本的 interface 么?
也许可以参考下 woocommerce 的插件机制(除了乱了点的 wordpress 的 hook 机制)?
https://docs.woocommerce.com/wc-apidocs/package-WooCommerce.Classes.Payment.html
terrywater
2017-05-18 14:14:29 +08:00
@sobigfish
1.首先,安装时 composer 安装,安装后的文件,不是你看到的文件,还有很多包的,光我自己的 github 地址里面就 4 个,另外还有 yii2 框架的包,根目录也不是你看到的根目录,你说的 fecshop\services\payment 这个文件,composer 安装后的目录是 vendor/fancyecommerce/fecshop/services\payment.php
2.重写是通过配置文件来的,本地的配合文件会覆盖 fecshop 的配置,通过配置文件进行功能重写,在文档里面都有介绍,vendor/fancyecommerce/fecshop 里面的文件是不允许修改的,不然没法升级,做产品要解决自身升级,第三方插件升级,以及用户二开的矛盾。
3.插件的发布都要基于 composer,通过包加载过来即可,composer 的包安装后都在 vendor 文件夹下面
4.magento 我玩了 5 年,2010 年开始到 2015 年,很多思想 参考的 magento 和 Yii2 设计的思想。
5.有兴趣来安装下玩玩。诚意满满。woocommerce 电商方面有点弱,magento 比较强,更多参考的 magento 的设计。
6.现在只有 paypal 快捷和标准支付,其他可以二开。
terrywater
2017-05-18 14:15:02 +08:00
@wujunze 和 opencart 没有关系,很多思想来自 magento 和 yii2 的设计思想。
terrywater
2017-05-18 14:20:00 +08:00
@sobigfish magento 使用的 xml 配置,fecshop 使用的是 php 数组,
配置分三部分: 用户二开配置,第三方配置,fecshop 系统配置,优先级有高到低
最终这三部分的配置在初始化的时候,通过 merge 函数进行合并,高优先级的配置参数要覆盖低优先级的
最终成为一个大配置数组,这个配置数组作为初始化的总配置,注入到 Yii 组件,Fecshop Service,Module 等等
你可能会问,每次初始化都要干这个数组的 merge 操作,比较费时。
这个我做了一个预合并功能,对于线上并发比较高的站,可以合并起来,加载合并的配置文件,这样可以节省资源,缺点是,上线新功能,更改了配置文件,需要重新重新执行一下合并操作。
terrywater
2017-05-18 14:23:56 +08:00
@wujunze Yii2 框架是含有控制反转和依赖注入的思想,也就是容器通过配置中的 class 和相关参数生成组件,
那么更改配置中的 class 就可以,然后实现新路径的 class,这是组件的重写思想,当然还有其他的很多方式,详细参看地址:
http://www.fecshop.com/doc/fecshop-guide/develop/cn-1.0/guide-fecshop-rewrite-func.html
terrywater
2017-05-18 14:26:05 +08:00
@omygod 嗯,支持多货币,多语言,多 store,多域名,以实战的角度开展的 fecshop 的开发,我自身
也是在外贸 B2C 工作了 7 年之久,把自身技术的积累沉淀到 fecshop 中,fecshop 是 BSD 开源协议,因此,大家包装起来用于商业都是没有问题的
terrywater
2017-05-18 14:33:13 +08:00
@sobigfish services 都继承于 @fecshop\services\Service.php 公用部分都在这个文件中定义,各个 services 之间是么有约定的,不需要接口
sobigfish
2017-05-18 15:02:54 +08:00
~ 我还以为 fancyecommerce/yii2_fecshop 类似于 laravel/laravel 为主程序目录( fancyecommerce/fecshop-app-advanced 才是?),laravel/framework 当然是用 composer vendor 来引入
话说 namespace 不是很符合 PSR-4 的标准的样子
~ 数组绝对比 XML YAML INI 的好 因为可以 return 前处理一遍😊
~ 后台那个 jui ( dwz )感觉 UI 设计好古老,配不上这么新的电子商务程序 😂
推荐
https://www.iviewui.com
https://getuikit.com
https://github.com/almasaeed2010/AdminLTE ( Bootstrap3)
terrywater
2017-05-18 15:43:10 +08:00
@sobigfish
您看的蛮认真的,是的, fancyecommerce/fecshop-app-advanced 是主程序目录
fecshop 代码有一些细节不是很符合 PSR-4
数组比 xml 快很多
jui 看起来有点古老,老旧,但是很实用,我想要的东西基本都有,我对 jui 进行了封装,可以很快的做一个排序+搜索+分页的增删改查列表
譬如: https://github.com/fancyecommerce/yii2_fecshop/blob/master/app/appadmin/modules/Cms/block/article/Index.php
这个文件是做列表的,
只需要配置:
public function getSearchArr(){
$data = [
[ # selecit 的 Int 类型
'type'=>'select',
'title'=>'状态',
'name'=>'status',
'columns_type' =>'int', # int 使用标准匹配,string 使用模糊查询
'value'=> [ # select 类型的值
1=>'激活',
2=>'关闭',
],
],
[ # 字符串类型
'type'=>'inputtext',
'title'=>'标题',
'name'=>'title' ,
'columns_type' =>'string'
],
。。。
}

public function getTableFieldArr(){
$table_th_bar = [
[
'orderField' => $this->_primaryKey,
'label' => 'ID',
'width' => '50',
'align' => 'center',

],
[
'orderField' => 'title',
'label' => '标题',
'width' => '50',
'align' => 'left',
'lang' => true,
],
...
}
就可以出来一个基本的增删改查。

后台现在都喜欢用 bootstrap,对于我做后端的来说,前端还是有点弱,没有太多时间研究前端的东西
fecshop 我一个人写的,一直也没有人参与进来,前端后端都是一个人搞的,
所以就选来的 jui ( dwz ),以前玩过比较熟悉一些。
wujunze
2017-05-18 16:14:47 +08:00
@terrywater 嗯嗯 👍
loser
2017-05-18 16:55:03 +08:00
不错,看看啊
terrywater
2017-05-18 17:02:16 +08:00
@loser 欢迎欢迎,这个社区感觉好热闹啊,发布了 fecshop,好多人过来看,多谢捧场
如果喜欢,在 github 多多 star,哈哈。多谢
Sukizen
2017-05-18 18:55:44 +08:00
楼主,能找你做定制吗?
terrywater
2017-05-19 09:03:50 +08:00
@Sukizen 我做的是纯开源 BSD,没有空余时间做定制,目前只有我一个人做,将来应该会有人参与进来吧。
Sukizen
2017-05-19 12:33:49 +08:00
@terrywater 其实我想着,如果定制,既能开拓一下彼此的思路,能为你的项目更加接近实际需求,也能有经济来源支撑这个项目走得更远。

毕竟做这个不是玩具,是真正用于商业,商业的法则和模式,有时候只是“程序员思维”未必能达到。
terrywater
2017-05-19 13:14:36 +08:00
@Sukizen
1. 从 2010 年开始,我在电商 B2C 混了 7 年,对于 fecshop 的需求,在外贸跨境 B2C 部分,我比你懂的多。
2.fecshop 的定位是做一个底层的开源电商框架,做好基础部分,然后大家做二开
3. fecshop 本身就可以用于商业,定制是五花八门的,对我们的角度来说是做扩展功能,我们所做的是打好基层
4. 如果你想定制,有很多可以定制的公司,去付费,如果你说让 fecshop 免费来做定制,这也是不可能的,不可能为小众需求来搞,每个产品有自己的定位,不是瞎搞。
5. 你想的是找一个东西来做商业,我想的是如何做一个产品,都没有问题。不需要继续探讨你所谓的定制。
6. 我们所在的是在架构上,提供二开的方式,建站公司 2012 年我搞过,开源比商业化走的更远,只是你没有尝试过。
7. 商业的模式和法则一大把,不都是抄来抄去,程序员思维很快就可以看清这些所谓的模式。看的更清,你所说的“程序员思维”应该是你的固化思维。
8. 如果真是个玩具,我至于写了将近 2 年,还在继续写下去,还在尝试让更多的人参与进来吗?
9. 你想的是找一个东西来做商业,你去选择其他的商业产品,没有必要提这些,一点用处都没有。
Sukizen
2017-05-19 21:40:31 +08:00
哦。
terrywater
2017-05-20 14:07:02 +08:00
lalala,zhoumola~
terrywater
2017-05-22 15:40:11 +08:00
@Showfom

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/361946

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX