商城介绍
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中, 做逻辑判断,展示seotitle或page_title