ShopEx_手册,店主,二次开发必备

更新时间:2023-04-28 04:07:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

ShopEx 完全手册author : ShopEx开发团队

since : 2009-12-03 $Rev: 308 $

1. 前言和导读

本手册对应版本shopex 4.8.5

本手册部分内容由shopex系统源代码直接生成,因此会持续保持更新

?html版本: 6f57dcf69e31433239689322/shopex-b2c/

?pdf版本: 6f57dcf69e31433239689322/shopex-b2c/shopex-book.pdf

相关文档

?模板手册: 6f57dcf69e31433239689322/shopex-b2c/tplbook/

本手册适合谁来阅读:

?网店店主:

查看包括怎样获取shopex。如何选择主机。怎样安装和调优你的网店系统。

?开发者:

希望扩展shopex功能的朋友,本手册将为你展示多种扩展系统的方法,你将发现shopex已经为你很多准备工作。手册后面的附录里包含了shopex系统的数据对象和数据库的定义细节。

2. 安装和使用

ShopExV4.8网店系统是一套基于网上快速建店的标准化B2C电子商务系统。系统集成了最基本最普通最常用的电子商务运作流程及使用功能,可以满足正常的开店需求。

2.1. 安装shopex

2.1.1. 如何选择主机

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

小技巧:

?你可以在ie浏览器里直接ctrl+a,ctrl+c复制出来,不需要担心格式问题

?这是个独立的文件,同时也会检测php环境和zend opt。

2.2. 初始化配置系统

2.3. 系统调优 2.3.1. url rewrite? ? ? 如果开启 rewrite,过去的网址将依然有效,用户可以同时通过新老两种 url 访问你的系统。同时我们会通过发送 301 头信息更新搜索引擎的记录为新地址 该转换规则存在于 plugins/functions/urlmap.php 文件中。 其他系统转换过来的用户可以通过修改该文件,使得旧地址依然有效 新版本 url 地址映射关系是由 plugins/functions/actmapper.php 文件所定义, 熟悉 php 的用户可以自己设计独特的 url 方式
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 语法。下载地址 6f57dcf69e31433239689322/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众多,我们仅列出具有代表性的几款

2.3.2. 搜索引擎优化(SEO)

2.3.3. 服务器配置

2.4. 操作技巧

2.4.1. 使用快捷键

快捷键功能

alt+1 商品

alt+2 订单

alt+3 会员

alt+4 营销推广

alt+5 站点管理

alt+6 统计报表

alt+5 站点管理

esc 关闭对话框/ 关闭列表详细

R 刷新主区域

2.4.2. 使用条码扫描器

2.5. 业务成长之后...

当你需要丰富的权限分配,工作流,来规范你的业务流程的时候。可以选用shopex 提供的订单处理中心系统。

当你需要扩展网店系统功能来支撑精细化的销售运作的时候。你可以寻找一些有技术实例的团队来解决这个问题。当然你也可以组织自己的技术部门,把本手册第三章后面的部分扔给他们就好了。shopex内建的插件体系足够让他们满足你的要求。

2.6. 升级方法

现在的升级逻辑很简单

先跑php 然后调用diff

先跑php 是让数据库里的东西可以跟着变过来

调用数据库diff 去处理php没搞完的杂事

3. 扩展shopex

扩展有两种办法,一种是通过增加插件。另一种是采用我们称之为"第三方开发方案"的方式。

?shopex对插件的设计目标是语法简单,并且可以很方便的将成果发布,传递出去。

?第三方开发方案的特点是,无所不能,功能强大。但实现稍微复杂。

除了一些基本的模板改动之外,其他都要求开发者要基本的懂得PHP语法,并且有一些最基础的面向对象编程的知识。函数不熟可以去查手册,大多数时候,只要会改的技能就可以了。

3.1. 插件体系

shopex系统支持13种插件,其中促销方式可能在会后面的版本有大的改动。

从插件的文件组织方式上可以分成目录型和文件型两大类插件。

?文件型插件:

每个单独的php文件就是一个插件,文件名和其中的类的名称要符合一下规则:

o文件名: <标示名>.插件名.php

o类名:<标示名>_插件名

例如: 支付插件taobao的文件名是:payment.taobao.php, 对应的文件内容是:

class payment_taobao {

var $name = ... //插件名称

var $version = ... //版本号

...

}

?>

可以被放置在除目录型插件里面的任何plugins下的任何位置。到后台刷新插件数据库时,就会被发现。

目录型插件:

因为有些自己的资源,所以被设计成独立的一个目录,其中必须放置一个主插件php文件,文件的命名规则和类的内容都和文件型插件相同。一个目录下只能放置一个主文件。其余文件都作为这个主文件的资源存在。可以被放置在除目录型插件里面的任何plugins下的任何位置。

在4.8.5版本之后,不同类型插件不需要放在各自类型的目录里。只要放在plugins下面就都可以被扫描到。这是为下一步app机制作的准备。

3.1.1. 用户登录插件(passport)

文件型

可以集合msn passport, google account, openid等统一登录系统

/** * 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){

}

}

?>

3.1.2. 图片存储方式插件(storager)文件型 如果你去查看 shopex 系统里存放商品图片的数据表 sdb_gimages,会发现图片存放是一个竖线分割的字符串, 规则如下:
网址|资源定位|存储方式比如:
images/goods/01/02.jpg|goods/01/02.jpg|fs_storager为什么要这样设计? 我们把这个字符串叫 storager 格式,他的好处是可以方便的使用多种存储后端,shopex 可以把图片存在 ftp 上,存在 flickr 里,存在 amazon 的 s3 里,或者存在 memcache 里。 在此分段解释一下各部分的使用方式: ? 第一个段是用来在前台访问的:就是 url,可以是绝对地址,也可以是相对地址。 ? 第二段是存储代码用来定位资源的:比如是 flickr 里的图片 id, ftp 服务器里的相对资源 ? 第三段是图片存储器的类型表示, 代码会定位到 plugins/function/<存储类型>.php 规则很简单,只取第一个竖线前面的部分,我们通过一个 smarty 插件做 storager 格式和 url 的转换:


如果是远程图片,或者是从其他系统导入的数据,就不会有竖线。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 6f57dcf69e31433239689322; listen *:80; location / { set $memcached_key $uri; memcached_pass tt_server1; } }接下来,搭建一组这样的 nginx 服务器,再配合 lvs,nginx 集群+tt 集群,一个高性能,高可用互备的图片集群就建立起来了。
3.1.3. 支付方式插件(payment)文件型

//订单提交正式交易地址 var $submitUrl= 'https://6f57dcf69e31433239689322/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' ) );

本文来源:https://www.bwwdw.com/article/upgq.html

Top