- 基于yii2框架开发的电商系统,扩展性强,安全性高,框架层面应对高并发部署, 适合用户搭建属于自己的小型,中型电商系统。
- 开源电商系统,遵循BSD-3-Clause开源协议。
- Controller层只负责调度, Model只负责数据库映射,中间的处理逻辑由block来完成,View层 负责显示,这样各司其职, 以免造成controller文件过于庞大。
- 加入独立功能块,有点类似Yii2的Widget,目的是为了让一些侧栏公用块 可以通过配置的方式 添加,同时,还可以具有设置缓存的功能,譬如侧栏的产品浏览记录, newsletter等独立显示块可能在很多 页面用到,通过独立功能块可以配置方便的载入。
- 在Model层的上层加入服务层Services,这样,Controller,Block,View 层,在原则上 不能直接调用model,必须通过Services层以及子Services层,然后Services访问各个 model,组织数据,事务处理等操作,将数据结果返回给上层,这种设计可以方便以后业务 发展后,进而根据业务特点进行重构,或者以后如果出现新技术,新方式, 都重构成自己想要的样子,譬如, 将某个底层由mysql换成mongodb,或者为了应付高并发读写并且多事务性的功能部分, 进行分库分表的设计方式。
- Fecshop多模板系统,Fecshop设置了多个模板路径,各个模板路径下的文件被加载 的优先级不同,其中,Fecshop的模板路径下的文件最全面,但是优先级最低, ,第三方模板路径优先级其次,用户本地模板路径优先级最高, 用户可以通过 复制相应路径下的view或者js,css文件到本地模板路径,存在于高优先级 模板路径的文件会被优先加载,这样用户可以通过多模板系统的原理进行模板的 制作,同时,不影响Fecshop模板的升级,如果Fecshop view文件升级后被修改, 那么用户可以比对本地模板文件与升级模板文件的代码的不同, 复制更改的代码到本地模板路径 即可。第三方的模板路径的优先级介于本地模板路径和Fecshop 模板路径之间。
- 重写机制,Fecshop的功能基本都可以被用户重写,包括servies层,Modules, Controller,Block,Views,View Layout, 以及Js Css Img等,都可以被用户重写,其中 Js,Css,Img,Views,View Layout 是通过多模板 路径优先级来实现的,其他的是通过配置文件的覆盖更改来实现重写,这样,用户 就可以很方便重构Fecshop或者第三方的功能和模板。
- 升级最小化干扰,Fecshop的核心文件是放到vendor/fancyecommerce/fecshop 路径下面,和第三方扩展,用户二次开发路径完全隔离开, Fecshop可以通过composer进行核心功能的升级,用户只需要通过composer升级 即可。
- 快速高效,Fecshop Servises遵循Yii2的懒加载方式,只初始化使用到的组件服务, 缓存方面有整页缓存,block部分缓存,动态数据ajax加载等方式,让您的网站快速响应。
- Fecshop 多入口模式,分为 appadmin(后台), appfront(PC前端),apphtml5(手机web), appserver(手机app服务),appapi(erp,或者其他接口对接), 不同的业务,不同的设备,进入不同的入口,各个入口共用服务层services, 但是modules部分独立,这样相互干扰最小,可以相互独立开发。
- 后台封装化,fec_admin扩展可以快速的实现增删改查类型的表单列表, 方便用户快速的做增删改查。
- 如果是您公司内部的项目,或者你的朋友等一些项目, 您基于fecmall做相应的商城,是免费授权的, 如果您是建站公司,将fecmall进行二次开发,然后包装成了新的建站产品,然后重新 命名(譬如命名:xxxShop),进行商业宣传完全自研等等一些伪造话语, 对于这种不良商家的这种行为是不允许的,基于fecmall的新产品,必须以fecmall开头命名
- 通过composer安装。
composer create-project fancyecommerce/fecshop-app-advanced fecmall 2.3.0
- 准备域名。
Pc端 > appfront.fecshoptest.com > $root/appfront/web/
后台 > appadmin.fecshoptest.com > $root/appadmin/web/
图片 > img.fecshoptest.com > $root/appimage/common/
H5端 > apphtml5.fecshoptest.com > $root/apphtml5/web/
移动Api端 > appserver.fecshoptest.com > $root/appserver/web/
第三方数据对接Api端 > appapi.fecshoptest.com > $root/appapi/web/
- init命令初始化
在fecshop根目录执行init命令,进行初始化
window:运行init.bat
linux:运行 ./init
此命令会进行一些文件复制,一些设置文件权限等,增强安全性。
- 创建Mysql数据库fecmall
- 界面安装
- 总览
Fecmall在MVC三层架构上,加入了block层和services层,方便扩展和后期重构底层
入口文件:终端用户能直接访问的 PHP 脚本, 负责启动一个请求处理周期,譬如:@app/web/index.php
系统初始化bootstrap:指的是系统的初始化过程中执行的部分,譬如store语言,货币等, 都是在初始化过程中执行。
模块:yii2框架中的模块部分
controller:控制器,一个controller里面有多个action方法,每个action请求,一般对应 一个block,用来处理该action下面的逻辑
block: 逻辑处理层,负责处request发送的数据,调用相应的services方法,然后 进行处理返回最终数据,一般一个controller中的一个action,对应一个block文件
services:服务层,该层为fecmall的核心部分,很多的逻辑都是在此处实现, 对于某个功能,譬如购物车部分,您可以实现多个services,然后通过配置的方式进行切换, 譬如官方实现的redis cart,可以替代mysql cart,因此该层的加入,让您可以方便的重构底层, 根据业务的需求,开发不同的services,甚至使用远程的api封装成services, 让底层的重构更加容易,同时该结构扩展性强,应用市场可以开发不同的services应用插件, 让用户可以方便的安装应用直接切换其他的services
另外该层为共用层,pc,wap,vue,微信小程序,都公用services层
fecmall大多数的逻辑实现以及业务处理,都是在services层进行的。
models:数据库层
view:视图渲染层view
-
FecShop核心包文件结构
打开vendor/fancyecommerce/fecshop ,这里就是fecshop的核心代码包。
@fecshop/app里面 是各个入口系统的文件代码,包含 @fecshop/app/appadmin,@fecshop/app/appfront等。 -
Yii2是多文件配置结构,将多个配置文件分散到各个路径下, 在初始化的时候最终合成一个配置数组,这种方式比较灵活,后面的数组和覆盖前面的数组 配置,这种方式非常适合重写某些组件,服务等.
-
重写block
a. \fecshop\common\config\fecshop_local.php的$fecRewriteMap,添加重写规格。 -
重写control
我们想要重写appfront的catalog模块的CategoryController,下面是详细步骤:
fecshop系统的controller: @fecshop\app\appfront\modules\Catalog\controllers\CategoryController
本地重写的Controller: @appfront\local\local_modules\Catalog\controllers\CategoryController
1.新建本地的controller:
<?php
/**
* FecShop file.
*
* @link http://www.fecshop.com/
* @copyright Copyright (c) 2016 FecShop Software LLC
* @license http://www.fecshop.com/license/
*/
namespace appfront\local\local_modules\Catalog\controllers;
use fecshop\app\appfront\modules\AppfrontController;
use Yii;
/**
* @author Terry Zhao <2358269014@qq.com>
* @since 1.0
*/
class CategoryController extends \fecshop\app\appfront\modules\Catalog\controllers\CategoryController
{
// 重写相应的controller action方法
}
2.在配置中添加classMap
打开配置文件 @appfront/config/fecshop_local_modules/Catalog.php
添加如下配置:
return [
'catalog' => [
/**
* Yii2 controllerMap 重写机制。
*/
'controllerMap' => [
'category' => 'appfront\local\local_modules\Catalog\controllers\CategoryController',
],
]
]
完成上面的步骤后,如果访问分类页面,执行的是 重写后的controller文件,也就是:@appfront\local\local_modules\Catalog\controllers\CategoryController ,您可以在这个文件里面重写原来的action方法。
- 后台目录添加
添加菜单@fecshop/config/services/Admin.php 可以看到 menu admin services的配置
在类属性menuConfig处配置, 您可以在本地配置文件:@appadmin/config/fecshop_local_services/Admin.php中添加 后台配置(没有这个文件自行创建)
添加后,由于没有添加资源,因此在后台刷新页面后,菜单还是不能完整的显示出来,我们需要到后台添加资源, 设置权限
上面的菜单,是fecshop的菜单,需要添加资源,在您的当前账户对应的权限组中添加资源 (菜单中的很多url以资源的方式加入,然后在权限组中添加资源,然后才有权限访问)
后台添加资源(resources,将url_key作为资源在后台录入系统)
name: 自行填写
resource:填写您的url_key, 譬如 /catalog/productinfo/index, 对应您的访问路径 moduleId/controllerId/actionId,
tag:这个一般和菜单对应,这个在 urlKey admin services中配置,也就是 @fecshop/config/services/Admin.php中配置,您可以在本地配置添加,配置代码如下:
'urlKey' => [
'class' => 'fecshop\services\admin\UrlKey',
'urlKeyTags' => [
'dashboard_main' => '控制面板-主界面',
'catalog_product_info_manager' => '产品分类-产品管理-产品信息管理',
'catalog_product_review_manager' => '产品分类-产品管理-产品评论管理',
'catalog_product_search_manager' => '产品分类-产品管理-产品搜索管理',
'catalog_product_favorite_manager' => '产品分类-产品管理-产品收藏管理',
'catalog_category_manager' => '产品分类-分类管理',
'catalog_url_rewrite_manager' => '产品分类-URL重写管理',
'sales_order_manager' => '销售-订单-订单管理',
'sales_coupon_manager' => '销售-优惠券',
'customer_account' => '用户管理-帐号管理',
'customer_newsletter' => '用户管理-NewsLetter',
'cms_page' => 'CMS-Page管理',
'cms_static_block' => 'CMS-静态块',
'dashboard_user_myaccount' => '控制面板-用户管理-我的账户',
'dashboard_user_account_manager' => '控制面板-用户管理-账户管理',
'dashboard_user_role' => '控制面板-用户管理-权限管理',
'dashboard_user_resource' => '控制面板-用户管理-资源管理',
'dashboard_log_info' => '控制面板-操作日志',
'dashboard_log_manager' => '控制面板-日志管理',
'dashboard_cache' => '控制面板-缓存管理',
'dashboard_config' => '控制面板-后台配置',
'dashboard_error_handler' => '控制面板-ErrorHandler',
],
],
一般一个菜单对应一个urlKeyTags,也就是一个功能,里面有增删改查等一系列的操作,每一个操作是一个url_key,对应一个资源resource,因此, tag一般对应一个菜单,里面的增删改查的各个resources(url_key),填写这个菜单对应的tag,在为role添加resources的时候,resource就会根据tag进行归类,方便编辑,如图: