首页 > 代码库 > 关于ecshop二次开发

关于ecshop二次开发

商城介绍

Ecshop--电子商城管理系统.

高春辉-->ecshop->卖给->康盛--->ec单独卖给-->shopex(上海商派)

Ecshop代码是开放的,可以修改,但是版本是私有的,改了之后,不能以任何派生版本来发布.

 

目前市场上流行的商城管理系统:

Ecshop

shopNC(代码部分加密)

国外:zencart,magento(麦金斗)

一般在外贸的公司,zencart,magento用的多一些.

Magento是基于zendframework来开发的.


安装

Ec的压缩包,一般会有如下3个目录

Docs-->帮助文档

Upgrade->升级包

Upload->上传文件,(即商城项目目录)

 

upload上传到服务器,修改为任意名,运行后自动提示安装.

模板制作典型工作流程:

商城制作方已有设计稿,设计稿的风格符合ec的大致板块.

把设计稿制作成ec需要的模板文件.(其实就是smarty模板)


二次开发:

往往是通过模板的修改,达不到想要的效果,比如需要增加一个信用卡在线支付,或者分期支付.这是ec没有的功能,

就需要针对源码进行改动.

价格不定,但比模板制作要高.


表结构

参考数据字典

重要的表:

Ecs_goods表 :商品表

Ecs_category :栏目表

Ecs_brand:栏目表

 

Order_info 订单表

Order_goods 订单对应的商品表.

 

User 用户表

User_account 管理员操作账户的记录表

Account_log:用户的账户变动流水表

Collect_goods: 用户收藏商品表

 

Feedback:留言表,不针对商品,直接针对店家留的言.

Comment:是针对商品做的评论.

 

Nav 表 导航链接表,可以定制页面上的导航信息.
执行顺序

1:Ecshop属性面向过程+函数调用为主而且没用单入口模式

具体的功能对应具体的页面.

2:用的模板引擎是简化的smarty模板.



init中包含的页面,基本都是声明函数.(因为ec是面向过程+函数来编程的)

Lib_base.php : base 基地基础

此文件声明的是全网站甚至任何网站,都常用用到的函数,
Sub_str : 截取中文无乱码的文件.

Real_ip: 读取客户端IP, $_SERVER来读的.

Str_len: 计算字符串在视觉效果上的长度一个中文按2个字符算(因为多数情况下,一个中文的宽度是一个字母的2倍宽.)

Get_crlf: 获取当前用户的换行符. Windows->\r\n, *nix->\n , mac->\r

Send_mail : 发送邮件.

Get_version:获得服务器环境的gd库版本

File_mode_info:获取文件的权限信息.

Log_write: 记录日志到文件

Mk_dir: 递归创建目录

addslashes_deep:递归的对数组进行转义.

addslashes_deep_obj: 递归对对象的属性进行转义.

stripslashes_deep :递归反转义

make_semiangle: 全角字符转半角

check_file_type :检查文件后缀,一般检查后缀,直接通过截取文件名来实现.

A.php==> a.jpg,伪装上传,带来攻击. Ngnix+PHP某个版本,就有此漏洞.

check_file_type是通过分析文件的头信息域来实现的.

mysql_like_quote:sql语句扣like条件进行转义,防止注入.

real_server_ip:获取服务器端IP地址

ecs_geoip: IP地址转为"省市地址".

trim_right:中英文混杂时,去除右侧可能的乱码.

read_static_cache:读文件缓存(把数组等信息序列化,放在文本里存储)

write_static_cache:写文件缓存.

 

Lib_common.php 

主要放置本网站要实现的一些功能的主要函数

比如:

Get_brand_list 获取品牌列表

get_children:获取指定栏目的子孙栏目.

 

本文件下的函数比较多,用到的再来讲解.

 

Lib_main.php

主要放置前台功能的函数库

比如:

update_user_info :更新用户的session信息

get_user_info:获取用户的详细信息

assign_ur_here:计算面包屑导航路径.

assign_articles:获取文章列表并赋给smarty

 

Lib_inert.php

放置的是在模板中局部不缓存时,调用的insert_开头的函数.

 

Lib_goods.php

是商品操作最频繁函数.

 

 

小试牛刀:以商城标题中去除"powered by Ecshop"为例

打开任意一个页面看其模板,

goods.php为例

Goods.php->找模板->goods.dwt,

分析模板的标签找到相应的{$page_title}标签

 

回到goods.php,必须推出--> assing(‘page_title‘,xxx)这个过程,

再找到,===> $page_tile=>$position[‘title‘]=>$position==>assign_ur_here()函数

 

留一下问题:

在开发的过程中,有时需要清缓存才能看到效果

如何彻底禁用缓存,方便开发时的调试.


二次开发的大原则

1:能后台配置,不去修改.

2:能用js实现,不改模板(比如来一个隔行换色)

3:能改模板的,不要改PHP

4:能改PHP完成的,不要改数据库

 

二次开发实战

1) 任意页面显示用户余额

2) 用户名/email都可以登陆

3) 商品页面自定义title,便于SEO

4) 商品按颜色选择功能

5) 去除页面底部的版本后,首页的底部随机出现"powered by ecshop"的字样,解决该问题.(提示:js)

6) 放大镜功能

 

显示用户余额

直接在/library/member_lbi

增加如右代码  

因为$user_info是系统赋给smarty的一个变量,而且此变量已经存在用户余额这个字段. 

 

户名和email都可以登陆,

user.php,347行左右,

增加如下代码

 

思路:

判断传来的是否是email,如果是email,则查询数据库,email转成用户名.


颜色或者尺码选择功能

1:ec后台有商品的"属性管理",请利用此功能做开发(只需要用js或者改模板就能实现)

2:放大境可以利用js来实现.搜索"js放大境"


商品页面自定义title,便于SEO

功能讲解

商品页面的title信息是"商品名->栏目名->上级栏目名->网店名"这个规则来自动生成.

对于title,SEO一个很重要的数据,自动生成的title很可能不符合SEO的需要.

 

步骤:我们如何自定义title?

:首先在商品表增加title字段,

然后在商品页面的.php文件中,读取此字段并赋给smarty

然后再展示到模板上.

 

从后台管理角度看:

发布商品时,表单中应有自定义title表单项,并能提交入库.

修改商品时,表单中也应有自定义title表单项,并能提交入库.

 

实施:

1:ecs_goods商品表增加seotitle字段.

 alter table ecs_goods add seotitle varchar(60) not null default ‘‘ after goods_name;

 

2:在后台修改商品发布时的表单项,增加 "自定义title"表单项.

 

3:admin/goods.php中的insert ,update代码段,分别接收此参数,并入库.

4:修改/goods.php, 即前台商品页面,seotitle赋给smarty

5:在模板中,goods.dwt做逻辑判断,展示seotitlepage_title