本手册对应版本shopex 4.8.5
本手册部分内容由shopex系统源代码直接生成,因此会持续保持更新
相关文档
本手册适合谁来阅读:
ShopExV4.8网店系统是一套基于网上快速建店的标准化B2C电子商务系统。系统 集成了最基本最普通最常用的电子商务运作流程及使用功能,可以满足正常的开店需 求。
shopex提供了一个服务器性能检测探针文件,位于install/svinfo.php。
你可以单独上传这个文件到被测的服务器环境上。
这个探针所探测的数据和你在系统安装时或者后台看到的服务器状态
是完全一样的。 下面就是个典型的服务器检测报告:
$Rev: 308 $ ShopEx 服务器测评 ================================================================ 服务器基本信息 ================================================================ 操作系统 WINNT 服务器软件 Apache/2.0.59 (Win32) DAV/2 SVN/1.4.0 PHP/5.2.3 php运行方式 apache2handler ================================================================ php基本信息 ================================================================ php版本 5.2.3 程序最多允许使用内存量 memory_limit 128M POST最大字节数 post_max_size 8M 允许最大上传文件 upload_max_filesize 2M 程序最长运行时间 max_execution_time 30 被禁用的函数 disable_functions 无 ================================================================ 基本需求 ================================================================ PHP4以上 5.2.3 zend.ze1_compatibility_mode 关闭 Off 支持文件锁(flock) 支持 php可以解析xml文件 支持 MySQL函数库可用 5.0.37 数据库Mysql 3.2.23以上 127.0.0.1:3306 ZEND Optimizer2.5.7以上 未安装 DNS配置完成,本机上能通过域名访问网络 成功 ================================================================ 推荐配置 ================================================================ unix/linux 主机 WINNT php 版本5.2.0以上 5.2.3 MySQL版本 4.1.2 以上 5.0.27 GD支持 freetype,gif,jpg,png,bmp Zlib支持 支持 Json支持 支持 mbstring支持 支持 fsockopen支持 支持 iconv支持 支持 register_globals关闭 已关闭 allow_url_include关闭 (php5.2.0以上) 已关闭 高速缓存模块(apc,memcached) Memcached
小技巧:
Apache的rewrite规则
RewriteEngine on
# 设置RewriteBase的值为你的商店目录地址
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L]
rewrite启用方法,就是把root.htaccess改名成.htaccess。 更改.htaccess文件中rewritebase为你url的前缀 如果感觉麻烦,直接在后台 设置->基本设置->启用伪静态。由程序自动完成上面两个工作。
IIS下的配置方法
iis下需要isapi_rewrite 第三版,老版本的rewrite不支持RewriteCond语法。 下载地址 http://www.helicontech.com/download-isapi_rewrite3.htm 下载那个ISAPI_Rewrite Lite for Windows NT4/2000/XP/2003 (Freeware!)即可,免费软件! 安装好后,规则和apache类似。直接复制到httpd.conf文件中即可,有的系统也可能叫httpd.ini。
# 设置RewriteBase的值为你的商店目录地址
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L]
管理工具-> internet信息服务-> 网站 点右键. -> 属性 ISAPI筛选器 看到下面那个ISAPI_Rewrite3了吧。 转到 rewrite的选项卡 可以看到里面的rewrite规则
设置mime类型,启用javascript加速
Nginx 请修改PATH为你的安装路径
location /PATH/ {
if (!-e $request_filename) {
rewrite ^/PATH/(.*)$ /PATH/index.php?$1 last;
}
}
webserver众多,我们仅列出具有代表性的几款
| 快捷键 | 功能 |
|---|---|
| alt+1 | 商品 |
| alt+2 | 订单 |
| alt+3 | 会员 |
| alt+4 | 营销推广 |
| alt+5 | 站点管理 |
| alt+6 | 统计报表 |
| alt+5 | 站点管理 |
| esc | 关闭对话框 / 关闭列表详细 |
| R | 刷新主区域 |
| U | 切换左侧导航 |
| H | 打开使用向导 |
| / | 定位到搜索框 |
| 按下 Ctrl 点击鼠标拖动列表页 | 将航向滚动列表到拖动方向 |
当你需要丰富的权限分配,工作流,来规范你的业务流程的时候。可以选用shopex 提供的订单处理中心系统。
当你需要扩展网店系统功能来支撑精细化的销售运作的时候。你可以寻找一些有技术实例的团队来解决这个问题。当然你也可以组织自己的技术部门,把本手册第三章后面的部分扔给他们就好了。shopex内建的插件体系足够让他们满足你的要求。
现在的升级逻辑很简单
先跑php 然后调用diff
先跑php 是让数据库里的东西可以跟着变过来
调用数据库diff 去处理 php没搞完的杂事
扩展有两种办法,一种是通过增加插件。另一种是采用我们称之为
"第三方开发方案"的方式。
除了一些基本的模板改动之外,其他都要求开发者要基本的懂得PHP语法,并且有一些最基础的面向对象编程的知识。 函数不熟可以去查手册,大多数时候,只要会改的技能就可以了。
shopex系统支持13种插件,其中促销方式可能在会后面的版本有大的改动。
| 插件名 | 类型 | 标示名 | 默认路径 |
|---|---|---|---|
| 用户登录插件 | - | passport | plugins/passport |
| 图片存储方式插件 | - | storager | plugins/storager |
| 支付方式插件 | - | payment | plugins/payment |
| 促销方式插件 | - | pmtScheme | plugins/pmtScheme |
| 网店机器人动作插件 | - | action | plugins/action |
| 数据导入导出插件 | - | dataio | plugins/dataio |
| 用户消息插件 | - | messenger | plugins/messenger |
| 单独页面布局插件 | - | layout | plugins/layout |
| 地区数据插件 | - | location | plugins/location |
| 网页挂件 | - | widgets | plugins/widgets |
| 商品插件 | - | schema | plugins/schema |
| 前台功能插件 | - | shop | - |
| 后台功能插件 | - | admin | - |
从插件的文件组织方式上可以分成目录型和文件型两大类插件。
payment.taobao.php, 对应的文件内容是:
<?php
class payment_taobao {
var $name = ... //插件名称
var $version = ... //版本号
...
}
?>
可以被放置在除目录型插件里面的任何plugins下的任何位置。
到后台刷新插件数据库时,就会被发现。
文件型插件相同。
一个目录下只能放置一个主文件。其余文件都作为这个主文件的资源存在。
可以被放置在除目录型插件里面的任何plugins下的任何位置。
在4.8.5版本之后,不同类型插件不需要放在各自类型的目录里。 只要放在plugins下面就都可以被扫描到。这是为下一步app机制作的准备。
文件型
可以集合msn passport, google account, openid等统一登录系统
<?php
class passport_phpwind extends modelFactory {
var $passport_name = "PhpWind论坛V6.3.2"; //整合论坛名称
var $passport_memo = "描述"; //整合论坛描述内容
var $_config = null; //初始化配置变量
var $forward = 0; //初始化跳转链接变量
var $name = "phpwind"; //用户登陆插件名称
/**
* setConfig,发送时调用
* 必有方法,config参数为getOptions取得的所有项的配置结果
*/
function setConfig($config) {
$this->_config = $config;
}
/**
* verifylogin,用户登陆验证
* 可选方法,login参数为用户名,passwd参数为用户密码
*/
function verifylogin($login,$passwd){
}
/**
*decode,解码
*可选方法
*/
function decode($responseData){
}
/**
* getoptions
* 必有方法,取得的所有项的配置结果
* 返回一个配置结果的数组
*/
function getoptions(){
return $options;
}
/**
* login,用户登陆
* 必有方法,userId参数为用户Id号,rurl参数为返回的跳转链接
*/
function login($userId, $rurl) {
}
/**
* regist,用户注册
* 必有方法,userId参数为用户Id号,rurl参数为返回的跳转链接
*/
function regist($userId,$rurl) {
}
/**
* logout,用户退出
* 必有方法,userId参数为用户Id号,rurl参数为返回的跳转链接
*/
function logout($userId,$rurl) {
}
/**
* _StrCode,编码/解码
* 可选方法,string参数为需要进行处理的字符串,
* action参数表示对数据进行ENCODE编码还是DECODE解码
*/
function _StrCode($string,$action='ENCODE'){
}
/**
* ClientUserAction
* 必有方法,action参数为作为客户端操作动作,
* userdb参数为数据库名,forward参数为跳转链接
*/
function ClientUserAction($action,$userdb,$forward=''){
}
/**
* StrCode,编码/解码
* 可选方法,string参数为需要进行处理的字符串,
* action参数表示对数据进行ENCODE编码还是DECODE解码
*/
function StrCode($string,$action='ENCODE'){
}
/**
* ServerClient
* 必有方法,action参数为作为服务器端操作动作
*/
function ServerClient($action){
}
/**
* getPlugCookie,取得插件Cookie
* 可选方法,action参数为作为服务器端操作动作
*/
function getPlugCookie(){
}
/**
* setPlugCookie,设置插件Cookie
* 可选方法,val参数为设置插件Cookie的值
*/
function setPlugCookie($val){
}
}
?>
文件型
如果你去查看shopex系统里存放商品图片的数据表sdb_gimages,会发现图片存放是一个竖线分割的字符串, 规则如下:
网址|资源定位|存储方式
比如:
images/goods/01/02.jpg|goods/01/02.jpg|fs_storager
为什么要这样设计?
我们把这个字符串叫storager格式,他的好处是可以方便的使用多种存储后端,shopex可以把图片存在ftp上,存在flickr里,存在amazon的s3里,或者存在memcache里。 在此分段解释一下各部分的使用方式:
plugins/function/<存储类型>.php
规则很简单,只取第一个竖线前面的部分,我们通过一个smarty插件做storager格式和url的转换:
<img src="$storager_str|storager" alt="" />
如果是远程图片,或者是从其他系统导入的数据,就不会有竖线。storager过滤器就把整条数据都当第一段来处理,以此保证这个结构的兼容性。 第二段和第三段是用来管理资源的 当对这个图片进行删除,修改等操作时,系统会找到由第三段定义的存储插件,然后用插件通过第二段进行定位进而对资源进行操作。 下面贴一个使用nginx + Tokyo Tyrant进行存储的方案: nginx的NginxHttpMemcachedModule有个很牛X的特性,可以使用url作为memcache的key进行资源访问。这使得建造分布式的图片存储集群变得简单,同时,性能也有大规模提升。
使用内存做存储有两个缺点,一是有容量限制,二是不能永久存储。因此我们使用 Tokyo Tyrant 做存储方案。Tokyo Tyrant是Tokyo Cabinet的网络接口,可以使用memcached一样的协议。同memcache相比,Tokyo Cabinet可以将资源存放在硬盘中,可以实现互备,可以作为永久存储方案。
实施分两部分,首先配置软件端,我们增加一个shopex的存储插件 – tt_storager 在其中实现向tt服务器的存储部分,很简单:把它当memcache用就可以了。
function save($file,&$url,$type,$addons){
$id = $this->_get_ident($file,$type,$addons,$url,$path);
if($path && $this->memcache->set($path,file_get_contents($file))){
$this->memcache->delete($file,10);
return $id;
}else{
return false;
}
}
接着配置nginx,让他可以对那个访问的url到tt上取资源:
#这里可以配置n组tt_server
upstream tt_server1{ #配置一个tt服务器组
server 192.168.2.35:11211;
server 192.168.2.36:11211; #双主互备
}
server {
server_name image.example.com;
listen *:80;
location / {
set $memcached_key $uri;
memcached_pass tt_server1;
}
}
接下来,搭建一组这样的nginx服务器,再配合lvs,nginx集群+tt集群,一个高性能,高可用互备的图片集群就建立起来了。
文件型
<?php
require('paymentPlugin.php');
class pay_xxxx extends paymentPlugin{
var $name = 'xxx'; //支付方式名称
//支付方式logo名称,
//logo图片保存在\plugins\payment\images下,
//命名规则比如:logourl.gif
var $logo = 'logourl';
var $version = 20050615; //支付方式版本
var $charset = 'gb2312'; //编码设置
//订单提交正式交易地址
var $submitUrl= 'https://www.czwin.com/Payment.aspx';
//提交按钮的图片地址
var $submitButton = '提交按钮url';
//支持支付的货币类型,定义的数组中货币类
//型键值根据支付网关给出的技术文档来决定
var $supportCurrency = array("CNY"=>"RMB",
"USD"=>"02");
//支持支付的地区
var $supportArea = array('AREA_CNY','AREA_USD');
var $desc = ''; //支付方式描述
var $intro = ''; //支付方式介绍
var $M_Language = "1"; //语言选择,表示商家使用的页面语言
//在添加支付方式时,下拉列表的排列顺序(越小越靠前显示)
var $orderby = 29;
var $head_charset = "gb2312"; //编码设置
//支持真实的外币交易
var $cur_trading = true;
/**
* toSubmit,向支付网关发出支付请求
* 必有方法,payment参数为需要提交的订单详细信息
*/
function toSubmit($payment){
return $return;
}
/**
* callback,支付网关向系统发出支付应答
* 必有方法,返回四种状态:
* 1.PAY_ERROR:签名认证失败;
* 2.PAY_SUCCESS:支付成功;
* 3.PAY_FAILED:支付失败;
* 4.PAY_PROGRESS:交易处理中;
*/
function callback($in,&$paymentId,&$money,&$message,&$tradeno){
return PAY_ERROR;
}
/**
* getfields
* 必有方法,返回所需要配置的信息数组
*/
function getfields(){
return array(
'member_id'=>array(
'label'=>'客户号', //配置信息标签
'type'=>'string' //配置信息类型
),
'PrivateKey'=>array(
'label'=>'私钥',
'type'=>'string'
)
);
}
/**
* applyForm,支付方式申请的表单
* 可选方法,agentfield参数为申请表单需要提交的信息
* 返回一个支付方式申请的表单
*/
function applyForm($agentfield){
return $tmp_form;
}
}
?>
文件型
<?php
class action_order{
var $name = '订单触发器可用动作'; //动作名称
var $action_for = 'trading/order'; //绑定的特殊模块
/**
* actions,机器人执行动作
* 必有方法,返回机器人执行动作数组
*/
function actions(){
return array(
'addPoint'=>array(
'label'=>'增加积分', //执行动作标签名称
//执行动作的内容,以及该内容的类型
'args'=>array('点数'=>array('type'=>'number'))),
'delPoint'=>array('label'=>'扣除积分'
,'args'=>array('点数'=>array('type'=>'number'))),
'addCoupon'=>array('label'=>'送订单优惠券'
,'args'=>array('优惠券'=>array(
'required'=>true,
//引用对象的特殊模块
'type'=>'object:trading/coupon',
'filter'=>'cpns_type=1&ifvalid=1')
)),
);
}
/**
* addPoint,根据actions方法返回的动作命名的函数
* 必有方法,data参数为订单信息,point参数为变化的积分
*/
function addPoint($data,$point){
...
}
/**
* delPoint,根据actions方法返回的动作命名的函数
* 必有方法,data参数为订单信息,point参数为变化的积分
*/
function delPoint($data,$point){
...
}
/**
* addCoupon,根据actions方法返回的动作命名的函数
* 必有方法,data参数为订单信息,coupon参数为优惠券信息
*/
function addCoupon($data, $coupon){
...
}
}
actions返回的数组,在网店后台工具箱->网店机器人->订单->添加规则中,“执行动作”的下拉列表(见下图示),下拉列表的选择项就是返回数组的'label'标签名称。后面的输入框是根据返回数组的键args来判断,假如'type'类型是number,则显示文本框,假如'type'类型是引用特殊模块,则根据特殊模块来显示内容。
文件型
<?php
class io_txt{
var $name = 'txt-制表符分隔的文本文件'; //数据导入导出插件名称
/**
* export_begin
* 必有方法,keys参数为导出文件类型的键名数组,
* type参数为导出文件类型,count参数为导出数据数量
*/
function export_begin($keys,$type,$count){
//文件下载方法,其中第一个参数为文件名
download($type.'-'.date('Ymd').'('.$count.').txt');
//以制表符为间隔来输出每一个键名
echo implode("\t",$keys)."\r\n";
flush(); //刷新输出缓冲
}
/**
* export_rows
* 必有方法,rows参数为需要导出所有行
*/
function export_rows($rows){
foreach($rows as $row){
foreach($row as $k=>$v){
$row[$k] = str_replace("\n",'\n',$v);
}
//以制表符为间隔来输入每一行的每一列,并且最后换行
echo implode("\t",$row)."\r\n";
}
flush();
}
/**
* export_finish
* 必有方法,导出结束
*/
function export_finish(){
}
}
?>
目前数据导入方法暂时不公布。
目录型
<?php
class messenger_email{
var $name = '电子邮件'; //名称
var $iconclass="sysiconBtn email"; //操作区图标
var $name_show = '发邮件'; //列表页操作区名称
var $version='$ver$'; //版本
var $updateUrl=''; //新版本检查地址
var $isHtml = true; //是否html消息
var $hasTitle = true; //是否有标题
var $maxtime = 300; //发送超时时间 ,单位:秒
var $maxbodylength =300; //最多字符
var $allowMultiTarget=false; //是否允许多目标
var $targetSplit = ','; //目标分隔符
var $dataname='email'; //数据库名
var $debug = false;
/**
* ready,准备发送时触发
* 可选方法,config参数为getOptions取得的所有项的配置结果
*/
function ready($config){
...
}
/**
* finish,结束发送时触发
* 可选方法,config参数为getOptions取得的所有项的配置结果
*/
function finish($config){
...
}
/**
* send,发送时调用
* 必有方法,to参数为发送对象,subject参数为消息主题,
* body参数为消息内容,config参数为getOptions取得的所有项的配置结果
*/
function send($to, $subject, $body, $config){
...
}
/**
* getOptions,取得配置信息
* 必有方法,返回配置信息的数组
*/
function getOptions(){
...
}
}
?>
在网店后台,会员->邮件短信设置->电子邮件下的配置,就可以根据用户消息插件中getOptions定义的配置信息来配置发送方式、发送地址等。
目录型
├─3-columns //三列
│ layout_3-columns.php //布局配置文件
│ preview.png //布局缩略图预览
│ layout.html //布局模板
│
├─2-columns-left //两列,左为主
│ preview.png
│ layout_2-columns-left.php
│ layout.html
│
├─2-columns-right //两列,右为主
│ preview.png
│ layout_2-columns-right.php
│ layout.html
│
└─1-column //单列
layout.html
preview.png
layout_1-column.php
layout.html
比如:在2-columns-left目录下的布局模板,布局:两列,左为主。
<div style="float:left;width:180px; overflow:hidden;">
<{widgets}>
</div>
<div style="margin-left:190px; overflow:hidden;">
<{widgets}>
</div>
layout_2_columns_left.php
比如:在2-columns-left目录下的布局配置文件。
<?php
class layout_2_columns_left{
var $name='两列,左为主'; //布局插件名称
var $slotsNum = 2; //布局列数
}
?>
在网店后台,页面管理->站点栏目->添加顶级栏目->选择单独页面->选择布局->设置布局(如下图示),就可以根据自定义的单独页面布局插件,来选择布局。
目录型
<?php
class local_difang{
var $name = '某地方'; //地区插件名称
var $desc = '地区描述'; //地区插件描述
var $maxdepth = 3; //地区最大深度为3层
/**
* install
* 必有方法,安装时调用,将area.txt文件内地区信息插入数据库表中。
*/
function install(){
....
}
}
首先建立一个目录plugins/widgets/helloword 这个就是新的挂件目录,系统的每个widgets都是一个目录
里面放两个文件:
widgets.php:
<?php $setting['author']='我'; //挂件作者 $setting['name']='Helloword'; //挂件名称 $setting['version']='0.0.1'; //挂件版本 $setting['catalog']='我的原创'; //挂件目录 $setting['description'] = '这是我自己的helloword板块'; //挂件描述 ?>
default.html:
<h1>HelloWorld</h1><br />
这时目录看起来这个样子:
我们到后台可视化模板编辑里面添加板块。
保存,前台就能看到了
添加一个输入框
下面我们来改进这个板块:在后台输入一串文字,在前台显示出来。
增加一个配置文件_config.html 这个文件名是定死的,只要存在这个文件,那么就会把这个文件内容放到后台的版块编辑里面
_config.html
输入我的文字:
<input type="text"
value="<{$setting.string_1}>" name="string_1" />
注意: 这个输入框的value在这里设置的是<{$setting. string_1}> , 这样在版块编辑的时候,才会作为把你上次填的文字放在输入框里 我们在这里做的每个input/select元素,都会作为$setting这个变量的一部分
编辑的时候就是这个样子:
下面把输入的字符串在前台显示出来: 修改default.html
<h1>Hello:<{$setting.string_1}></h1>
这时前台的样子:
加入控制程序
再在这个目录下添加一个 widgets_helloword.php, 这里的文件和php函数,要用widget_ + 目录的名字(helloword)命名
widget_helloword.php
<?php
function widget_helloword(&$setting,&$system){
return '<b style="color:red">'.$setting['string_1'].'</b>';
}
?>
下面修改default.html,让他输出通过php修改过的文字。 只要把<{$setting.string_1}> 改成<{$data}>即可。
default.html
<h1>Hello:<{$data}></h1>
写到这里发现写错字了,helloword... 只好继续"你好单词"下去...
前台表现:
很多人做挂件的动机一般都是看到一个比较好效果或者是对官方提供的功能进行更深入的修改。 比如看到了一个很好的效果,想把他用到自己的网店上,同时也可以在后台维护,下面的一个效果挂件,就是出于这样的一个动机来制作的。
原始的效果:http://www.stoutlabs.com/demos/slider_class/ 感觉这个带有数字控制的滑动的效果还是不错,想把它改成的ShopEx的挂件,只要店主在后台设置了图片的路径和这个图片上的链接就可以实现这个广告效果。
下面的图帮你来温习一下挂件的制作基础。
首先要想清楚,挂件里面有些什么东西是需要店主设置的: 1、图片的路径,这个当然需要店主自己改了,否则就不能自己添加广告了。 2、点击图片所链接的地址,这个也是必须的。 3、每一个图片停留的时间,是让浏览者看3秒还是看5秒,这个也是需要店主自定义的 4、图片滑动的时间,就是从一张图片向另外一张图片切换的时候所需要的时间。 5、数字的颜色和背景,因为是带有数字的,所以就有当前的图片的数字和非当前的图片数字,这两个地方的颜色都需要用户可以设定的。
然后看看,上面看到的那个效果的HTML和js是不是支持上面所理想中设定,当然,这个地方需要你了解一些js了。 看了一下这个效果整个的js和HTML结构,ok,没有问题,都是可以支持的。 把这些定下来以后,就可以去制作_config.html了。
制作_config.htm文件的时候,可以直接从一个类似的官方挂件中复制一个过来,这样有些现在的html和js都是可以使用。比如从exchangeeffect这个挂件中把_config文件复制过来。现在还是对这个文件动手了。 在制作_config.htm的时候,也不需要考虑太多,凡是需要店主定义的地方,统统写成 <{$setting.XXXXX}>的格式。
制作好_config.htm以后,在后台插入这个挂件的时候,就可以看到大概的样子了。
然后接下来制作default.html,这个就是这个挂件的主区域。 按部就班的把js和html调整好,保证在静态页面的情况下(就是没有嵌入到ShopEx系统中),可以正常使用。
上面的步骤全部做好以后,就可以使用这个挂件了,简单的预览如下:
目录型
─custom
│ schema.custom.php
│ icon-48x48.png
│
└─view
init.html
商品可以定义商品的发货函数 可以实现点卡自动充值,机票的代理自动化等等甚至向工厂自动传送用户的下单信息。
schema.custom.php
<?php
class schema_custom{
var $name='自定义商品类型'; //商品插件名称
var $version='11689$'; //商品插件版本号
var $use_brand = true; //本类型商品是否有品牌
var $use_params = false; //本类型商品是否有参数表
var $use_props = true; //本类型商品是否有属性
var $use_minfo = false; //本类型商品是否有用户购买时的必填信息
/**
* init,自定义商品类型初始化
* 可选方法
*/
function init(&$post){
if(!isset($post['is_physical']))$post['is_physical'] = true;
return true;
}
}
?>
<?php
class shop_helloworld{
var $name = 'hello';
function index(){
echo 'hello';
}
}
<?php
class admin_helloworld{
var $name = 'hello';
var $workground = 'tools';
function index(){
echo 'hello';
}
}
即将出现在485正式版
我们提供了一个很干净的机制让开发者扩展网店的功能,实现以下特性:
可以看到,这基本相当提供给大家一个简单的php框架了。下面说下技术细节。
每个程序包占一个目录。 我们推荐将所有的包都放置在plugins/app文件夹下。
下面用个例子, 阐述下功能包的各个控制点。
假设这个文件夹的名字为:demo, 包里面必须有一个 app.demo.php。
并且里面必须含有一个 app_demo的类。该类需要继承shopex_appdef这个基类,例如:
plugins/app/demo/app.demo.php
<?php
class app_demo extends shopex_appdef{
var $ver = 0.8;
var $name='样例程序';
var $website = 'http://www.shopex.cn';
var $author = 'dev@shopex.cn';
//可选函数
//定义接管系统哪些流程,由自身的哪个类/方法去执行
//本例表示,启用后前台将把所有访问购物车的控制器请求重定向
//到本软件包内 democtl对象的cartidx方法里。
function ctl_mapper(){
return array(
'shop:cart:index' => 'demo_ctl:cartidx',
);
}
//可选函数
//侦听系统哪些事件
//此处可用关键字any表示所有事件
//本例表示:
//侦听订单新建事件 -> 调用event_handle类的order_new方法执行
//侦听会员新建事件 -> 调用event_handle类的member_create方法执行
function listener(){
return array(
'trading/order:create' =>
'demo_event_handler:order_new',
'member/account:register' =>
'demo_event_handler:member_create',
'any'=>'demo_event_handler:any',
);
}
//可选函数, 返回需要建表的信息
//本例是建立两个表, 系统会自动加前缀 sdb_<ident>
function dbtables(){
$tables['table_2'] = array (
'columns' =>
array (
'controller' =>
array (
'type' => 'varchar(100)',
'required' => true,
'pkey' => true,
'editable' => false,
),
'plugin' =>
array (
'type' =>'varchar(100)',
'required' => true,
'editable' => false,
),
),
);
$tables['table_1'] = array (
'columns' =>
array (
'controller' =>
array (
'type' => 'varchar(100)',
'required' => true,
'pkey' => true,
'editable' => false,
),
'plugin' =>
array (
'type' =>'varchar(100)',
'required' => true,
'editable' => false,
),
),
);
return $tables;
}
//我承认这是个非常邪恶的设计...
//但你要承认它可以让你无所不能
function output_modifiers(){
return array(
'admin:goods/product:index'=>'demo_modifiers:product_edit'
);
}
//重载安装时的方法...
//同样可重载的还有:
// uninstall -> 卸载
// enable -> 程序启动
// disable -> 程序关闭
function install(){
//别忘了调用父类的install
return parent::install();
}
}
为了防止命名冲突,请使用自己包的名字作为类的前缀。
plugins/app/demo/demo_event_handler.php
<?php
class demo_event_handler{
//订单新建时本方法将被自动执行
//此处event被赋值为 order:new
function order_new($event_type,$order_data){
...
}
//会员新建时本方法将被自动执行
//此处event被赋值为 order:new
function member_create($event_type,$member_data){
...
}
//任何事件都将调用此函数
function any($event_type,$event_data){
...
}
}
建立一个类来重定义购物车页面
plugins/app/demo/demo_ctl.php
<?php
require('app_page.php');
class demo_ctl extends app_page{
function cartidx(){
...
//输出模板:软件包文件夹里的cart.html
$this->system; //可以调用系统入口
$this->db; //可以直接使用数据库
//载入包里的类...
require(dirname(__FILE__).'/demo_my_model_layer.php');
$obj = new demo_my_model_layer;
$this->output('view/cart.html');
}
}
建立一个类来重定义购物车页面
用关键字<{$_BASE_PATH_}>可以定位到插件文件夹的url。
plugins/app/demo/view/cart.html
<p>
例如输出<br />
plugins/app/demo/images/cart.png
</p>
<img src="<{$_BASE_PATH_}>/images/cart.png" />
过滤器,将商品列表页面的“新建商品”按钮上的文字换掉。
plugins/app/demo/demo_modifiers.php
<?php
class demo_modifiers{
function product_edit( &$content ){
return str_replace('添加商品','别看我是只羊!',$content);
}
}
在第一次运行时会进行初始化。本例初始化时出现的信息是:
欢迎来到样例程序初始化向导
即将初始化 样例程序 0.8 到你的网店系统中。
注意!本应用程序将:
是否继续安装流程?
定制可以根据客户的需求对网站进行相应功能的添加修改或者删除,同时定制也 存在一定的弊端。ShopExV4.8以前版本的定制是在原来的程序上修改的所以定制过的 网站就不能使用该版本后发布的相关补丁。 ShopExV4.8版本采用MVC开发模式,二次开发解决了定制在原程序上进行修改 导致程序不能升级的问题,使新的程序模块可以很好的融合到ShopExV4.8系统中同时 也可以继承原有程序的所有功能。
本着不与原程序冲突的原则,需要新建一个目录去存放二次开发所用的程序,这 就要求在ShopExV4.8的配置文件中定义一个存放二次开发程序目录的常量。同时为了 使二次开发程序能够兼容原程序的所有功能也要求要包含原来的控制器文件或模型层 文件,通过类继承和函数重载的方式实现原有功能的保留、修改和新功能的开发,当然 如果该功能完全与原有功能没有联系则只需继承控制器文件或模型层文件的基类。
define(‘CUSTOM_CORE_DIR’,’自定义文件路径’)自定义文件路径建议和core同级
$cusmenu['analytics']=array(
'items'=>array(
array(
'type'=>'group',
'label'=>'测试二次开发',
'position'=>'after|begin|end|before',
'reference'=>'访问统计',
'items'=>array(
array(
'type'=>'menu',
'label'=>'测试二次开发1',
'link'=>'index.php?ctl=vip/vote&act=index'
),
array(
'type'=>'menu','label'=>'测试二次开发2',
'link'=>'index.php?ctl=vip/vote&act=index'
)
)
)
)
);
position值及说明:
cct_原控制器名称 extends ctl_原控制名称{
function 新增函数名(){
//新增功能函数
}
function 原有函数名(){
//函数重载
}
}
cct_control extends adminPage{
function __construct(){
//自定义操作
}
//自定义函数
}
或者
cct_control extends objectPage{
function __construct(){
//自定义操作
}
//自定义函数
}
前台控制器文件
cct_control extends shopPage{
function __construct(){
//自定义操作
}
//自定义函数
}
cmd_原模型层名称 extends mdl_模型层名称{
function 新增函数(){
//新增函数
}
function 原函数名(){
//重载函数
}
}
新建模型层文件
cmd_model extends shopObject{
function __construct(){
//自定义操作
}
//自定义函数
...
}
或
cmd_model extends modlFactory{
function __construct(){
//自定义操作
}
//自定义函数
...
}
前台友情链接页面默认每页显示的友情链接为10个,大多数店主会觉得这个数字太少导致页面太空,所以想修改此处的数字为30或者更多。 要实现这个修改,首先设置好二次开发目录。 然后在二次开发目录下新建目录。 shop/controller
然后在此目录下建立文件cct.link.php继承原始的ctl_link类,之后重载控制器函数。
内容为:
<?php
class cct_link extends ctl_link{
function showList($page=1){
$sitemapts=$this->system->loadModel('content/sitemap');
$title=$sitemapts->getTitleByAction('link:showList');
$title=$title['title']?$title['title']:'友情链接';
$this->path[]=array('title'=>$title);
$this->title = $title;
$pageLimit = 100;
$oLink=$this->system->loadModel('content/frendlink');
$result=$oLink->getList('*', '',
($page-1)*$pageLimit,$pageLimit,$linkCount);
$this->pagedata['pager'] = array(
'current'=>$page,
'total'=>ceil($linkCount/$pageLimit),
'link'=>$this->system->mkUrl('link',
'showList',array(($tmp = time()))),
'token'=>$tmp);
if($page > $this->pagedata['pager']['total']){
trigger_error('查询数为空',E_USER_NOTICE);
}
$this->pagedata['data'] = $result;
$this->output();
}
}
将其中第九行 $pageLimit = 100; 改为您要的数字就行了。
相比大家都感觉48只能修改框架而感到束手束脚了吧
很多东西只有修改core/shop/view下的html文件才可以实现,而这些都是核心的东西。模板又无法控制~~
其实有办法的:
可以在模板目录下 建一个view文件夹。 然后按照core/shop/view同样的路径,建立新的html文件。
系统输出的时候就会优先调用模板里自定义的核心业务html部分了
例如:
修改会员后台的样式需要修改core/shop/view/member/main.html才能实现。
现在自己做了一个模板叫myth,模板目录在themes/myth。
就可以建立一个,把原来的core/shop/view/member/main.html文件复制themes/myth/view/member/main.html到
想要自定义的细节样式,通过修改新的themes/myth/view/member/main.html文件即可实现。
现在,你可以随心所欲的控制样式了。
注意! 这样的话,模板就不能跟随升级了,因为里面有自定义的核心业务所需的模板。 很可能你修改过的member/main.html里面的一些变量在新版本里已经失效。 于是,这需要你手动修改member/main.html 文件来跟随系统升级。 因此我们建议,你可以自用,但尽量不要使用自定义的核心业务区域html去做通用模板。 否则,需要你亲自升级。当然,你也可以为这个服务提高模板价格....
自定义导入导出介质,支付方式,配送方式,促销规则,促销页面模板等等扩展接口…
以下文档均以最新的shopex 4.8.5 为准。
程序为mvc 3层结构。模型-视图-控制器。
在任何时候都有一个全局变量$system指向唯一的一个内核类:core/kernel.php
结构图
公共类图
公共函数库位于/core/func_ext.php,它在内核加载时首先被加载,对全系统有效。其中包含若干php5函数的php4模拟版本:
这是一个结构图 这里是前台的控制器,视图文件 这里是后台的控制器,视图文件 这里是后台的smarty插件文件 这里是前后台公用的smarty插件文件
我们的逻辑是这样的。
控制器负责所有的变量的转换,包括对外界的变量转换。像胶水一样粘合各个业务model,并在其中的数据交互过程中做一些数据转换过程。最终将变量抛到模板层。 模板层负责编译成html输出,这里我们创建了大量的smarty插件来减少开发者的重复工作量。
model层负责所有的资源操作,包括数据库和文件系统以及读取网络等等。
业务模型层下面是schema,这些是对数据库表结构的最底层的描述。
我们将从底向上的介绍这些层次
在485之前,我们使用powerdesigner来管理这些表结构,但是在一些项目的版本管理过程中,有时需要维护多个版本。powerdesigner的储存文件为一个单一的巨大的xml格式pdm文件。 这在进行版本的合并分支时几乎无法处理。 而在485里,我们使用php去描述表结构有了以下几个优势:
现在这些数据库定义文件放置在 core/schemas 下面,每个表一个php文件, 样例:
<?php
$db['table_name'] = array(
'columns'=>array(
'col_1'=>array('type'=>'int',
'pkey'=>true,'comment'=>'id字段'), //主键
'col_p1'=>array('type'=>'int',
'pkey'=>true,'comment'=>'主键2'), //联合主键
'col_33'=>array('type'=>'mediumint unsigned'),
//当然也支持通常的type
'col_2'=>array('type'=>'email',
'comment'=>'id字段'), //email = varchar(255)
'col_3'=>array('type'=>'money',
'notnull'=>true,'default'=>3),
//money = decimal(20,3), 非空字段,默认为3.000
'col_4'=>array('type'=>'html',
'comment'=>'id字段'), //html = text
'col_4'=>array('type'=>'bool',
'comment'=>'id字段'), //bool = enum('true','false')
'table2_c1'=>array('type'=>'table_2:c1',
'comment'=>'表table_2的c1字段'),
//类型和table_2的c1字段相同, 当外键处理,自动加索引
),
'index'=>array(
'...',//再定义
)
'engine'=>'heap'//可不填,默认为myisam
'option'=>''//其他扩展语法
);
好了,现在一切的表结构都可以被系统精确控制了。 利用这个东西,我们实现了485里的数据表结构比较功能,并且以这个为基础建立了新的升级机制。 并且在未来,这将是app体系的一个基石,
关于app体系,我将在后来的章节讲解,这将是一个神奇的东西。
在model里面,有一些特别特别的类是基于shopObject这个类的。 shopObject用来表示一些有共性和意义的对象,比如商品,订单,会员。 有一些抽象的共用方法。
每个shopObject都有一个绑定的表,并且标明了哪些字段是主键。因此我们可以做一些批量的东西。 后台的订单列表,商品列表,会员列表等等。我们给他取名为finder。在此向osx致以敬意。
| 函数名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| is_highlight($row) | 行数据 | bool | 用来判断是否将该行高亮 |
因此如果你想修改这些默认行为,比如在列上加些自定义的字段,而这个字段可能完全不是数据库里,而存在于其他某外部系统中。 那么很简单,你只需要重载对应的方法即可。
shopObject还有一个特性,就是支持事件广播。 他有一个特殊的方法:shopObject::fireEvent($eventName) 用来广播事件。 其他对象采用观察者模式listen到感兴趣的对象上。
当订单新建时,系统会调用相应的$orderModel->firevent('create')方法,
这时所有关注order-create的函数就全都被纷纷调用,有的负责发邮件通知用户,有的负责记录的数据库,有的可能是插件写的:将这些事件广播道某esb系统里。
这时一条网店系统的数字神经,当订单新建,或者会员登录的时候。我们可以通过外挂的脚本做一些触发事件。 这也是485网店机器人的基础。
模型是前后台公用。完成业务逻辑,所有的数据库操作,文件等资源调用,都由此层实现
模块调用方法: $systme->loadModel(path/to/a/model); 载入过程如图所示:
ShopEx前后台调度都分别通过各自目录下一个名为index.php的入口文件进行,入口文件接受控制器、方法等的输入参数,调度给对应的控制器方法执行并输出结果。 index.php会调用kernel。 Kernel基础类提供模型对象加载,插件入口,错误处理,设置管理,输入输出,第三方类库加载等基础服务。
前后台及安装入口程序在初始化时,都会初始化一个对应的内核类,
这个类在前台是shopCore.php,后台时是adminCore.php。这两个文件都是继承core/kernel.php文件。
该内核类首先会形成一个名为system的指向自身的全局对象,然后根据传入参数调用对应的控制器方法运行。
控制器层与模型层都会产生对该全局system对象的调用来使用基础服务。
并且控制器和模型层在自身被实例化之后都可以使用$this->system来引用内核对象。
也就是说,构造函数中只能通过$GLOBALS['system']来访问。
对于前台来说,会有缓存的介入。
为方便rewrite,采用形如文件名的形式做为请求句柄,请求句柄包含了控制器名,控制器方法,类型及传入参数信息 请求句柄语法:
CTL[-ARG…][-METHOD].<html|json|xml>
其中CTL为控制器. ARG部分为传入参数组, 可省略. METHOD为控制器方法,可省略,默认为index 为方便更改请求句柄的编码方式,请求句柄的编码与解析采取读取system.seo.parselink中定义的外挂函数(见插件小节外挂函数部分)处理,默认函数为actmapper:
前台控制器位/core/shop/controller于
前台的入口文件为index.php,该页面初始化shopCore,初始化时运行父类kernel的构造方法设定system的指向自身的全局对象,最后构造函数调用shopCore->run(),流程如下:
说明
入口程序 /index.php,判断config.php是否存在,不存在则转至安装目录
重新设定超级全局变量$_COOKIE为$_COOKIE[COOKIE_PFIX]的值;COOKIE_PFIX用以区分同一目录下安装的不同ShopEX实例。
对传入URL进行处理,返回数组$this->request
array(
//cache是否公用,用于用户登录或转换货币后界面
'cache'=>$cache,
//请求句柄XXXX.html
'query'=>$query?$query:'index.html',
//链接基地址(带?m/)
'base_url'=>$url_prefix.($domain?$domain.'/':''),
'url_prefix'=>$url_prefix, //链接基地址
'domain'=>$domain?$domain.'/':'', // m/或空
'member'=>$memberInfo, //用户信息数组
'cur'=>$cur, //货币
'lang'=>$lang //语言
);
注:在会员登录后,链接将变为 index.php?/m/XXXX.html
判断传回的request['cache']:
if($request['cache']=='public' &&
!(defined('WITHOUT_CACHE') && WITHOUT_CACHE )){
//对公共cache进行处理
}else($request['cache']=='private')
//对私有cache进行处理
}else{
直接调用动态程序(流程5)
}
输出缓存或重新生成和输出
调用请求句柄解析方法进行处理 if 请求句柄 = ‘index.html’ 返回array('controller'=>'index','method'=>'home','args'=>array(),'type'=>'html') else 读取system.seo.parselink中定义的外挂函数(见插件小节外挂函数部分)解析处理: 默认函数为actmapper->parse(处理逻辑见下节)
后台入口文件为/shopadmin/index.php文件
后台的文件链接形如
http://host/shopadmin/index.php?#ctl=<控制器>&act=<方法>[&p[0]...]
后台控制器位/core/admin/controller于
后台的入口文件为/shopadmin/index.php,该页面初始化adminCore,初始化时运行父类kernel的构造方法设定system的指向自身的全局对象,最后构造函数调用adminCore->run(),流程如下:
网店的配置信息分为两种。
config/config.php里
通常存放软件安装配置,即当系统无法正常运行时也可以通过ftp进行修改的参数。
安装配置文件在系统安装时依据config.sample.php模板文件自动生成。
秘诀: 你也可以通过修改这个文件来覆盖系统中的一些常量。
config.sample.php内容如下:
<?php
/**
* 网店配置模板
*
* 版本 $Id: config.sample.php 37215 2009-12-03 09:28:28Z flaboy $
* 配置参数讨论专贴 http://www.shopex.cn/bbs/thread-61957-1-1.html
*/
// ** 数据库配置 ** //
define('DB_USER', 'usernamehere'); # 数据库用户名
define('DB_PASSWORD', 'yourpasswordhere'); # 数据库密码
define('DB_NAME', 'putyourdbnamehere'); # 数据库名
# 数据库服务器 -- 99% 的情况下您不需要修改此参数
define('DB_HOST', 'localhost');
//define('DB_PCONNECT',1); #是否启用数据库持续连接?
define ('STORE_KEY', ''); #密钥
define('DB_PREFIX', 'sdb_');
define ('LANG', '');
define ('WITHOUT_CACHE',false);
#启用触发器日志: home/logs/trigger.php
//define ('TRIGGER_LOG',true);
//define ('DISABLE_TRIGGER',true); #禁用触发器
/* 以下为调优参数 */
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
define('DEBUG_JS',false);
define('BASE_DIR', realpath(dirname(__FILE__).'/../'));
define('CORE_DIR', BASE_DIR.'/core');
//安全模式启用后将禁用插件
define('SAFE_MODE',false);
#您可以更改这个目录的位置来获得更高的安全性
define('HOME_DIR', BASE_DIR.'/home');
define('PLUGIN_DIR', BASE_DIR.'/plugins');
define('THEME_DIR', BASE_DIR.'/themes');
define('MEDIA_DIR', BASE_DIR.'/images');
define('PUBLIC_DIR', BASE_DIR.'/public'); #同一主机共享文件
define('CERT_DIR', BASE_DIR.'/cert');
define('DEFAULT_LOCAL','mainland');
define('SECACHE_SIZE','15M'); #缓存大小,最大不能超过1G
//define('TEMPLATE_MODE','database');
define("MAIL_LOG",false);
define('DEFAULT_INDEX','');
define('SERVER_TIMEZONE',8); #服务器时区
//define('APP_ROOT_PHP','index.php'); #iis 5
@ini_set('memory_limit','32M');
define('WITHOUT_GZIP',false);
#前台禁ip
//define('BLACKLIST','10.0.0.0/24 192.168.0.1/24');
#数据库集群.
//define('DB_SLAVE_NAME',DB_NAME);
//define('DB_SLAVE_USER',DB_USER);
//define('DB_SLAVE_PASSWORD',DB_PASSWORD);
//define('DB_SLAVE_HOST',DB_HOST);
#支持泛解的时候才可以用这个, 仅支持fs_storager
/*
* define('HOST_MIRRORS',
* 'http://img0.example.com,
* http://img2.example.com,
* http://img2.example.com');
*/
#使用ftp存放图片文件
//define('WITH_STORAGER','ftp_storager');
#确定服务器支持htaccess文件时,可以打开下面两个参数获得加速。
//define ('GZIP_CSS',true);
//define ('GZIP_JS',true);
#可以选择缓存方式apc 或者 memcached
//define('CACHE_METHOD','cacheApc');
//======================================
//define('CACHE_METHOD','memcached');
//======================================
#使用单个文件存放,稳定,但无法控制文件大小
//define('CACHE_METHOD','cachedir');
/* 日志 */
//define('LOG_LEVEL',E_ERROR);
#按日期分目录,每个ip一个日志文件。扩展名是php防止下载。
//define('LOG_FILE',HOME_DIR.'/logs/{date}/{ip}.php');
#log文件头部放上exit()保证无法下载。
//define('LOG_HEAD_TEXT','<'.'?php exit()?'.'>');
//define('LOG_FORMAT',"{gmt}\t{request}\t{code}");
//======================================
//define('WITH_MEMCACHE',true);
//define('MEMCACHED_HOST','192.168.0.230');
//define('MEMCACHED_PORT','11211');
//======================================
#禁止运行安装
//define('DISABLE_SYS_CALL',1);
#使用数据库存放改动过的模板
//define('THEME_STORAGE','db');
运行时的默认值存放在core/include/defined.php中。
define('SET_T_STR',0); //text
define('SET_T_INT',1); //number
define('SET_T_ENUM',2); //select
define('SET_T_BOOL',3); //bool
define('SET_T_TXT',4); //textarea
define('SET_T_FILE',5); //file
系统方法 $system->getConf() 负责取值,$system->setConf()保存值。
系统在取值时,首先在数据库中查找对应的key,如果未找到,则在默认值文件中进行查找。
smarty风格的模板引擎。语法参照smarty的文档:http://www.smarty.net/manual/en/
前后台的公用的模板插件路径为:
core/include/smartyplugins
后台的专有模板插件路径为:
core/admin/smartyplugin
特别之处:
在4.8.5之后,我们重新编写了模板编译引擎。沿用一直以来的smarty语法。我们做了以下增强:
这个优化的原则就是把更多的插件改为编译时插件,然后通过精心设计的缓存控制系统去自动更新模板缓存.
这是一个完全重写的引擎。我们把这个类smarty的模板引擎取名为tramsy。 实际检测,同样的代码,我们的tramsy生成的代码运行效率提高了50%以上。 而如果用变量预绑定的方式传入变量,则可以使目标代码减少50%,运行效率提高80%。
我们会在将来的版本中更多的利用变量预绑定机制来提高性能。
缓存系统的设计,直接决定了系统的运行效能。系统的无数bug,也可能由缓存而生。 我们在此一起抽丝剥茧的看一下shopex的缓存设计方案。
shopex有3层缓存结构,按顺序触发:
| 层次 | 缓存名称 | 存放位置 |
|---|---|---|
| 1 | 基于http协议的浏览器缓存 | 用户浏览器本地 |
| 2 | 前台全页缓存 | home/cache/cachedata.php |
| 3 | 模板缓存 | home/cache/front_tmpl |
浏览器都很聪明,他们懒的把同样的数据从网上下载两次。
如果用户访问过这个网站,那么我们会在系统的header头里放一个Etag标签。 这个Etag数据是和页面的内容相关的,如果页面内容变了,Etag也会不同。
第一次访问一个shopex页面,服务器的返回情况, 使用抓包工具可以看到http头如下所示。
HTTP/1.1 200 OK Date: Tue, 24 Nov 2009 09:14:27 GMT Server: Apache/2.0.59 (Win32) DAV/2 SVN/1.4.0 PHP/5.2.3 X-Powered-By: PHP/5.2.3 Cache-Control: private Expires: Mon, 26 Jul 1997 05:00:00 GMT Content-Language: utf-8, zh-CN Etag: 4be41fcf3eb37261873e631daf4d3226
其中的Expires设置为1997年是为了让浏览器每次都来判断etag是否过期,因为我们是电子商务站点,一些促销规则,商品上下架对时间比较敏感。
最后一行就是Etag数据:4be41fcf3eb37261873e631daf4d3226,当用户第二次访问这个页面的时候(访问,或者按F5刷新),浏览器会把Etag里的数据放在请求的http头中:
GET /shop/current/src/ HTTP/1.1 Host: localhost If-None-Match: 4be41fcf3eb37261873e631daf4d3226 ...
最后一行:浏览器会把上次的etag值放在If-None-Match里面。如果网店程序端检测到:
则发送给浏览器一个304的头信息,浏览器就将自己本地缓存的页面数据直接显示出来,避免了网络传输。
HTTP/1.1 304 Not Modified Date: Tue, 24 Nov 2009 09:16:36 GMT Server: Apache/2.0.59 (Win32) DAV/2 SVN/1.4.0 PHP/5.2.3 Connection: close Etag: 4be41fcf3eb37261873e631daf4d3226 Expires: Mon, 26 Jul 1997 05:00:00 GMT Cache-Control: private
此时,网络上传输的数据只有以上两次,并没有实际的内容传输,所以响应会非常快。 我们看一下详细过程。
ctrl+f5可以强制忽略etag,强迫重新获取最新的数据。
现在聚焦到上图中"生成页面内容..."这个环节中, 此时系统并不是为每次生成页面内容的请求都重新运行一次, 而是将页面的结果整体缓存下来,如果该页面所包含的数据都没有更新, 则是直接输出被缓存下来的内容。
这里比较复杂的是缓存的自动更新,下面来解释这个过程。
shopex在数据库的操作底层设置了一个触发动作,当有任何表的更新,插入,删除操作时,将当时的时间和被操作的表明记录在一个特殊的表里:
sdb_cachemgr。例如某时刻该表的数据如下:
| 表名 | 最后时间 |
|---|---|
| sdb_goods | 2009-11-21 16:20:26 |
| sdb_goods_cat | 2009-11-20 05:25:21 |
| sdb_setting | 2009-11-23 19:40:13 |
| sdb_member | 2009-11-23 08:36:23 |
| sdb_order | 2009-11-22 20:46:42 |
| sdb_payments | 2009-11-24 05:20:27 |
| ... | ... |
实际上,真实系统里表的时间都是unix时间戳格式,那个数字的意思是1970-01-01 00:00:00之后的秒数。在这里,为了方便大家理解,我们用实际时间表示。
在处理前台请求时,数据库底层会记录在这个过程中用到的数据表,包括页面挂件,流程插件,自动机器人,模块,以及各种子流程。 同时会记录用到的表的最后修改时间,存到最终生成的缓存条目头部。
假设过了5分钟,又有人访问同样的网址,系统发现存在针对这个url的缓存。
此时会读出这个缓存条目用到的表名列表: sdb_goods,sdb_goods_cat,sdb_setting
并到sdb_cachemgr中检查这些表当前的状态,如果发现有以上表里有任何一个在上次缓存保存之后被修改过了,则宣布该缓存作废,
重新生成页面。这个过程是在core/include/cachemgr这个类管理的。
cachemgr决定了哪些内容被缓存,缓存多久,如何被更新,怎样判别缓存过期。
缓存存储器仅仅是负责缓存如何存放,如何读取。当缓存过多时如何被自动删除,删除哪一些。
shopex系统默认的缓存存储器是secache。可以被替换为apc或者memcache。secache的特点如下:
secache已经被我们开源: http://code.google.com/p/secache/ 。
版权采用的是最开放的MIT Licence,大家可以随意的用在自己的系统里。
用法样例
require('../secache/secache.php');
$cache = new secache;
$cache->workat('cachedata');
$key = md5('test'); //必须自己做hash,前4位是16进制0-f,最长32位。
$value = '值数据'; //必须是字符串
$cache->store($key,$value);
if($cache->fetch($key,$return)){
echo '<li>'.$key.'=>'.$return.'</li>';
}else{
echo '<li>Data get failed! <b>'.$key.'</b></li>';
}
基于性能考虑,几点约束:
下面详细说明secache的实现原理
secache是一个采用拉链法的hash结构。 整个文件分成2个主要部分。
<?php exit()?>防止文件被下载
整个结构如图所示
系统将要存储的数据最多可分为16中大小,然后分别创建数据空间。避免一条数据被拆分到多个数据块中的复杂度。我们一共预设了13组slab结构,预设的数据大小和预分配的条目为:
| 大小 | 条数 | 占用空间 | |
|---|---|---|---|
| 512 | 10 | 5k | |
| 3k | 10 | 30k | |
| 8k | 10 | 80k | |
| 20k | 4 | 80k | |
| 30k | 2 | 60k | |
| 50k | 2 | 100k | |
| 80k | 2 | 160k | |
| 96k | 2 | 192k | |
| 128k | 2 | 256k | |
| 224k | 2 | 448k | |
| 256k | 2 | 512k | |
| 512k | 1 | 512k | |
| 1M | 1 | 1M | |
因此secache要求数据空间最小为10M。当超过这个值时,secache会根据存放数据的频率动态增加各个slab的数据块数量,直到增长到配置好的最大数据量为止。 当增长到极限时,各slab的数据块分布将不再变动。如果想重建结构,需要删除缓存文件,重新生成。 当无法申请到新的空间之后,将采用lru的策略删除相对不活跃的缓存条目,为新的缓存请求腾出数据空间。
每个slab结构占用24个字节,组成为:
| 类型 | 大小 | 空闲指针 | lru头部指针 | lru尾部指针 | 缓存命中 | 未命中 |
| 占用空间 | 4bytes | 4bytes | 4bytes | 4bytes | 4bytes | 4bytes |
再看一下hash索引表的结构。所有进入secache的数据,key的前4位必须是16进制数据,即0000-ffff,
共65536种前缀, 每个前缀的索引占用4字节的入口,
所以索引入口区占用空间为65536*4=256k空间。
可以看到,secache的地址数据都是4字节,即最大支持256^4=4G的寻址空间,但是由于PHP在32位系统下的大数上限约为二十亿。所以保险起见,我们强制secache最大仅支持1G空间。
数据区的数据有两种,一种是实际数据,一种是索引节点数据。实际数据空间占用情况依照slab不同而不同,索引节点的长度是定长:56Bytes。
索引节点结构:
| 类型 | 下个节点 | 上个节点 | 数据入口指针 | 实际长度 | lru右节点 | lru左节点 | 键名 |
| 占用空间 | 4bytes | 4bytes | 4bytes | 4bytes | 4bytes | 4bytes | 32bytes |
模板缓存比较简单,就是smarty的原则,每个html文件会被编译成一个php文件,每次执行该php文件之前去判断原始文件的最后修改时间。
外部系统和shopex系统的交互主要有两个应用场景:
以消息体系为根本,每一个shopex内发生的事件,均对外发出事件广播。 关心该消息的外部系统,接到消息后后,可以通过API去获取详细的数据。
获取数据的方法有两种:
这种做法也被称为观察者模式。并且我们要秉着"小消息,大运算"的原则。 就是广播出的事件消息本身,数据量会尽可能的小。以便于在各种载体上广播, 详细的变动数据,状态结果。各系统要通过统一的接口去获取。
shopex内部是通过消息体系驱动的。具体在代码实现上,就是shopObject这个类,他的所有子类通过fireEvent方法产生事件。fireEvent会调用model:system/trigger来将事件广播出去,并调用注册在这个事件上的系统内行为。
| 条目 | 用途 | 备注 |
|---|---|---|
| coupon.mc.use_times | 优惠券可用次数 | - |
| security.guest.enabled | 是否支持非会员购物 | - |
| site.version | version的最后修改时间 | - |
| site.dateFormat | 商店日期格式 | - |
| site.timeFormat | 商店日期时间格式 | - |
| site.coupon_order_limit | 每张订单可用优惠券数量 | - |
| site.decimal_digit | 订单金额取整位数 | - |
| site.decimal_type | 订单金额取整方式 | - |
| site.delivery_time | 默认备货时间 | - |
| site.show_mark_price | 前台是否显示市场价 | - |
| site.login_valide | 会员登录需输入验证码 | - |
| site.login_type | 顾客登录方式 | - |
| site.register_valide | 会员注册需输入验证码 | - |
| site.buy.target | 顾客点击商品购买按钮后 | - |
| site.market_price | 商品页是否显示市场价 | - |
| site.market_rate | 请输入比例值或增额值 | - |
| site.save_price | 商品页是否显示节省金额 | - |
| site.retail_member_price_display | 零售会员价显示设定 | - |
| site.wholesale_member_price_display | 批发会员价显示设定 | - |
| site.meta_desc | META_DESCRIPTION | - |
| site.meta_key_words | META_KEYWORDS | - |
| site.order_storage | 库存扣除方式 | - |
| site.offline_pay | 支持线下支付方式 | - |
| site.shopex_certify | ShopEx Store 认证显示 | - |
| site.tax_ratio | 税率 | - |
| site.trigger_tax | 是否设置含税价格 | - |
| site.copyright | 版权信息 | - |
| site.logo | 商店Logo | - |
| site.certtext | 备案号 | - |
| site.cert | 备案证书 | - |
| site.thumbnail_pic_height | 缩略图高度 | - |
| site.thumbnail_pic_width | 缩略图宽度 | - |
| site.homepage_title | TITLE(首页标题) | - |
| site.homepage_meta_key_words | META_KEYWORDS | - |
| site.homepage_meta_desc | META_DESCRIPTION | - |
| site.goods_title | TITLE(首页标题) | - |
| site.goods_meta_key_words | META_KEYWORDS | - |
| site.goods_meta_desc | META_DESCRIPTION | - |
| site.list_title | TITLE(首页标题) | - |
| site.list_meta_key_words | META_KEYWORDS | - |
| site.list_meta_desc | META_DESCRIPTION | - |
| site.brand_index_title | TITLE(首页标题) | - |
| site.brand_index_meta_key_words | META_KEYWORDS | - |
| site.brand_index_meta_desc | META_DESCRIPTION | - |
| site.brand_list_title | TITLE(首页标题) | - |
| site.brand_list_meta_key_words | META_KEYWORDS | - |
| site.brand_list_meta_desc | META_DESCRIPTION | - |
| site.article_list_title | TITLE(首页标题) | - |
| site.article_list_meta_key_words | META_KEYWORDS | - |
| site.article_list_meta_desc | META_DESCRIPTION | - |
| site.article_title | TITLE(首页标题) | - |
| site.article_meta_key_words | META_KEYWORDS | - |
| site.article_meta_desc | META_DESCRIPTION | - |
| system.admin_verycode | 管理员后台登陆启用验证码 | - |
| store.address | 联系地址 | - |
| store.company_name | 网站所有人 | - |
| store.contact | 联系人 | - |
| store.email | 电子邮件 | - |
| store.mobile_phone | 手机 | - |
| store.shop_url | 商店网址 | - |
| store.telephone | 固定电话 | - |
| store.zip_code | 邮政编码 | - |
| system.money.operation.decimals | 前台价格精确到 | - |
| system.money.decimals | 订单金额显示位数 | - |
| system.money.operation.carryset | 价格进位方式 | - |
| system.category.showgoods | 商品分类列表页显示设置 | - |
| system.product.alert.num | 商品库存报警数量 | - |
| system.shopname | 商店名称 | - |
| system.seo.emuStatic | 商店页面启用伪静态URL | - |
| system.seo.noindex_catalog | 通知搜索引擎不索引目录页 | - |
| system.ui.webslice | 支持ie8的webslice特性 | - |
| system.timezone.default | 用户默认时区 | - |
| site.index_title | TITLE(首页标题) | - |
| site.title_format | 网站标题格式 | - |
| site.stripHtml | 是否压缩html | - |
| site.url.base | 主站访问地址 | - |
| site.url.themeres | 模板资源访问地址 | - |
| site.url.widgetsres | 版块资源访问地址 | - |
| goods.rate_nums | 相关商品最大数量 | - |
| gallery.default_view | 商品列表默认展示方式 | - |
| system.fast_delivery_as_progress | 后台手工发货为"已发货" | - |
| system.auto_delivery | 用户到款则自动发货 | - |
| system.auto_delivery_physical | 用户到款自动发货时,实体商品如何处理(auto:发货为ready,no:不发货,yes:发货为progress) | - |
| system.auto_use_advance | 自动使用预存款 | - |
| search.show.range | 搜索是否显示价格区间 | - |
| order.flow.payed | 订单付款流程 | - |
| order.flow.consign | 订单发货流程 | - |
| order.flow.refund | 订单退款流程 | - |
| order.flow.reship | 订单退货流程 | - |
| certificate.id | ShopEx证书编号 | - |
| certificate.token | ShopEx证书密钥 | - |
| certificate.str | ShopEx证书身份说明 | - |
| certificate.formal | ShopEx证书身份 | - |
| certificate.kft.cid | 客服通公司id | - |
| certificate.kft.style | 客服通风格号 | - |
| certificate.kft.action | 客服通动作 | - |
| certificate.kft.enable | 客服通开关 | - |
| certificate.channel.url | 渠道url | - |
| certificate.channel.name | 渠道商名 | - |
| certificate.channel.status | 渠道状态 | - |
| certificate.channel.service | 渠道服务类型 | - |
| certificate.distribute | 是否开通分销模块 | - |
| messenger.sms.config | 短信sms签名 | - |
| shopex.wss.username | 合作统计用户名 | - |
| shopex.wss.password | 合作统计密码 | - |
| shopex.wss.enable | 合作统计开关 | - |
| shopex.wss.show | 合作统计前台开关 | - |
| shopex.wss.js | 合作统计js | - |
| system.area_depth | 地区级数 | - |
| comment.index.listnum | 商品首页显示评论条数 | - |
| comment.list.listnum | 评论列表页显示评论条数 | - |
| comment.switch.ask | 商品询问开关 | - |
| comment.switch.discuss | 商品评论开关 | - |
| comment.switch.buy | 商品经验评论开关 | - |
| comment.display.ask | 商品评论(询问),回复显示 | - |
| comment.display.discuss | 商品评论(评论),回复显示 | - |
| comment.display.buy | 商品评论(经验),回复显示 | - |
| comment.power.ask | 商品评论(询问),发布权限 | - |
| comment.power.discuss | 商品评论(评论),发布权限 | - |
| comment.power.buy | 商品评论(经验),发布权限 | - |
| comment.null_notice.ask | 没有咨询记录,提示文字 | - |
| comment.null_notice.discuss | 商品评论(经验),发布权限 | - |
| comment.null_notice.buy | 商品评论(经验),发布权限 | - |
| comment.submit_display_notice.ask | 没有咨询记录,提示文字 | - |
| comment.submit_hidden_notice.ask | 商品评论(经验),发布权限 | - |
| comment.submit_display_notice.discuss | 商品评论(经验),发布权限 | - |
| comment.submit_hidden_notice.discuss | 没有咨询记录,提示文字 | - |
| comment.submit_display_notice.buy | 商品评论(经验),发布权限 | - |
| comment.submit_hidden_notice.buy | 商品评论(经验),发布权限 | - |
| selllog.display.switch | 是否显示销售记录 | - |
| selllog.display.limit | 低于多少条不显示销售记录 | - |
| selllog.display.listnum | 显示条数 | - |
| goodsbn.display.switch | 是否启用商品编号 | - |
| storeplace.display.switch | 是否使用商品货位 | - |
| gallery.display.listnum | 搜索列表显示条数 | - |
| gallery.display.grid.colnum | 搜索橱窗页显示行数 | - |
| plugin.passport.config.current_use | 当前使用的passport | - |
| system.message.open | 商店留言发布 | - |
| site.refer_timeout | 推荐链接过期时间(天) | - |
| site.is_open_return_product | 是否开启退货功能 | - |
| spec.image.height | 规格图片宽度 | - |
| spec.image.width | 规格图片高度 | - |
| spec.default.pic | 规格默认图片 | - |
| system.editortype | HTML编辑器设置 | - |
| system.upload.limit | 前台图片大小限定 | - |
| system.store.time | 库存预占触发时间 | - |
| system.guide | 向导设置 | - |
| goodsprop.display.switch | 是否启用商品属性链接 | - |
| store.site_owner | 商店所有人 | - |
| store.mobile | 手机 | - |
| store.qq | - | |
| store.wangwang | 旺旺 | - |
数据表:sdb_sfiles
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| file_id | varchar(32) | √ | √ | - | - |
| file_name | varchar(32) | - | √ | - | - |
| usedby | varchar(32) | - | - | - | - |
| file_type | varchar(32) | - | - | - | - |
| file_size | int(9) | - | √ | - | - |
| cdate | time | - | √ | - | - |
| misc | varchar(255) | - | - | - | - |
数据表:sdb_status
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| status_key | varchar(20) | √ | √ | - | - |
| date_affect | date | √ | √ | - | - |
| status_value | varchar(100) | - | √ | - | - |
| last_update | int unsigned | - | √ | - | - |
缓存对象管理表:sdb_cachemgr
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| cname | varchar(30) | √ | √ | - | 缓存名称 |
| modified | int unsigned | - | √ | - | 最后更新时间 |
商店配送方式表:sdb_dly_type
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| dt_id | number | √ | √ | 配送ID | - |
| dt_name | varchar(50) | - | - | 配送方式 | - |
| dt_config | longtext | - | - | - | - |
| dt_expressions | longtext | - | - | - | - |
| detail | longtext | - | - | - | - |
| price | longtext | - | √ | - | - |
| type | intbool | - | √ | - | - |
| gateway | number | - | - | - | - |
| protect | intbool | - | √ | 物流保价 | - |
| protect_rate | float(6,3) | - | - | - | - |
| ordernum | smallint(4) | - | - | 排序 | - |
| has_cod | intbool | - | √ | 货到付款 | - |
| minprice | float(10,2) | - | √ | - | - |
| disabled | bool | - | - | - | - |
| corp_id | time | - | - | - | - |
| dt_status | Array | - | - | 状态 | - |
站点结构:sdb_sitemaps
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| node_id | number | √ | √ | - | - |
| p_node_id | number | - | √ | - | - |
| node_type | varchar(30) | - | √ | - | - |
| depth | tinyint unsigned | - | √ | - | - |
| path | varchar(200) | - | - | - | - |
| title | varchar(100) | - | √ | - | - |
| action | varchar(100) | - | √ | - | - |
| manual | intbool | - | √ | - | - |
| item_id | number | - | - | - | - |
| p_order | number | - | - | - | - |
| hidden | bool | - | √ | - | - |
| child_count | mediumint(4) | - | - | - | - |
数据表:sdb_orders
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| order_id | bigint unsigned | √ | √ | 订单号 | - |
| member_id | object:member/member | - | - | 会员用户名 | - |
| confirm | tinybool | - | √ | 确认状态 | - |
| status | Array | - | √ | 订单状态 | - |
| pay_status | Array | - | √ | 付款状态 | - |
| ship_status | Array | - | √ | 发货状态 | - |
| user_status | Array | - | √ | 用户反馈 | - |
| is_delivery | tinybool | - | √ | - | - |
| shipping_id | smallint(4) unsigned | - | - | - | - |
| shipping | varchar(100) | - | - | 配送方式 | - |
| shipping_area | varchar(50) | - | - | - | - |
| payment | int | - | - | 支付方式 | - |
| weight | money | - | - | - | - |
| tostr | longtext | - | - | - | - |
| itemnum | number | - | - | - | - |
| acttime | time | - | - | 更新时间 | - |
| createtime | time | - | - | 下单时间 | - |
| refer_id | varchar(50) | - | - | 推广来源ID | - |
| refer_url | varchar(200) | - | - | 推广来源URL | - |
| ip | varchar(15) | - | - | - | - |
| ship_name | varchar(50) | - | - | 收货人 | - |
| ship_area | region | - | - | 收货地区 | - |
| ship_addr | varchar(100) | - | - | 收货地址 | - |
| ship_zip | varchar(20) | - | - | - | - |
| ship_tel | varchar(30) | - | - | 收货人电话 | - |
| ship_email | varchar(150) | - | - | - | - |
| ship_time | varchar(50) | - | - | - | - |
| ship_mobile | varchar(50) | - | - | 收货人手机 | - |
| cost_item | money | - | √ | - | - |
| is_tax | bool | - | √ | - | - |
| cost_tax | money | - | √ | - | - |
| tax_company | varchar(255) | - | - | - | - |
| cost_freight | money | - | √ | 配送费用 | - |
| is_protect | bool | - | √ | - | - |
| cost_protect | money | - | √ | - | - |
| cost_payment | money | - | - | - | - |
| currency | varchar(8) | - | - | - | - |
| cur_rate | decimal(10,4) | - | - | - | - |
| score_u | money | - | √ | - | - |
| score_g | money | - | √ | - | - |
| score_e | money | - | √ | - | - |
| advance | money | - | - | - | - |
| discount | money | - | √ | - | - |
| use_pmt | varchar(30) | - | - | - | - |
| total_amount | money | - | √ | 订单总额 | - |
| final_amount | money | - | √ | - | - |
| pmt_amount | money | - | - | - | - |
| payed | money | - | - | - | - |
| markstar | tinybool | - | - | - | - |
| memo | longtext | - | - | - | - |
| print_status | tinyint unsigned | - | √ | 打印 | - |
| mark_text | longtext | - | - | 订单备注 | - |
| disabled | bool | - | - | - | - |
| last_change_time | int(11) | - | √ | - | - |
| use_registerinfo | bool | - | - | - | - |
| mark_type | varchar(2) | - | √ | 订单备注图标 | - |
| extend | varchar(255) | - | - | - | - |
| is_has_remote_pdts | Array | - | √ | - | - |
存放发给用户的款项记录:sdb_refunds
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| refund_id | bigint unsigned | √ | √ | 退款单号 | - |
| order_id | object:trading/order | - | - | 订单号 | - |
| member_id | object:member/member | - | - | 会员用户名 | - |
| account | varchar(50) | - | - | 退款帐号 | - |
| bank | varchar(50) | - | - | 退款银行 | - |
| pay_account | varchar(250) | - | - | 退款人 | - |
| currency | object:system/cur | - | - | 货币 | - |
| money | money | - | √ | 金额 | - |
| pay_type | Array | - | - | 支付类型 | - |
| payment | number | - | √ | - | - |
| paymethod | varchar(100) | - | - | 支付方式 | - |
| ip | varchar(20) | - | - | - | - |
| t_ready | time | - | √ | 单据创建时间 | - |
| t_sent | time | - | - | 退款时间 | - |
| t_received | int unsigned | - | - | - | - |
| status | Array | - | √ | 状态 | - |
| memo | longtext | - | - | - | - |
| title | varchar(255) | - | √ | - | - |
| send_op_id | object:admin/operator | - | - | 操作员 | - |
| disabled | bool | - | √ | - | - |
数据表:sdb_triggers
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| trigger_id | int | √ | √ | 网店机器人id | - |
| filter_str | varchar(255) | - | √ | 条件 | - |
| action_str | varchar(255) | - | √ | 动作 | - |
| trigger_event | varchar(100) | - | √ | 事件 | - |
| trigger_memo | varchar(100) | - | - | 备注 | - |
| trigger_define | text | - | √ | - | - |
| trigger_order | tinyint | - | √ | - | - |
| active | Array | - | - | 状态 | - |
| disabled | bool | - | √ | - | - |
商店会员表:sdb_members
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| member_id | number | √ | √ | ID | - |
| member_lv_id | object:member/level | - | √ | 会员等级 | - |
| uname | varchar(50) | - | √ | 用户名 | - |
| name | varchar(50) | - | - | 姓名 | - |
| lastname | varchar(50) | - | - | - | - |
| firstname | varchar(50) | - | - | - | - |
| password | varchar(32) | - | - | - | - |
| area | region | - | - | 地区 | - |
| mobile | varchar(30) | - | - | 手机 | - |
| tel | varchar(30) | - | - | 固定电话 | - |
| varchar(200) | - | √ | - | ||
| zip | varchar(20) | - | - | 邮编 | - |
| addr | varchar(255) | - | - | 地址 | - |
| province | varchar(20) | - | - | - | - |
| city | varchar(20) | - | - | - | - |
| order_num | number | - | - | 订单数 | - |
| refer_id | varchar(50) | - | - | 来源ID | - |
| refer_url | varchar(200) | - | - | 推广来源URL | - |
| b_year | smallint unsigned | - | - | - | - |
| b_month | tinyint unsigned | - | - | 生月 | - |
| b_day | tinyint unsigned | - | - | 生日 | - |
| sex | Array | - | √ | 性别 | - |
| addon | longtext | - | - | - | - |
| wedlock | intbool | - | √ | - | - |
| education | varchar(30) | - | - | - | - |
| vocation | varchar(50) | - | - | - | - |
| interest | longtext | - | - | - | - |
| advance | money | - | √ | 预存款 | - |
| advance_freeze | money | - | √ | - | - |
| point_freeze | number | - | √ | - | - |
| point_history | number | - | √ | - | - |
| point | number | - | √ | 积分 | - |
| score_rate | decimal(5,3) | - | - | - | - |
| reg_ip | varchar(16) | - | - | 注册IP | - |
| regtime | time | - | - | 注册时间 | - |
| state | tinyint(1) | - | √ | 验证状态 | - |
| pay_time | number | - | - | - | - |
| biz_money | money | - | √ | - | - |
| pw_answer | varchar(250) | - | - | - | - |
| pw_question | varchar(250) | - | - | - | - |
| fav_tags | longtext | - | - | - | - |
| custom | longtext | - | - | - | - |
| cur | varchar(20) | - | - | 货币 | - |
| lang | varchar(20) | - | - | 语言 | - |
| unreadmsg | smallint unsigned | - | √ | 未读信息 | - |
| disabled | bool | - | - | - | - |
| remark | text | - | - | 备注 | - |
| remark_type | varchar(2) | - | √ | - | - |
| login_count | int(11) | - | √ | - | - |
| experience | int(10) | - | - | 经验值 | - |
| foreign_id | varchar(255) | - | - | - | - |
赠品关系表:sdb_gift
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| gift_id | number | √ | √ | ID | - |
| giftcat_id | object:trading/giftcat | - | - | 分类 | - |
| insert_time | time | - | √ | 插入时间 | - |
| update_time | time | - | √ | 更新时间 | - |
| name | varchar(255) | - | √ | 赠品名称 | - |
| thumbnail_pic | varchar(255) | - | - | 列表页缩略图 | - |
| small_pic | varchar(255) | - | - | 缩略图 | - |
| big_pic | varchar(255) | - | - | 详细图 | - |
| image_file | longtext | - | - | - | - |
| intro | varchar(255) | - | - | 简介 | - |
| gift_describe | longtext | - | - | 详细描述 | - |
| weight | int | - | √ | 重量 | - |
| storage | number | - | √ | 库存 | - |
| price | varchar(255) | - | - | 价格 | - |
| orderlist | number | - | - | 排序 | - |
| shop_iffb | intbool | - | √ | 发布 | - |
| limit_num | number | - | - | 限购数量 | - |
| limit_start_time | time | - | √ | 开始时间 | - |
| limit_end_time | time | - | √ | 结束时间 | - |
| limit_level | varchar(255) | - | - | 允许兑换等级 | - |
| ifrecommend | intbool | - | √ | 推荐 | - |
| point | number | - | √ | 兑换所需积分 | - |
| freez | number | - | - | 冻结库存 | - |
| disabled | bool | - | - | - | - |
数据表:sdb_regions
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| region_id | int unsigned | √ | √ | - | - |
| package | varchar(20) | - | √ | - | - |
| p_region_id | int unsigned | - | - | - | - |
| region_path | varchar(255) | - | - | - | - |
| region_grade | number | - | - | - | - |
| local_name | varchar(50) | - | √ | - | - |
| en_name | varchar(50) | - | - | - | - |
| p_1 | varchar(50) | - | - | - | - |
| p_2 | varchar(50) | - | - | - | - |
| ordernum | number | - | - | - | - |
| disabled | bool | - | - | - | - |
数据表:sdb_settings
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| s_name | varchar(16) | √ | √ | - | - |
| s_data | longtext | - | - | - | - |
| s_time | time | - | √ | - | - |
| disabled | bool | - | - | - | - |
留言和短信表:sdb_message
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| msg_id | number | √ | √ | 序号 | - |
| for_id | number | - | √ | - | - |
| msg_from | varchar(30) | - | √ | 发送者 | - |
| from_id | number | - | - | - | - |
| from_type | tinyint(1) unsigned | - | √ | - | - |
| to_id | number | - | √ | - | - |
| to_type | tinyint(1) unsigned | - | √ | - | - |
| unread | intbool | - | √ | - | - |
| folder | Array | - | √ | - | - |
| varchar(255) | - | - | 联系方式 | - | |
| tel | varchar(30) | - | - | - | - |
| subject | varchar(100) | - | √ | 消息标题 | - |
| message | longtext | - | √ | 内容 | - |
| rel_order | bigint unsigned | - | - | - | - |
| date_line | time | - | √ | 时间 | - |
| is_sec | bool | - | √ | 公开 | - |
| del_status | Array | - | - | - | - |
| disabled | bool | - | √ | - | - |
| msg_ip | varchar(20) | - | √ | - | - |
| msg_type | Array | - | √ | - | - |
商品评论表:sdb_comments
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| comment_id | number | √ | √ | 序号 | - |
| for_comment_id | number | - | - | 对comments的回复 | - |
| goods_id | object:goods/products | - | √ | 咨询商品 | - |
| object_type | Array | - | √ | 评论类型 | - |
| author_id | number | - | - | 会员(后台管理员)id | - |
| author | varchar(100) | - | - | 咨询人 | - |
| levelname | varchar(50) | - | - | 会员等级 | - |
| contact | varchar(255) | - | - | 联系方式 | - |
| mem_read_status | bool | - | √ | 会员阅读标识 | - |
| adm_read_status | bool | - | √ | 已阅 | - |
| time | time | - | √ | 咨询时间 | - |
| lastreply | time | - | √ | 回复时间 | - |
| reply_name | varchar(100) | - | - | 最后回复人 | - |
| title | varchar(255) | - | - | 标题 | - |
| comment | longtext | - | - | 内容 | - |
| ip | varchar(15) | - | - | 咨询人IP | - |
| display | bool | - | √ | 前台显示 | - |
| p_index | Array | - | - | 置顶 | - |
| disabled | bool | - | - | 失效 | - |
数据表:sdb_seo
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| seo_id | number | √ | √ | - | - |
| source_id | varchar(100) | - | √ | - | - |
| type | varchar(50) | - | √ | - | - |
| store_key | varchar(100) | - | √ | - | - |
| value | text | - | √ | - | - |
数据表:sdb_gtask
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| goods_id | object:goods/products | - | - | - | 商品id |
| tasktime | time | - | √ | - | 时间 |
| action | Array | - | √ | - | 动作 |
数据表:sdb_tag_rel
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| tag_id | number | √ | √ | - | - |
| rel_id | bigint unsigned | √ | √ | - | - |
数据表:sdb_link
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| link_id | number | √ | √ | 友情链接id | - |
| link_name | varchar(128) | - | √ | 友情链接名称 | - |
| href | varchar(255) | - | √ | 友情链接地址 | - |
| image_url | varchar(255) | - | - | - | - |
| orderlist | number | - | √ | 排序 | - |
| disabled | bool | - | - | - | - |
物流公司表:sdb_dly_corp
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| corp_id | number | √ | √ | 物流公司ID | - |
| type | varchar(6) | - | - | - | - |
| name | varchar(200) | - | - | 物流公司 | - |
| disabled | bool | - | - | - | - |
| ordernum | smallint(4) unsigned | - | - | 排序 | - |
| website | varchar(200) | - | - | 网址 | - |
数据表:sdb_lnk_acts
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| role_id | int unsigned | √ | √ | - | - |
| action_id | int unsigned | √ | √ | - | - |
数据表:sdb_gimages
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| gimage_id | number | √ | √ | - | - |
| goods_id | object:goods/products | - | - | - | - |
| is_remote | bool | - | √ | - | - |
| source | varchar(255) | - | √ | - | - |
| orderby | tinyint unsigned | - | √ | - | - |
| src_size_width | int unsigned | - | √ | - | - |
| src_size_height | int unsigned | - | √ | - | - |
| small | varchar(255) | - | - | - | - |
| big | varchar(255) | - | - | - | - |
| thumbnail | varchar(255) | - | - | - | - |
| up_time | int unsigned | - | √ | - | - |
| supplier_id | int unsigned | - | - | - | - |
| supplier_gimage_id | number | - | - | - | - |
| sync_time | int unsigned | - | - | - | - |
数据表:sdb_plugins
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| plugin_id | number | √ | √ | 插件id | - |
| plugin_ident | varchar(100) | - | √ | 标识 | - |
| plugin_name | varchar(100) | - | √ | 插件名称 | - |
| plugin_type | Array | - | √ | 类型 | - |
| plugin_base | Array | - | √ | 所属 | - |
| plugin_version | varchar(100) | - | - | - | - |
| plugin_author | varchar(100) | - | - | - | - |
| plugin_website | varchar(200) | - | - | - | - |
| plugin_updatechec | varchar(200) | - | - | - | - |
| plugin_desc | text | - | - | 描述 | - |
| plugin_hasopts | bool | - | √ | - | - |
| plugin_struct | text | - | - | - | - |
| plugin_config | text | - | - | - | - |
| plugin_path | varchar(255) | - | √ | - | - |
| plugin_mode | Array | - | √ | - | - |
| status | Array | - | √ | - | - |
| disabled | bool | - | √ | - | - |
| plugin_mtime | int | - | √ | - | - |
赠品订单明细表:sdb_gift_items
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| order_id | object:trading/order | √ | √ | - | - |
| gift_id | number | √ | √ | - | - |
| name | varchar(200) | - | - | - | - |
| point | int(8) | - | - | - | - |
| nums | number | - | - | - | - |
| amount | int unsigned | - | - | - | - |
| sendnum | number | - | - | - | - |
| getmethod | Array | - | √ | - | - |
文章表:sdb_articles
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| article_id | number | √ | √ | - | 文章ID |
| node_id | table:sitemaps:node_id | - | √ | 所属栏目 | 所属栏目 |
| title | varchar(200) | - | - | 文章标题 | 文章标题 |
| content | longtext | - | - | 文章内容 | 文章内容 |
| uptime | time | - | - | 更新时间 | 更新时间 |
| ifpub | intbool | - | - | 是否发布 | 是否发布 |
| align | varchar(12) | - | - | - | 显示方式 |
| filetype | varchar(15) | - | - | - | 上传文件类型 |
| filename | varchar(80) | - | - | - | 文件名 |
| orderlist | mediumint(6) | - | - | - | 排序 |
| pubtime | time | - | - | 创建时间 | - |
| disabled | bool | - | - | - | 失效 |
| goodsinfo | text | - | - | - | - |
数据表:sdb_member_addrs
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| addr_id | number | √ | √ | - | - |
| member_id | object:member/member | - | √ | - | - |
| name | varchar(50) | - | - | - | - |
| area | region | - | - | - | - |
| country | varchar(30) | - | - | - | - |
| province | varchar(30) | - | - | - | - |
| city | varchar(50) | - | - | - | - |
| addr | varchar(255) | - | - | - | - |
| zip | varchar(20) | - | - | - | - |
| tel | varchar(30) | - | - | - | - |
| mobile | varchar(30) | - | - | - | - |
| def_addr | tinyint(1) | - | - | - | - |
通过促销所生成优惠券:sdb_pmt_gen_coupon
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| pmt_id | number | √ | √ | - | - |
| cpns_id | number | √ | √ | 促销ID | - |
| disabled | bool | - | - | - | - |
商品缺货通知表:sdb_gnotify
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| gnotify_id | number | √ | √ | - | 会员id |
| goods_id | object:goods/products | - | - | 缺货商品名称 | - |
| member_id | object:member/member | - | - | 会员用户名 | - |
| product_id | object:goods/products | - | - | 缺货状态 | - |
| varchar(200) | - | - | - | ||
| status | Array | - | √ | 通知状态 | - |
| send_time | time | - | - | 通知时间 | - |
| creat_time | time | - | - | 登记时间 | - |
| disabled | bool | - | √ | - | - |
| remark | longtext | - | - | - | - |
数据表:sdb_tags
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| tag_id | number | √ | √ | - | - |
| tag_name | varchar(20) | - | √ | - | - |
| tag_type | varchar(20) | - | √ | - | - |
| rel_count | number | - | √ | - | - |
货品表:sdb_products
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| product_id | number | √ | √ | 货品ID | - |
| goods_id | object:goods/products | - | √ | 商品ID | - |
| barcode | varchar(128) | - | - | 条码 | - |
| title | varchar(255) | - | - | - | - |
| bn | varchar(30) | - | - | 货号 | - |
| price | money | - | √ | 销售价格 | - |
| cost | money | - | - | 成本价 | - |
| mktprice | money | - | - | 市场价 | - |
| name | varchar(200) | - | √ | 货品名称 | - |
| weight | number | - | - | 单位重量 | - |
| unit | varchar(20) | - | - | 单位 | - |
| store | number | - | - | 库存 | - |
| store_place | varchar(255) | - | - | 库位 | - |
| freez | number | - | - | 冻结库存 | - |
| pdt_desc | longtext | - | - | 物品描述 | - |
| props | longtext | - | - | 规格值,序列化 | - |
| uptime | time | - | - | 录入时间 | - |
| last_modify | time | - | - | 最后修改时间 | - |
| disabled | bool | - | - | - | - |
| marketable | bool | - | √ | 上架 | - |
| is_local_stock | bool | - | √ | - | - |
数据表:sdb_supplier
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| sp_id | number | √ | √ | - | - |
| supplier_id | int unsigned | - | √ | - | - |
| supplier_brief_name | varchar(30) | - | - | - | - |
| status | tinyint(4) | - | √ | - | - |
| supplier_pline | longtext | - | - | - | - |
| sync_time | int unsigned | - | √ | - | - |
| domain | varchar(255) | - | √ | - | - |
| has_new | Array | - | √ | - | - |
| sync_time_for_plat | int unsigned | - | √ | - | - |
商品表:sdb_goods
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| goods_id | number | √ | √ | ID | - |
| cat_id | object:goods/productCat | - | √ | 分类 | - |
| type_id | object:goods/gtype | - | - | 类型 | - |
| goods_type | Array | - | √ | 销售类型 | - |
| brand_id | object:goods/brand | - | - | 品牌 | - |
| brand | varchar(100) | - | - | 品牌 | - |
| supplier_id | int unsigned | - | - | - | - |
| supplier_goods_id | number | - | - | - | - |
| wss_params | longtext | - | - | - | - |
| image_default | longtext | - | - | 默认图片 | - |
| udfimg | bool | - | - | 是否用户自定义图 | - |
| thumbnail_pic | varchar(255) | - | - | 缩略图 | - |
| small_pic | varchar(255) | - | - | - | - |
| big_pic | varchar(255) | - | - | - | - |
| image_file | longtext | - | - | 图片文件 | - |
| brief | varchar(255) | - | - | 商品简介 | - |
| intro | longtext | - | - | 详细介绍 | - |
| mktprice | money | - | - | 市场价 | - |
| cost | money | - | √ | 成本价 | - |
| price | money | - | √ | 销售价 | - |
| bn | varchar(200) | - | √ | 商品编号 | - |
| name | varchar(200) | - | √ | 商品名称 | - |
| marketable | bool | - | √ | 上架 | - |
| weight | decimal(20,3) | - | - | 重量 | - |
| unit | varchar(20) | - | - | 单位 | - |
| store | number | - | - | 库存 | - |
| store_place | varchar(255) | - | - | 库位 | - |
| score_setting | Array | - | - | - | - |
| score | number | - | - | 积分 | - |
| spec | longtext | - | - | 规格 | - |
| pdt_desc | longtext | - | - | 物品 | - |
| spec_desc | longtext | - | - | 物品 | - |
| params | longtext | - | - | - | - |
| uptime | time | - | - | 上架时间 | - |
| downtime | time | - | - | 下架时间 | - |
| last_modify | time | - | - | 更新时间 | - |
| disabled | bool | - | √ | - | - |
| notify_num | number | - | √ | 缺货登记 | - |
| rank | decimal(5,3) | - | - | - | - |
| rank_count | int unsigned | - | - | - | - |
| comments_count | int unsigned | - | √ | - | - |
| view_w_count | int unsigned | - | √ | - | - |
| view_count | int unsigned | - | √ | - | - |
| buy_count | int unsigned | - | √ | - | - |
| buy_w_count | int unsigned | - | √ | - | - |
| count_stat | longtext | - | - | - | - |
| p_order | number | - | √ | 排序 | - |
| d_order | number | - | √ | - | - |
| p_1 | number | - | - | - | - |
| p_2 | number | - | - | - | - |
| p_3 | number | - | - | - | - |
| p_4 | number | - | - | - | - |
| p_5 | number | - | - | - | - |
| p_6 | number | - | - | - | - |
| p_7 | number | - | - | - | - |
| p_8 | number | - | - | - | - |
| p_9 | number | - | - | - | - |
| p_10 | number | - | - | - | - |
| p_11 | number | - | - | - | - |
| p_12 | number | - | - | - | - |
| p_13 | number | - | - | - | - |
| p_14 | number | - | - | - | - |
| p_15 | number | - | - | - | - |
| p_16 | number | - | - | - | - |
| p_17 | number | - | - | - | - |
| p_18 | number | - | - | - | - |
| p_19 | number | - | - | - | - |
| p_20 | number | - | - | - | - |
| p_21 | varchar(255) | - | - | - | - |
| p_22 | varchar(255) | - | - | - | - |
| p_23 | varchar(255) | - | - | - | - |
| p_24 | varchar(255) | - | - | - | - |
| p_25 | varchar(255) | - | - | - | - |
| p_26 | varchar(255) | - | - | - | - |
| p_27 | varchar(255) | - | - | - | - |
| p_28 | varchar(255) | - | - | - | - |
| goods_info_update_status | bool | - | - | - | - |
| stock_update_status | bool | - | - | - | - |
| marketable_update_status | bool | - | - | - | - |
| img_update_status | bool | - | - | - | - |
数据表:sdb_sync_tmp
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| tmp_id | int unsigned | √ | √ | - | - |
| s_type | Array | - | √ | - | - |
| ob_id | number | - | √ | - | - |
| supplier_id | int unsigned | - | √ | - | - |
| s_data | longtext | - | - | - | - |
数据表:sdb_msgqueue
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| queue_id | number | √ | √ | - | - |
| title | varchar(250) | - | - | - | - |
| target | varchar(250) | - | √ | - | - |
| event_name | varchar(50) | - | - | - | - |
| data | longtext | - | - | - | - |
| tmpl_name | varchar(50) | - | √ | - | - |
| level | tinyint unsigned | - | √ | - | - |
| sender | varchar(50) | - | √ | - | - |
| sender_order | tinyint unsigned | - | √ | - | - |
货币:sdb_currency
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| cur_code | varchar(8) | √ | √ | - | 货币代码 |
| cur_name | varchar(20) | - | √ | - | 货币名称 |
| cur_sign | varchar(5) | - | - | - | 货币符号 |
| cur_rate | decimal(10,4) | - | √ | - | 汇率 |
| def_cur | bool | - | √ | - | 是否默认币别 |
| disabled | bool | - | - | - | 失效 |
数据表:sdb_pages
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| page_id | number | √ | √ | - | - |
| page_name | varchar(90) | - | √ | - | - |
| page_title | varchar(90) | - | √ | - | - |
| page_content | longtext | - | - | - | - |
| page_time | int unsigned | - | √ | - | - |
数据表:sdb_sendbox
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| out_id | int | √ | √ | - | - |
| tmpl_name | varchar(50) | - | - | - | - |
| sender | varchar(50) | - | √ | - | - |
| creattime | int unsigned | - | √ | - | - |
| target | longtext | - | - | - | - |
| sendcount | number | - | - | - | - |
| content | varchar(200) | - | - | - | - |
| subject | varchar(100) | - | - | - | - |
赠品分类表:sdb_gift_cat
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| giftcat_id | number | √ | √ | ID | - |
| cat | varchar(255) | - | - | 分类名称 | - |
| orderlist | mediumint(6) unsigned | - | - | 排序 | - |
| shop_iffb | intbool | - | - | 是否发布 | - |
| disabled | bool | - | - | - | - |
数据表:sdb_themes
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| theme | varchar(50) | √ | √ | - | - |
| name | varchar(50) | - | - | - | - |
| stime | int unsigned | - | - | - | - |
| author | varchar(50) | - | - | - | - |
| site | varchar(100) | - | - | - | - |
| version | varchar(50) | - | - | - | - |
| info | varchar(255) | - | - | - | - |
| config | longtext | - | - | - | - |
| update_url | varchar(100) | - | - | - | - |
| template | varchar(255) | - | - | - | - |
支付记录:sdb_payments
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| payment_id | varchar(20) | √ | √ | 支付单号 | - |
| order_id | object:trading/order | - | - | 订单号 | - |
| member_id | object:member/member | - | - | 会员用户名 | - |
| account | varchar(50) | - | - | 收款账号 | - |
| bank | varchar(50) | - | - | 收款银行 | - |
| pay_account | varchar(50) | - | - | 支付账户 | - |
| currency | varchar(10) | - | - | 货币 | - |
| money | money | - | √ | 支付金额 | - |
| paycost | money | - | - | 支付网关费用 | - |
| cur_money | money | - | √ | - | - |
| pay_type | Array | - | √ | 支付类型 | - |
| payment | number | - | √ | - | - |
| paymethod | varchar(100) | - | - | 支付方式 | - |
| op_id | object:admin/operator | - | - | 操作员 | - |
| ip | ipaddr | - | - | 支付IP | - |
| t_begin | time | - | - | 支付开始时间 | - |
| t_end | time | - | - | 支付完成时间 | - |
| status | Array | - | √ | 支付状态 | - |
| memo | longtext | - | - | - | - |
| disabled | bool | - | - | - | - |
| trade_no | varchar(30) | - | - | - | - |
数据表:sdb_cost_sync
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| supplier_id | int unsigned | √ | √ | - | - |
| bn | varchar(30) | √ | √ | - | - |
| cost | money | - | √ | - | - |
| version_id | int unsigned | - | √ | - | - |
| product_id | number | - | √ | - | - |
| goods_id | number | - | √ | - | - |
优惠券表:sdb_coupons
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| cpns_id | number | √ | √ | id | 优惠券方案id |
| cpns_name | varchar(255) | - | - | 优惠券名称 | 优惠券名称 |
| pmt_id | number | - | - | - | *暂时废弃 |
| cpns_prefix | varchar(50) | - | √ | 优惠券号码 | 生成优惠券前缀/号码(当全局时为号码) |
| cpns_gen_quantity | number | - | √ | 总数量 | 总数量 |
| cpns_key | varchar(20) | - | √ | - | 优惠券生成的key |
| cpns_status | intbool | - | √ | 是否启用 | 优惠券方案状态 |
| cpns_type | Array | - | √ | 优惠券类型 | 优惠券类型 |
| cpns_point | number | - | - | 兑换所需积分 | 兑换优惠券积分 |
| disabled | bool | - | - | - | 失效 |
优惠券生成记录:sdb_coupons_p_items
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| order_id | object:trading/order | √ | √ | - | 订单ID |
| cpns_id | number | √ | √ | - | 优惠券方案ID |
| cpns_name | varchar(255) | - | - | - | 优惠券方案名称 |
| nums | number | - | - | - | 得到数量 |
存储模板表:sdb_systmpl
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| tmpl_name | varchar(50) | √ | √ | - | - |
| content | longtext | - | - | - | - |
| edittime | int unsigned | - | √ | - | - |
| active | bool | - | √ | - | - |
支付插件实例表:sdb_payment_cfg
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| id | number | √ | √ | 支付方式ID | - |
| custom_name | varchar(100) | - | - | 支付方式名称 | - |
| pay_type | varchar(30) | - | √ | - | - |
| config | longtext | - | - | - | - |
| fee | decimal(9,5) | - | √ | - | - |
| des | longtext | - | - | - | - |
| order_num | smallint(3) unsigned | - | √ | - | - |
| disabled | bool | - | - | - | - |
| orderlist | number | - | - | 排序 | - |
发货/退货单表:sdb_delivery
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| delivery_id | bigint unsigned | √ | √ | 发货单号 | 配送流水号 |
| order_id | object:trading/order | - | - | 订单号 | 订单号 |
| member_id | object:member/member | - | - | 会员用户名 | 订货会员ID |
| money | money | - | √ | 物流费用 | 配送费用 |
| type | Array | - | √ | 配送类型 | 配送单类型 |
| is_protect | bool | - | √ | 是否保价 | 是否保价 |
| delivery | varchar(20) | - | - | 配送方式 | 配送方式(货到付款、EMS...) |
| logi_id | varchar(50) | - | - | - | 物流公司ID |
| logi_name | varchar(100) | - | - | 物流公司 | 物流公司名称 |
| logi_no | varchar(50) | - | - | 物流单号 | 物流单号 |
| ship_name | varchar(50) | - | - | 收货人 | 收货人姓名 |
| ship_area | region | - | - | 收货地区 | 收货人地区 |
| ship_addr | varchar(100) | - | - | 收货地址 | 收货人地址 |
| ship_zip | varchar(20) | - | - | 收货邮编 | 收货人邮编 |
| ship_tel | varchar(30) | - | - | 收货人电话 | 收货人电话 |
| ship_mobile | varchar(50) | - | - | 收货人手机 | 收货人手机 |
| ship_email | varchar(150) | - | - | 收货人Email | 收货人Email |
| t_begin | time | - | - | 单据创建时间 | 单据生成时间 |
| t_end | time | - | - | - | 单据结束时间 |
| op_name | varchar(50) | - | - | 操作员 | 操作者 |
| status | Array | - | √ | - | 状态 |
| memo | longtext | - | - | 备注 | 备注 |
| disabled | bool | - | - | - | 无效 |
| supplier_id | int unsigned | - | - | - | - |
| supplier_delivery_id | varchar(30) | - | - | - | - |
数据表:sdb_member_mattrvalue
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| attr_id | int unsigned | - | √ | - | - |
| member_id | object:member/member | - | √ | - | - |
| value | varchar(100) | - | √ | - | - |
| id | int unsigned | √ | √ | - | - |
配送地区表:sdb_dly_area
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| area_id | mediumint(6) unsigned | √ | √ | ID | - |
| name | varchar(80) | - | √ | 配送地区 | - |
| disabled | bool | - | - | - | - |
| ordernum | smallint(4) unsigned | - | - | 排序 | - |
品牌表:sdb_brand
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| brand_id | number | √ | √ | 品牌id | 品牌id |
| supplier_id | int unsigned | - | - | - | 供应商id |
| supplier_brand_id | number | - | - | - | 供应商品牌id |
| brand_name | varchar(50) | - | √ | 品牌名称 | 品牌名称 |
| brand_url | varchar(255) | - | - | 品牌网址 | 品牌网址 |
| brand_desc | longtext | - | - | - | 品牌介绍 |
| brand_logo | varchar(255) | - | - | - | 品牌图片标识 |
| brand_keywords | longtext | - | - | 品牌别名 | 品牌别名 |
| disabled | bool | - | - | - | 失效 |
| ordernum | number | - | - | 排序 | 排序 |
数据表:sdb_order_log
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| log_id | number | √ | √ | - | - |
| order_id | object:trading/order | - | - | - | - |
| op_id | mediumint(8) | - | - | - | - |
| op_name | varchar(30) | - | - | - | - |
| log_text | longtext | - | - | - | - |
| acttime | time | - | - | - | - |
| behavior | varchar(20) | - | - | - | - |
| result | Array | - | - | - | - |
怒气:sdb_promotion
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| pmt_id | number | √ | √ | 促销ID | - |
| pmts_id | varchar(255) | - | √ | - | - |
| pmta_id | object:trading/promotionActivity | - | - | 促销活动 | - |
| pmt_time_begin | time | - | - | 开始时间 | - |
| pmt_time_end | time | - | - | 结束时间 | - |
| order_money_from | money | - | √ | 订单最小满金额 | - |
| order_money_to | money | - | √ | 订单最大满金额 | - |
| seq | tinyint unsigned | - | √ | - | - |
| pmt_type | Array | - | √ | 优惠类型 | - |
| pmt_belong | Array | - | √ | 所属 | - |
| pmt_bond_type | Array | - | √ | 关联商品方式 | - |
| pmt_describe | longtext | - | - | 规则描述 | - |
| pmt_solution | longtext | - | - | 方案 参数表 | - |
| pmt_ifcoupon | tinyint unsigned | - | √ | 是否允许使用优惠券 | - |
| pmt_update_time | time | - | - | 促销规则更新时间 | - |
| pmt_basic_type | Array | - | - | 促销基本类型 | - |
| disabled | bool | - | - | - | - |
| pmt_ifsale | bool | - | √ | - | - |
| pmt_distype | tinyint unsigned | - | √ | - | - |
退货记录表:sdb_return_product
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| order_id | object:trading/order | - | √ | 订单号 | - |
| member_id | object:member/member | - | √ | 申请人 | - |
| return_id | bigint unsigned | √ | √ | ID | - |
| title | varchar(200) | - | √ | 售后服务标题 | - |
| content | longtext | - | - | - | - |
| status | Array | - | √ | 处理状态 | - |
| image_file | varchar(255) | - | √ | - | - |
| product_data | longtext | - | - | - | - |
| comment | longtext | - | - | - | - |
| add_time | time | - | √ | 售后处理时间 | - |
| disabled | bool | - | √ | - | - |
订单优惠方案:sdb_order_pmt
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| pmt_id | bigint(20) unsigned | √ | √ | - | - |
| order_id | object:trading/order | √ | √ | - | - |
| pmt_amount | money | - | - | - | - |
| pmt_memo | longtext | - | - | - | - |
| pmt_describe | longtext | - | - | - | - |
数据表:sdb_widgets_set
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| widgets_id | int | √ | √ | - | - |
| base_file | varchar(50) | - | √ | - | - |
| base_slot | tinyint unsigned | - | √ | - | - |
| base_id | varchar(20) | - | - | - | - |
| widgets_type | varchar(20) | - | √ | - | - |
| widgets_order | tinyint unsigned | - | √ | - | - |
| title | varchar(100) | - | - | - | - |
| domid | varchar(100) | - | - | - | - |
| border | varchar(100) | - | - | - | - |
| classname | varchar(100) | - | - | - | - |
| tpl | varchar(100) | - | - | - | - |
| params | longtext | - | - | - | - |
| modified | time | - | - | - | - |
| vary | varchar(250) | - | - | - | - |
数据表:sdb_magicvars
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| var_name | varchar(20) | √ | √ | 变量名 | - |
| var_title | varchar(100) | - | - | 名称 | - |
| var_remark | varchar(100) | - | √ | 备注 | - |
| var_value | text | - | - | 变量值 | - |
| var_type | Array | - | √ | 变量类型 | - |
| disabled | bool | - | √ | - | - |
类别属性值有限表:sdb_goods_cat
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| cat_id | number | √ | √ | 分类ID | - |
| parent_id | number | - | - | 分类ID | - |
| supplier_id | int unsigned | - | - | - | - |
| supplier_cat_id | number | - | - | - | - |
| cat_path | varchar(100) | - | - | 分类路径(从根至本结点的路径,逗号分隔,首部有逗号) | - |
| is_leaf | bool | - | √ | 是否叶子结点(true:是;false:否) | - |
| type_id | mediumint | - | - | 类型序号 | - |
| cat_name | varchar(100) | - | √ | 分类名称 | - |
| disabled | bool | - | √ | 是否屏蔽(true:是;false:否) | - |
| p_order | number | - | - | 排序 | - |
| goods_count | number | - | - | 商品数 | - |
| tabs | longtext | - | - | - | - |
| finder | longtext | - | - | 渐进式筛选容器 | - |
| addon | longtext | - | - | - | - |
| child_count | number | - | √ | - | - |
管理员角色表:sdb_admin_roles
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| role_id | int unsigned | √ | √ | 角色id | 角色id |
| role_name | varchar(100) | - | √ | 角色名称 | 角色名称 |
| role_memo | text | - | - | 角色备注 | 角色备注 |
| disabled | bool | - | √ | - | 无效 |
数据表:sdb_pmt_goods
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| pmt_id | number | √ | √ | - | - |
| goods_id | object:goods/products | √ | √ | - | - |
| count | number | - | - | - | - |
数据表:sdb_pmt_goods_cat
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| cat_id | number | √ | √ | - | - |
| brand_id | number | √ | √ | - | - |
| pmt_id | number | √ | √ | - | - |
数据表:sdb_pub_files
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| file_id | int | √ | √ | - | - |
| file_name | varchar(50) | - | - | 文件名 | - |
| file_ident | varchar(100) | - | √ | 文件 | - |
| cdate | int unsigned | - | √ | 日期 | - |
| memo | varchar(250) | - | - | 描述 | - |
| disabled | bool | - | √ | - | - |
数据表:sdb_lnk_roles
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| op_id | number | √ | √ | - | - |
| role_id | int unsigned | √ | √ | - | - |
数据表:sdb_package_product
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| product_id | number | √ | √ | - | - |
| goods_id | object:goods/products | √ | √ | - | - |
| discount | decimal(5,3) | - | - | - | - |
| pkgnum | number | - | √ | - | - |
积分历史:sdb_point_history
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| id | number | √ | √ | - | - |
| member_id | object:member/member | - | √ | - | - |
| point | int(10) | - | √ | - | - |
| time | time | - | √ | - | - |
| reason | varchar(50) | - | √ | - | - |
| related_id | bigint unsigned | - | - | - | - |
| type | tinyint(1) | - | √ | - | - |
| operator | varchar(50) | - | - | - | - |
数据表:sdb_member_lv
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| member_lv_id | number | √ | √ | ID | - |
| name | varchar(100) | - | √ | 等级名称 | - |
| dis_count | decimal(5,2) | - | √ | 优惠折扣率 | - |
| pre_id | mediumint | - | - | - | - |
| default_lv | intbool | - | √ | 是否默认 | - |
| deposit_freeze_time | int | - | - | - | - |
| deposit | int | - | - | - | - |
| more_point | int | - | - | - | - |
| point | mediumint(8) | - | √ | 所需积分 | - |
| lv_type | Array | - | √ | 等级类型 | - |
| disabled | bool | - | - | - | - |
| show_other_price | bool | - | √ | - | - |
| order_limit | tinyint(1) | - | √ | - | - |
| order_limit_price | money | - | √ | - | - |
| lv_remark | text | - | - | - | - |
| experience | int(10) | - | √ | 经验值 | - |
物品扩展信息:sdb_product_memo
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| product_id | number | √ | √ | - | - |
| p_key | varchar(20) | √ | √ | - | - |
| p_value | longtext | - | - | - | - |
数据表:sdb_pmt_member_lv
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| member_lv_id | mediumint | - | - | - | - |
| pmt_id | number | - | - | - | - |
数据表:sdb_op_sessions
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| sess_id | varchar(32) | √ | √ | - | - |
| op_id | mediumint(6) unsigned | - | - | - | - |
| login_time | time | - | - | - | - |
| last_time | time | - | - | - | - |
| api_id | number | - | - | - | - |
| sess_data | longtext | - | - | - | - |
| status | tinyint(1) | - | - | - | - |
| ip | varchar(17) | - | - | - | - |
数据表:sdb_tpl_source
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| tpl_source_id | int | √ | √ | - | - |
| tpl_type | varchar(50) | - | √ | - | - |
| tpl_name | varchar(100) | - | √ | - | - |
| tpl_file | varchar(100) | - | √ | - | - |
| tpl_theme | varchar(100) | - | √ | - | - |
数据表:sdb_member_attr
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| attr_id | int unsigned | √ | √ | 选项ID | - |
| attr_name | varchar(20) | - | √ | 选项名称 | - |
| attr_type | varchar(20) | - | √ | - | - |
| attr_required | bool | - | √ | - | - |
| attr_search | bool | - | √ | 搜索 | - |
| attr_option | text | - | - | - | - |
| attr_valtype | varchar(20) | - | √ | - | - |
| disabled | bool | - | √ | - | - |
| attr_tyname | varchar(20) | - | √ | 选项类型 | - |
| attr_group | varchar(20) | - | √ | 选项类别 | - |
| attr_show | bool | - | √ | 显示 | - |
| attr_order | int unsigned | - | √ | 排序 | - |
数据表:sdb_type_brand
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| type_id | number | √ | √ | - | - |
| brand_id | number | √ | √ | - | - |
| brand_order | number | - | - | - | - |
数据表:sdb_member_coupon
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| memc_code | varchar(255) | √ | √ | - | - |
| cpns_id | number | - | √ | - | - |
| member_id | object:member/member | - | √ | - | - |
| memc_gen_orderid | varchar(15) | - | - | - | - |
| memc_source | Array | - | √ | - | - |
| memc_enabled | bool | - | √ | - | - |
| memc_used_times | mediumint | - | - | - | - |
| memc_gen_time | time | - | - | - | - |
商店后台管理员表:sdb_operators
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| op_id | number | √ | √ | ID | - |
| username | varchar(20) | - | √ | 用户名 | - |
| userpass | varchar(32) | - | √ | - | - |
| name | varchar(30) | - | - | 姓名 | - |
| config | longtext | - | - | - | - |
| favorite | longtext | - | - | - | - |
| super | intbool | - | √ | 超级管理员 | - |
| lastip | varchar(20) | - | - | - | - |
| logincount | number | - | √ | 登陆次数 | - |
| lastlogin | time | - | √ | 最后登陆时间 | - |
| status | intbool | - | √ | 启用 | - |
| disabled | bool | - | √ | - | - |
| op_no | varchar(50) | - | - | 编号 | - |
| department | varchar(50) | - | - | 部门 | - |
| memo | text | - | - | 备注 | - |
配送地区运费配置表:sdb_dly_h_area
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| dha_id | number | √ | √ | - | - |
| dt_id | number | - | - | - | - |
| area_id | mediumint(6) unsigned | - | - | - | - |
| price | varchar(100) | - | - | - | - |
| has_cod | tinyint(1) unsigned | - | √ | - | - |
| areaname_group | longtext | - | - | - | - |
| areaid_group | longtext | - | - | - | - |
| config | varchar(255) | - | - | - | - |
| expressions | varchar(255) | - | - | - | - |
| ordernum | smallint(4) unsigned | - | - | - | - |
数据表:sdb_goods_virtual_cat
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| virtual_cat_id | number | √ | √ | 虚拟分类ID | - |
| virtual_cat_name | varchar(100) | - | √ | 虚拟分类名称 | - |
| filter | longtext | - | - | - | - |
| addon | longtext | - | - | - | - |
| type_id | number | - | - | 类型 | - |
| disabled | bool | - | √ | - | - |
| parent_id | number | - | - | 虚拟分类父ID | - |
| cat_id | number | - | - | - | - |
| p_order | number | - | - | 排序 | - |
| cat_path | varchar(100) | - | - | - | - |
| child_count | number | - | - | - | - |
发货点表:sdb_dly_center
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| dly_center_id | int unsigned | √ | √ | ID | - |
| name | varchar(50) | - | √ | 发货点名称 | - |
| address | varchar(200) | - | √ | 地址 | - |
| region | region | - | - | 地区 | - |
| zip | varchar(20) | - | - | 邮编 | - |
| phone | varchar(100) | - | - | 电话 | - |
| uname | varchar(100) | - | - | 发货人 | - |
| cellphone | varchar(100) | - | - | 手机 | - |
| sex | Array | - | - | 性别 | - |
| memo | longtext | - | - | - | - |
| disabled | bool | - | √ | - | - |
数据表:sdb_promotion_scheme
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| pmts_id | number | √ | √ | - | - |
| pmts_name | varchar(250) | - | - | - | - |
| pmts_memo | longtext | - | - | - | - |
| pmts_solution | longtext | - | - | - | - |
| pmts_type | tinyint(3) | - | √ | - | - |
数据表:sdb_template_relation
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| template_relation_id | int | √ | √ | 网店机器人id | - |
| source_type | varchar(20) | - | √ | 条件 | - |
| source_id | int | - | √ | 动作 | - |
| template_name | varchar(100) | - | √ | - | - |
| template_type | varchar(100) | - | - | - | - |
数据表:sdb_autosync_rule_relation
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| rule_id | number | - | √ | - | - |
| supplier_id | int unsigned | - | √ | - | - |
| pline_id | tinyint(3) unsigned | - | √ | - | - |
类型 规格索引表:sdb_goods_type_spec
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| spec_id | number | - | - | - | - |
| type_id | number | - | - | - | - |
| spec_style | Array | - | √ | - | - |
数据表:sdb_image_sync
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| img_sync_id | int unsigned | √ | √ | - | - |
| type | Array | - | √ | - | - |
| supplier_id | int unsigned | - | √ | - | - |
| supplier_object_id | number | - | √ | - | - |
| add_time | int unsigned | - | √ | - | - |
| command_id | int unsigned | - | √ | - | - |
| failed | Array | - | √ | - | - |
数据表:sdb_sell_logs
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| log_id | mediumint(8) | √ | √ | - | - |
| member_id | object:member/member | - | √ | - | - |
| name | varchar(50) | - | - | - | - |
| price | money | - | - | - | - |
| product_id | mediumint(8) | - | √ | - | - |
| goods_id | object:goods/products | - | √ | - | - |
| product_name | varchar(200) | - | - | - | - |
| pdt_desc | varchar(200) | - | - | - | - |
| number | number | - | - | - | - |
| createtime | time | - | - | - | - |
数据表:sdb_print_tmpl
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| prt_tmpl_id | int unsigned | √ | √ | ID | - |
| prt_tmpl_title | varchar(100) | - | √ | 单据名称 | - |
| shortcut | bool | - | - | 是否启用 | - |
| disabled | bool | - | - | - | - |
| prt_tmpl_width | tinyint unsigned | - | √ | - | - |
| prt_tmpl_height | tinyint unsigned | - | √ | - | - |
| prt_tmpl_data | longtext | - | - | - | - |
商品会员等级价格:sdb_goods_lv_price
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| product_id | number | √ | √ | - | - |
| level_id | number | √ | √ | - | - |
| goods_id | object:goods/products | √ | √ | - | - |
| price | money | - | - | - | - |
优惠券使用记录:sdb_coupons_u_items
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| order_id | object:trading/order | √ | √ | - | 应用订单号 |
| cpns_id | number | √ | √ | - | 优惠券方案ID |
| cpns_name | varchar(255) | - | - | - | 优惠券方案名称 |
| memc_code | varchar(255) | - | - | - | 使用的优惠券号码 |
| cpns_type | Array | - | - | - | 优惠券类型0全局 1用户 2外部优惠券 |
商品扩展信息:sdb_goods_memo
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| goods_id | object:goods/products | √ | √ | - | - |
| p_key | varchar(20) | √ | √ | - | - |
| p_value | longtext | - | - | - | - |
发货/退货单明细表:sdb_delivery_item
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| item_id | int unsigned | √ | √ | - | - |
| delivery_id | bigint unsigned | - | √ | - | - |
| item_type | Array | - | √ | - | - |
| product_id | bigint unsigned | - | √ | - | - |
| product_bn | varchar(30) | - | - | - | - |
| product_name | varchar(200) | - | - | - | - |
| number | number | - | √ | - | - |
数据表:sdb_goods_keywords
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| goods_id | object:goods/products | √ | √ | - | - |
| keyword | varchar(40) | √ | √ | - | - |
| refer | varchar(255) | - | - | - | - |
| res_type | enum('goods','article') | √ | √ | - | - |
商品购买率统计表:sdb_goods_rate
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| goods_1 | number | √ | √ | - | - |
| goods_2 | number | √ | √ | - | - |
| manual | Array | - | - | - | - |
| rate | number | - | √ | - | - |
预存款历史记录:sdb_advance_logs
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| log_id | number | √ | √ | 日志id | 日志id |
| member_id | object:member/member | - | √ | 用户名 | 用户id |
| money | money | - | √ | 出入金额 | 出入金额 |
| message | varchar(255) | - | - | 管理备注 | 管理备注 |
| mtime | time | - | √ | 交易时间 | 交易时间 |
| payment_id | varchar(20) | - | - | 支付单号 | 支付单号 |
| order_id | object:trading/order | - | - | 订单号 | 订单号 |
| paymethod | varchar(100) | - | - | 支付方式 | 支付方式 |
| memo | varchar(100) | - | - | 业务摘要 | 业务摘要 |
| import_money | money | - | √ | 存入金额 | 存入金额 |
| explode_money | money | - | √ | 支出金额 | 支出金额 |
| member_advance | money | - | √ | 当前余额 | 当前余额 |
| shop_advance | money | - | √ | 商店余额 | 商店余额 |
| disabled | bool | - | √ | - | 失效 |
数据表:sdb_autosync_rule
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| rule_id | number | √ | √ | ID | - |
| supplier_op_id | tinyint(3) | - | √ | - | - |
| local_op_id | tinyint(3) | - | √ | - | - |
| disabled | Array | - | √ | - | - |
| memo | varchar(255) | - | - | - | - |
| rule_name | varchar(255) | - | √ | - | - |
商品规格索引表:sdb_goods_spec_index
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| type_id | number | - | √ | - | - |
| spec_id | number | - | √ | - | - |
| spec_value_id | number | √ | √ | - | - |
| spec_value | varchar(100) | √ | √ | - | - |
| goods_id | object:goods/products | - | √ | - | - |
| product_id | number | √ | √ | - | - |
数据表:sdb_promotion_activity
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| pmta_id | number | √ | √ | 序号 | - |
| pmta_name | varchar(200) | - | - | 活动名称 | - |
| pmta_enabled | bool | - | - | 发布 | - |
| pmta_time_begin | time | - | - | 开始时间 | - |
| pmta_time_end | time | - | - | 结束时间 | - |
| pmta_describe | longtext | - | - | 详细描述 | - |
| disabled | bool | - | - | - | - |
数据表:sdb_supplier_pdtbn
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| sp_id | number | √ | √ | - | - |
| local_bn | varchar(200) | √ | √ | - | - |
| source_bn | varchar(200) | - | √ | - | - |
| default | Array | - | √ | - | - |
| supplier_id | int unsigned | - | √ | - | - |
商店中商品规格值:sdb_spec_values
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| spec_value_id | number | √ | √ | - | - |
| spec_id | number | - | √ | - | - |
| spec_value | varchar(100) | - | √ | - | - |
| spec_image | varchar(255) | - | √ | - | - |
| p_order | number | - | √ | - | - |
| supplier_id | int unsigned | - | - | - | - |
| supplier_spec_value_id | number | - | - | - | - |
数据表:sdb_job_data_sync
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| job_id | int unsigned | √ | √ | - | - |
| from_time | int unsigned | - | √ | - | - |
| to_time | int unsigned | - | √ | - | - |
| page | number | - | √ | - | - |
| limit | number | - | √ | - | - |
| supplier_id | int unsigned | - | √ | - | - |
| supplier_pline | longtext | - | - | - | - |
| auto_download | Array | - | √ | - | - |
| to_cat_id | number | - | - | - | - |
数据表:sdb_job_apilist
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| job_id | int unsigned | √ | √ | - | - |
| supplier_id | int unsigned | - | √ | - | - |
| api_name | varchar(100) | - | √ | - | - |
| api_params | longtext | - | - | - | - |
| api_version | varchar(10) | - | √ | - | - |
| api_action | varchar(100) | - | √ | - | - |
| page | number | - | √ | - | - |
| limit | number | - | √ | - | - |
商店中商品规格:sdb_specification
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| spec_id | number | √ | √ | 规格id | - |
| spec_name | varchar(50) | - | √ | 规格名称 | - |
| spec_show_type | Array | - | √ | 显示方式 | - |
| spec_type | Array | - | √ | 类型 | - |
| spec_memo | varchar(50) | - | √ | 规格备注 | - |
| p_order | number | - | √ | - | - |
| disabled | bool | - | √ | - | - |
| supplier_id | int unsigned | - | - | - | - |
| supplier_spec_id | number | - | - | - | - |
| lastmodify | int unsigned | - | - | - | - |
商品类型表:sdb_goods_type
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| type_id | number | √ | √ | 类型序号 | - |
| name | varchar(100) | - | √ | 类型名称 | - |
| alias | longtext | - | - | - | - |
| is_physical | intbool | - | √ | 实体商品 | - |
| supplier_id | int unsigned | - | - | - | - |
| supplier_type_id | number | - | - | - | - |
| schema_id | varchar(30) | - | √ | - | - |
| props | longtext | - | - | - | - |
| spec | longtext | - | - | - | - |
| setting | longtext | - | - | - | 类型设置 |
| minfo | longtext | - | - | - | - |
| params | longtext | - | - | - | - |
| dly_func | intbool | - | √ | - | - |
| ret_func | intbool | - | √ | - | - |
| reship | Array | - | √ | - | - |
| disabled | bool | - | - | - | - |
| is_def | bool | - | √ | 类型标示 | - |
| lastmodify | int unsigned | - | - | - | - |
数据表:sdb_job_goods_download
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| job_id | int unsigned | √ | √ | - | - |
| supplier_id | int unsigned | - | √ | - | - |
| supplier_goods_id | number | - | √ | - | - |
| supplier_goods_count | int unsigned | - | √ | - | - |
| command_id | int unsigned | - | √ | - | - |
| failed | Array | - | √ | - | - |
| to_cat_id | number | - | - | - | - |
数据表:sdb_autosync_task
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| supplier_id | int unsigned | √ | √ | - | - |
| command_id | int unsigned | √ | √ | - | - |
| local_op_id | number | - | - | - | - |
数据表:sdb_order_items
| 字段名称 | 数据类型 | 主键 | 必填 | 含义 | 说明 |
|---|---|---|---|---|---|
| item_id | number | √ | √ | - | - |
| order_id | object:trading/order | - | √ | - | - |
| product_id | number | - | √ | - | - |
| dly_status | Array | - | √ | - | - |
| type_id | number | - | - | - | - |
| bn | varchar(30) | - | - | - | - |
| name | varchar(200) | - | - | - | - |
| cost | money | - | - | - | - |
| price | money | - | √ | - | - |
| amount | money | - | - | - | - |
| score | number | - | - | - | - |
| nums | number | - | √ | - | - |
| minfo | longtext | - | - | - | - |
| sendnum | number | - | √ | - | - |
| addon | longtext | - | - | - | - |
| is_type | Array | - | √ | - | - |
| point | mediumint | - | - | - | - |
| supplier_id | int unsigned | - | - | - | - |
商品结构图
会员数据结构图
订单数据结构图
网店配置数据结构图