Ecshop Customization Cases Cn

EcShop开发案例整理

Reference:
西林街 - www.xilinjie.com

目录
1. ECSHOP商品比较,如何限制每次比较的数量…………………………………………………………………………………………………….4
2. 将ECSHOP购买记录的用户名的后几位字符用***代替…………………………………………………………………………………….4
3. ECSHOP商品页,加入购物车弹出浮动层,仿淘宝效果…………………………………………………………………………………………5
4.在ECSHOP会员中心显示冻结资金……………………………………………………………………………………………………………………9
5.ECSHOP商品页购买记录的每页条数如何修改…………………………………………………………………………………………………..9
6.ECSHOP信息提示页面的跳转时间设置……………………………………………………………………………………………………………10
7.在ECSHOP其他页面调用首页的FLASH主广告………………………………………………………………………………………………..10
8.ECSHOP在打印订单时怎么才能打印出商品序号?………………………………………………………………………………………….11
9.如何让ECSHOP商品名称出现多种颜色……………………………………………………………………………………………………………12
10.如何修改ECSHOP前后台的验证码背景………………………………………………………………………………………………………….12
11.如何去掉Ecshop搜索页Title里的“商品搜索”四个字………………………………………………………………………………………..13
12.将Ecshop后台商品分类页改造成点击展开子分类…………………………………………………………………………………………..13
13.将“您最近30天内提交了4个订单”链接到订单列表页………………………………………………………………………………….14
14.ECSHOP后台订单列表的商品缩略图尺寸在哪定义………………………………………………………………………………………..14
15.ECSHOP帮助中心如何限制文章条数……………………………………………………………………………………………………………..14
16.讲一下在lbi库文件中添加广告位的方法…………………………………………………………………………………………………………15
17.在ECSHOP文章详情页的标题上加个链接………………………………………………………………………………………………………15
18.Ecshop商品列表页末尾出现空商品的解决办法………………………………………………………………………………………………15
19.如何在ECSHOP类别页调用当前类别名称………………………………………………………………………………………………………15
20.ECSHOP模板代码不能使用is div by的解决办法……………………………………………………………………………………………..16
21.在ecshop商品详情页显示供货商…………………………………………………………………………………………………………………….16
22.让销售排行里10个商品都显示小图片…………………………………………………………………………………………………………..17
23.在ECSHOP首页显示各个商品的品牌名称………………………………………………………………………………………………………17
24.在Ecshop搜索结果页显示商品的市场价格……………………………………………………………………………………………………..18
25.ECSHOP设置,只有登录用户才能查看商品详情………………………………………………………………………………………………18
26.修改Ecshop底部版权的年份信息(2009-2011)………………………………………………………………………………………………….19
27.修改ECSHOP,隐藏帮助中心文章页的评论功能………………………………………………………………………………………………19
28.将默认模板首页的best,hot,new三个水印删除掉………………………………………………………………………………………………19
29.在ECSHOP商品详情页显示收藏数量……………………………………………………………………………………………………………..20
30.如何去掉首页的商店公告………………………………………………………………………………………………………………………………21
31.如何让Ecshop首页商品也显示市场价格…………………………………………………………………………………………………………21
32.在ECSHOP商品详情页显示品牌LOGO………………………………………………………………………………………………………….22
33.ecshop模板修改,如果商品属性价格为0就不显示…………………………………………………………………………………………..22
34.给ECSHOP商城增加一个加入QQ群的快捷按钮……………………………………………………………………………………………..23
35.将ECSHOP整站的“0元”都显示为“价格面议”…………………………………………………………………………………………………23
36.删除RSS文件(feed.php)里的Ecshop版权信息………………………………………………………………………………………………….23
37.Ecshop教程_在首页或列表页显示商品简单描述…………………………………………………………………………………………….24
38.在ECSHOP首页的发货查询里显示省市区地址信息………………………………………………………………………………………..25
39.ECSHOP系统_如何让商品在新窗口打开………………………………………………………………………………………………………..26
40.如何在ECSHOP里获得未格式化的商品价格…………………………………………………………………………………………………..27
41.在ECSHOP主导航栏下面显示热门搜索………………………………………………………………………………………………………….27
42.如何修改ECSHOP顶部的“欢迎光临本店”字样……………………………………………………………………………………………….28
43.如何在ECSHOP商品详情页显示同类别下的推荐商品…………………………………………………………………………………….28
44.ECSHOP商品页_将上一个下一个的ALT改为商品名称…………………………………………………………………………………..30
45.如何去掉ECSHOP用户中心的“您还没有通过邮件认证点此发送认证邮件”…………………………………………………..31
46.ECSHOP邮件模板在哪里修改以及如何修改?……………………………………………………………………………………………….32
47.在后台订单信息页或打印页显示商品缩略图(ecshop 2.7.2 适用)…………………………………………………………………..32
48.删除购买记录_ECSHOP商品页模板修改………………………………………………………………………………………………………..33
49.如何隐藏或删除ECSHOP留言板里的日期和时间……………………………………………………………………………………………33
50.ECSHOP用户注册页面“密码提示问题”的问题项目在哪修改?………………………………………………………………………33
51.Ecshop模板制作_让首页“站内快讯”垂直滚动显示(无缝滚动)…………………………………………………………………….34
52.如何去除Ecshop的底部版权(Powered by ECShop)………………………………………………………………………………………35
53.ECSHOP模板&开发_在商品详情页显示累计销售量……………………………………………………………………………………….37
54.在ecshop商品列表页显示商品库存的解决办法……………………………………………………………………………………………….38
55.在ECSHOP首页今日特价(促销商品)增加倒计时效果…………………………………………………………………………………39
56.关于缩略图,商品图片,相册图片模糊;加水印图片变模糊的解决办法……………………………………………………….41
57.首页“发货查询”中加入收货人、收货地址、发货时间、配送方式…………………………………………………………………..45
58.给ECSHOP增加物流跟踪或包裹跟踪功能………………………………………………………………………………………………………46
59.ecshop 自定义URL静态路径地址…………………………………………………………………………………………………………………..49
60.去掉购物流程的电子邮件必填和电话、手机选填一个……………………………………………………………………………………49
61.Ecshop 订单统计 [订单精准统计]…………………………………………………………………………………………………………………51
62.验证邮件送积分…………………………………………………………………………………………………………………………………………….53
63.订单打印页显示商品缩略图和序号………………………………………………………………………………………………………………..54
64.订单商品详情导出EXCEL……………………………………………………………………………………………………………………………..55
65.在后台订单详情页显示商品总数的方法…………………………………………………………………………………………………………56
66.新建商品首页频道方法。………………………………………………………………………………………………………………………………58
67.过滤模板里的php代码,防止模板被挂马。……………………………………………………………………………………………………59
68.如何在ecshop中实现手机发短信的形式发帖…………………………………………………………………………………………………..60

. ECSHOP商品比较,如何限制每次比较的数量
ECSHOP的商品比较功能,貌似没有限制被比较商品的数量,用户可以无限制的添加很多个商品进行比较。这样也好也不好。有没有方法来限制一下每次比较的数量,比如让用户每次只能比较5个商品,这个要如何解决呢?? 下面提供一种修改方法: - 本方法只需修改 /js/compare.js 文件即可- 打开 /js/compare.js 文件- 找到如下:
if (this.data[goodsId])
- 在它上边增加如下图阴影部分所示的代码。详情参看下图:
2. 将ECSHOP购买记录的用户名的后几位字符用*代替
其实这个ECSHOP问题很简单就可以解决,只需加一行代码就OK了。首先提供一个演示地址: http://demo1.ecshop120.com/goods.php?id=20 本演示效果,只保留了用户名的前2个字符,后面的都用 *
*** 隐藏掉了。你可以根据教程,灵活修改,可以保留前1个字符,前3个字符…等等- 打开 /includes/lib_insert.php 文件- 找到如下代码:
$bought_notes[$key]['add_time'] = local_date("Y-m-d G:i:s", $val['add_time']);
- 在它下边增加一行代码如下图所示:

. ECSHOP商品页,加入购物车弹出浮动层,仿淘宝效果
在ECSHOP商品详情页点“加入购物车”,直接在当前页弹出一个漂亮的小窗口, 效果如下图: 此方法超级简单,不需要修改php程序,也不需要在ECSHOP模板页预设隐藏层,主要是修改 JS 文件演示地址:http://demo1.ecshop120.com/goods.php?id=34 1) 首先将下面四个图片下载到你网站的 /data/images/ 下面,注意,保存图片的时候不要重命名,要用我原来的名字直接保存2)

以下修改以官方默认模板为例,打开 ECSHOP模板文件 /themes/default/goods.dwt ,将<li class="padd"> <a href="javascript:addToCart({$goods.goods_id})"><img src="images/bnt_cat.gif" /></a> 修改为 <li class="padd" style="position:relative;" id="gwc"> <a href="javascript:addToCart({$goods.goods_id})"><img src="images/bnt_cat.gif" /></a> 3) 下面修改ECSHOP语言包文件,打开 /languages/zh_cn/common.php ,找到$_LANG['cart_info'] 将它的值修改为
购物车共 %d 件商品,总计 %s
修改后是这个样子
$_LANG['cart_info'] = '购物车共 %d 件商品,总计 %s';
4) 打开 /js/common.js ,找到下图所示代码并修改为

) 继续修改 /js/common.js 文件, 在文件的最末尾增加如下两段代码
/* * * 点击购物后弹出提示层* 参数 cartinfo:购物车信息*/ function openDiv_ecshop120(cartinfo) { var _id = "speDiv"; var m = "mask"; if (docEle(_id)) document.removeChild(docEle(_id)); if (docEle(m)) document.removeChild(docEle(m)); //计算上卷元素值 var scrollPos; if (typeof window.pageYOffset != 'undefined') { scrollPos = window.pageYOffset; 7

} else if (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') { scrollPos = document.documentElement.scrollTop; } else if (typeof document.body != 'undefined') { scrollPos = document.body.scrollTop; }
var i = 0; var sel_obj = document.getElementsByTagName('select'); while (sel_obj[i]) { sel_obj[i].style.visibility = "hidden"; i++; }
// 新激活图层 var newDiv = document.createElement("div"); newDiv.id = _id; newDiv.style.position = "absolute"; newDiv.style.zIndex = "10000"; newDiv.style.width = "289px"; newDiv.style.height = "120px"; newDiv.style.top = "-120px"; newDiv.style.left = "1px"; newDiv.style.overflow = "hidden"; newDiv.style.background = "#FFF"; newDiv.style.border = "0px solid #59B0FF"; newDiv.style.padding = "0px";
//生成层内内容 newDiv.innerHTML = '<div style="text-align:center;height:120px;line-height:25px;width:289px;background:url(/data/images/div_bg.gif) no-repeat 0 0;overflow:hidden;"><table width="280px" cellpading=0 cellspacing=0 align=center ><th style="height:30px;line-height:30px;text-align:right;"><a href="javascript:cancel_div_ecshop120()" ><img src="/data/images/div_close.gif" style="margin:5px 10px;"></a></th><tr><td align=center ><img src="/data/images/div_hs.gif" align=absmiddle> <font style="font-size:15px;font-weight:bold;">该商品已成功放入购物车</font>< br>'+cartinfo +'<br><a href="javascript:cancel_div_ecshop120()">«继续购物</a> <a href="flow.php"> <img src="/data/images/div_gwc.gif" align=absmiddle></a></td></tr>'; newDiv.innerHTML += '<tr><td align=center></td></tr></table></div>'; document.getElementById('gwc').appendChild(newDiv); }

.在ECSHOP会员中心显示冻结资金
在ecshop会员中心欢迎页模板中,显示了余额、红包、积分,唯独就是没有显示冻结资金。今天咱们修改下ECSHOP的程序和模板, 让这个冻结资金也显示出来。首先打开程序文件 /includes/lib_clips.php 找到 get_user_default 函数部分,将
$sql = "SELECT pay_points, user_money, credit_line, last_login, is_validated FROM " .$GLOBALS['ecs']->table('users'). " WHERE user_id = '$user_id'";
修改为
$sql = "SELECT pay_points,frozen_money, user_money, credit_line, last_login, is_validated FROM " .$GLOBALS['ecs']->table('users'). " WHERE user_id = '$user_id'";
继续向下,找到
$info['surplus'] = price_format($row['user_money'], false);
在它下边增加一行代码
$info['frozen_money'] = price_format($row['frozen_money'], false);
继续打开ECSHOP模板文件 /themes/default/user_clips.dwt 找到{$lang.your_integral}:{$info.integral}<br /> 在它下边增加一行代码冻结资金:{$info.frozen_money}<br /> OK,大功告成了。
5.ECSHOP商品页购买记录的每页条数如何修改
ECSHOP商品详情页的购买记录,默认显示5条销售记录,就开始翻页,我想改成显示10条记录后再翻页,要如何修改呢?? 下面来说一下教程 1) 首先来修改 includes/lib_insert.php 文件里的 insert_bought_notes($arr) 函数部分,找到 ' ORDER BY oi.add_time DESC LIMIT 5' 和

$pager['size'] = $size = 5; 将那个 5 都改成 10 2) 接着打开 /goods.php 文件,执行下面图片描述中的操作
6.ECSHOP信息提示页面的跳转时间设置
ECSHOP商城的很多操作,都会出来一个信息提示页面,告知用户的操作结果,以及请用户选择下一步要去的页面,如果用户不选择,系统将自动跳转到一个页面,那么这个跳转时间在哪控制呢?? 例如,用户登录成功后,会跳出一个信息提示页面,提示您已经登录成功,如果您没选择区哪个页面,隔一段时间它将自动跳转到一个页面。很多人认为这个时间是在程序文件里设置的,其实不是的。 下面说一下方法 打开文件 /themes/default/message.dwt 找到下面代码那个数字 3 就是跳转时间,将它改成别的数字,就OK了。
7.在ECSHOP其他页面调用首页的FLASH主广告
问题:

我想在ECSHOP商品分类页模板里面调用首页的FLASH主广告,应该怎么做呢?? 答案: 首先修改 /category.php 文件,找到
$smarty->assign('script_name', 'category');
在它下面增加代码
$smarty->assign('flash_theme',$_CFG['flash_theme']); // Flash轮播图片模板 /* 首页主广告设置 */ $smarty->assign('index_ad',$_CFG['index_ad']); if ($_CFG['index_ad'] == 'cus') { $sql = 'SELECT ad_type, content, url FROM ' . $ecs->table("ad_custom") . ' WHERE ad_status = 1'; $ad = $db->getRow($sql, true); $smarty->assign('ad', $ad); }
然后 再修改 模板文件 /themes/default/category.dwt (这里以官方默认模板为例) 在你想显示 FLASH主广告的地方加入下面代码
<!— #BeginLibraryItem "/library/index_ad.lbi" ><! #EndLibraryItem —>
8.ECSHOP在打印订单时怎么才能打印出商品序号?
ECSHOP后台,在打印订单时怎么才能打印出商品序号呢? 注意这里说的序号,不是商品货号,是指 1、2、3、4。。。。等序列号。形如下面这样的 序号 商品名称 数量1 诺基亚手机 1 2 htc手机 1 下面以官方默认模板为例进行讲解。 打开 /data/order_print.html 文件,在<tr align="center">
后边增加

<td bgcolor="#cccccc">序号</td> 继续向下,将<!— {foreach from=$goods_list item=goods key=key} > 修改为 <! {foreach from=$goods_list name="goods_list" item=goods key=key} > 继续向下,找到<td>&nbsp;{$goods.goods_name}<! 商品名称 —> 在它上边增加一行代码<td>&nbsp;{$smarty.foreach.goods_list.iteration}</td> 这样就OK了,赶快刷新看一下吧。是不是比以前好看点了。9.如何让ECSHOP商品名称出现多种颜色
大家都见过京东的商品页吧,就是那样的。商品名称中包含两种或多种颜色, 形如:
周生生 足金通花手镯 6# 42.17克买周生生珠宝,赢钻石大奖!截止到6.19日0点!
我下面要讲的方法很简单,首先进入ECSHOP后台,选择某个商品, 进入商品编辑页面。 在商品名称输入框里这么输入:
摩托罗拉<font color=#ffcc00>A810</font>
然后,还需要修改下模板页面 themes/default/goods.dwt 文件,将{$page_title} 修改为 {$page_title|strip_tags} 就可以了,是不是很简单呀
10.如何修改ECSHOP前后台的验证码背景
ECSHOP前后台的某些地方都大有验证码功能,

也许有人会觉得自己的ECSHOP商城验证码背景样式跟别人的都千篇一律,实在是不爽, 那么能不能让自己商城的验证码背景更具个性化呢?? 也就是说该如何修改ECSHOP前后台的验证码背景呢?? 我们可以打开 /data/captcha 目录。看到了吧,背景图都在这呢,用我们自己设计的背景图替换掉这个目录里的几个图片文件就可以了。
11.如何去掉Ecshop搜索页Title里的“商品搜索”四个字
今日在论坛里看到有人在问:Ecshop搜索页Title里的“商品搜索”四个字,如何才能去掉呢?? 这个其实很简单的,修改 search.php 文件,将$position = assign_ur_here(0, $ur_here . ($_REQUEST['keywords'] ? '_' . $_REQUEST['keywords'] : '')); 修改为 $position = assign_ur_here(0, $_REQUEST['keywords'] ? $_REQUEST['keywords'] : ''); 这样就可以了。
12.将Ecshop后台商品分类页改造成点击展开子分类
ECSHOP后台商品分类默认是全部展开的。对于类别很少的网站来说,没有什么问题。但是如果你的网站类别很多,成百上千个的话,这样显示可能就会查看起来不太方便。官方论坛上有人建议, 将后台商品分类页改造为默认只显示一级分类,点击一级分类前面的 + 号,再展开下级子分类。下面 我就来讲一种修改方法: 首先修改 admin/templates/category_list.htm 文件,在id="{$cat.level}_{$cat.cat_id}" 后边增加 {if $cat.level gt 0}style="display:none;"{/if} 然后将 <img src="images/menu_minus.gif" 修改为 <img src="images/menu_plus.gif" 13

就可以了。
13.将“您最近30天内提交了4个订单”链接到订单列表页
以官方默认模板为例,打开 /themes/default/user_clicps.dwt 文件,将{$lang.last_month_order}{$info.order_count}{$lang.order_unit} 修改为 <a href="user.php?act=order_list">{$lang.last_month_order}{$info.order_count}{$lang.order_unit}</a> 就可以了。
14.ECSHOP后台订单列表的商品缩略图尺寸在哪定义
这里所说的“后台订单列表的商品缩略图”是指鼠标滑过订单号时弹出的那个浮动层里的商品缩略图。下面是修改方法 打开 /admin/templates/order_goods_info.htm 文件,将
<img src="{$goods.goods_thumb}" />
修改为
<img src="{$goods.goods_thumb}" width="100" height="100" />
width 和 height 就是缩略图的宽和高了,可以任意修改成你想要的数字
15.ECSHOP帮助中心如何限制文章条数
有的站长的帮助中心的文章可能会很多,都显示在帮助中心里, 感觉会很乱。这里教你一个“在ECSHOP帮助中心限制文章显示条数”的方法,例如只显示每个小类的前5篇文章。为了照顾大多数站长,本教程倾向于在模板里修改实现。以官方默认模板为例,打开 /themes/default/library/help.lbi 文件,将
<!— {foreach from=$help_cat.article item=item} > <dd><a href="{$item.url}" title="{$item.title|escape:html}">{$item.short_title}</a></dd> <! {/foreach} >
修改为
<!
{foreach from=$help_cat.article name="help_list" item=item} —> {if $smarty.foreach.help_list.iteration lt 6}

<dd><a href="{$item.url}" title="{$item.title|escape:html}">{$item.short_title}</a></dd> {/if} <!— {/foreach} —>
16.讲一下在lbi库文件中添加广告位的方法
一般的广告位是写在dwt文件里的。也有人希望能直接写在lbi文件里。那么我们可以这样做,先在后台发布好广告位和广告,记住这个广告位的ID,这里暂时假设该ID为2,然后修改 lbi 文件,在想显示广告位的地方加入下面代码即可。{insert name='ads' id=2 num=1}
17.在ECSHOP文章详情页的标题上加个链接
怎么给文章内容页面的 标题 加上这篇文章的 URL连接。这样有利于SEO 首先修改 article.php 文件,找到
$row['comment_rank'] = ceil($row['comment_rank']);
在它下面增加一行代码
$row['thisurl']=build_uri('article', array('aid'=>$article_id), $row['title']);
然后再修改模板文件 themes/default/article.dwt,将
{$article.title|escape:html}
修改为
<a href="{$article.thisurl}">{$article.title|escape:html}</a>
18.Ecshop商品列表页末尾出现空商品的解决办法
最近我发现我制作的两个模版,仿Dhgate模版和仿Overstock的模版在列表页的最后一个商品的位置上经常会多出一个空商品,在换成默认模版以后空商品消失。我在列表页模版的商品图片和商品属性部分用
<!– {if $goods.goods_id} –> 商品图片 商品属性
<!– {/if} –>
代码框起来,问题解决。
19.如何在ECSHOP类别页调用当前类别名称
问题:如何在商品列表页(类别页)显示当前类别名称呢? 作用:看上去很专业,而且自我感觉能增进SEO,例如将ECSHOP默认官方模板商品列表页的“商品列表”四个字改为当前类别名称,应该能增进SEO 答案:如下首先修改程序文件 /category.php ,在$smarty->assign('cat_style', htmlspecialchars($cat['style']));

后边增加$smarty->assign('cat_name_cur', $cat['cat_name']); 然后就可以在模板文件 /themes/default/category.dwt 里调用了。调用代码为 {$cat_name_cur}
20.ECSHOP模板代码不能使用is div by的解决办法
很多制作模板的朋友可能已经发现了在ECSHOP模板代码中使用{if $vars is div by 4} … {/if} 来判断$vars 是否能被4整除的时候,系统会报错。原因是ECSHOP的 SMARTY 是经过 ECSHOP官方二次修改过的,不是原原本本的SMARTY。这种情况,我们可以用另一种代码来解决,那就是 mod , MOD:是取余数的意思例如:
<!{foreach from=$hot_goods item=goods name=hot_goods}> …………… {if $smarty.foreach.hot_goods.iteration mod 4 eq 0} <br /> {/if} …………… <!{/foreach}>
21.在ecshop商品详情页显示供货商
注:以下修改适用于ecshop2.7.2,其他版本未做测试。1) 首先需要修改程序文件,将供货商读取出来,然后赋值给模板 打开文件 /goos.php,在
$smarty->assign('goods', $goods);
上边增加以下代码
if($goods['suppliers_id']) { $goods['suppliers_name']=$db->getOne("select suppliers_name from ".$ecs->table('suppliers')." where suppliers_id=".$goods['suppliers_id']); }

) 然后修改模板文件,将供货商显示出来,下面以ECSHOP官方默认模板为例进行讲解打开 /themes/default/goods.dwt 文件,在你想显示供货商的地方加入下面代码
<!{if $goods.suppliers_name } 供货商(www.xilinjie.com )> <li class="padd" > <strong>供货商:</strong><font class="shop">{$goods.suppliers_name}</font> </li> <!{/if}>
22.让销售排行里10个商品都显示小图片
ecshop的销售排行部分,默认模板是只有前3个商品带小图片显示,如何实现让10个商品都显示小图片呢,下面请看教程: 其实修改起来挺简单的,高手可以飘过的说,打开 /themes/default/library/top10.lbi 文件搜索下面代码
{if $smarty.foreach.top_goods.iteration<4}
一共能搜索到两处,每一处都修改为
{if $smarty.foreach.top_goods.iteration<11}
以上修改是以官方默认模板 2.7.2 为基准的,其他模板的修改方法原理相同,请参照修改之。
23.在ECSHOP首页显示各个商品的品牌名称
为了讲解方便,为了照顾大多数人,本例教程以 2.7.2官方默认模板为准。其实这个品牌字段在程序里已经取出来了,只是在模板中没有调用而已。所以只要在模板中把那个品牌标签加上就可以了。1)、打开 /themes/default/library/recommend_best.lbi ,找到
<font class="f1">
在它上边增加一行
{if $goods.brand_name}<p>品牌:{$goods.brand_name}</p>{/if}
2)、打开 /themes/default/library/recommend_new.lbi ,修改方法同上3)、打开 /themes/default/library/recommend_hot.lbi ,修改方法也同上4)、打开 /themes/default/library/recommend_promotion.lbi ,找到
{$lang.promote_price}<font class="f1">{$goods.promote_price}</font>
在它上边添加一行代码
{if $goods.brand_name}<p>品牌:{$goods.brand_name}</p>{/if}

刷新看看,是不是多了一个品牌,如果刷新没有变化,请到后台清除缓存先。
24.在Ecshop搜索结果页显示商品的市场价格
注:此方法同样适用于【如何在精品推荐、热卖商品、新品上市的“更多”页面里显示市场价格】下面以官方默认模板(2.7.2)为例进行讲解. 第一步,打开 /themes/default/search.dwt ,找到(注意有两处)
<!— {if $show_marketprice} > {$lang.market_price}<font class="market">{$goods.market_price}</font><br /> <! {/if} >
将它修改为
{$lang.market_price}<font class="market">{$goods.market_price}</font><br />
继续找到(只有一处)
<!
{if $show_marketprice} > {$lang.market_prices}<font class="market_s">{$goods.market_price}</font><br /> <! {/if} >
同样将它修改为
{$lang.market_prices}<font class="market_s">{$goods.market_price}</font><br />
感觉这个 $show_marketprice 根本没起作用,在对应的程序文件里也没找到赋值的地方。个人认为是官方2.7.2默认模板的一个小BUG。
25.ECSHOP设置,只有登录用户才能查看商品详情
这个需要在商品详情页模板文件里加判断代码。以默认模板为例,打开 /themes/default/goods.dwt ,在<!
当前位置 end> 后边添加{if $smarty.session.user_id gt 0} 继续,在<!友情链接 end—> 下添加{else} <div class="block">您未登录,只有登录用户才有权查看!</div> {/if} 这样修改以后,就可以实现只有登录用户才能查看商品详情,未登录用户无法查看商品详情。

.修改Ecshop底部版权的年份信息(2009-2011)
本教程所说的年份信息,指的是页脚“版权所有”前面的年份,如下面红色部分所示© 2009-2011 ECSHOP 版权所有,并保留所有权利。后面的“2011” 能随着服务器的年份而改变,但是前面的2009却始终不变。 比如:我的网站是2009年上线的, 我希望改成2009-2011, 应该怎么改呢?? 打开 /languages/zh_cn/common.php 文件,找到$_LANG['copyright'] = "&copy; 2009-%s %s 版权所有,并保留所有权利。"; 将2009修改成2011即可
27.修改ECSHOP,隐藏帮助中心文章页的评论功能
个人认为帮助中心分类下的文章没有必要给它加个评论功能,下面我们来去掉它 第一步: 首先我们打开 /article.php 文件,找到$smarty->assign('comment_type', 1); 在它下面增加一行代码$smarty->assign('topcatid',array_pop($catlist)); 第二步: 然后我们来修改 /themes/default/library/comments.lbi,找到
{insert_scripts files='transport.js,utils.js'} <div id="ECS_COMMENT"> {* ECSHOP 提醒您:动态载入comments_list.lbi,显示评论列表和评论表单 *}{insert name='comments' type=$type id=$id}</div>
将它修改为
{if $topcatid neq 1} {insert_scripts files='transport.js,utils.js'} <div id="ECS_COMMENT"> {* ECSHOP 提醒您:动态载入comments_list.lbi,显示评论列表和评论表单 *}{insert name='comments' type=$type id=$id}</div> {/if}
这样就可以了,去重新刷新一下帮助中心的文章页,看是不是没有评论框了。
28.将默认模板首页的best,hot,new三个水印删除掉
注意:此教程只对ECSHOP默认模板有效,其他模板也许根本就没这几个水印

)、打开 /themes/default/library/recommend_best.lbi 文件将 <span class="best"></span> 删除即可2)、打开 /themes/default/library/recommend_hot.lbi 文件将 <span class="hot"></span> 删除即可3)、打开 /themes/default/library/recommend_new.lbi 文件将 <span class="new"></span> 删除即可
29.在ECSHOP商品详情页显示收藏数量
众所周知,最新版的商品详情页, 已经能够显示购买数量、评论数量了, 但是唯独没有显示收藏数量,也就是淘宝上的收藏人气,下面我们就把它显示出来。 1)、首先打开 /includes/lib_insert.php 文件在文件末尾增加下面代码
/** * 调用某商品的累积收藏 */ function insert_goods_collect($arr) { $sql='select count(user_id) as ids '.'from '. $GLOBALS['ecs']->table('collect_goods')."as co "."where co.goods_id=".$arr['goods_id']; $row=$GLOBALS['db']->GetRow($sql); if($row) { $ids = intval($row['ids']); } else { $ids = 0; } return $ids; }
2)、接着打开模板文件 /themes/default/goods.dwt ,这里以官方默认模板(2.7.2版)为例在
<strong>{$lang.goods_rank}</strong>
上边添加
<strong>收藏人气:</strong>{insert name='goods_collect' goods_id=$id}人<br>

.如何去掉首页的商店公告
不同的模板,具体的修改细节是不一样的, 1)、如果你使用的是官方默认模板,请看下面打开 /themes/default/index.dwt 文件,将下面代码部分删除即可
<!站内公告 start> <div class="box"> <div class="box_1"> <h3><span>{$lang.shop_notice}</span></h3> <div class="boxCenterList RelaArticle"> {$shop_notice} </div> </div> </div> <div class="blank5"></div> <!站内公告 end>
2)、如果你使用的是其他模板,打开 /themes/你的模板文件夹/index.dwt ,搜索{$shop_notice} 注意,搜索到该字符串以后,要观察它周围(前后都算)的一些DIV 标签,把对应的DIV部分都删掉就可以了。如果你能看懂HTML代码,那应该很容易的。
31.如何让Ecshop首页商品也显示市场价格
首先要说明的一点是,也许你下载或购买的模板已经实现了“首页商品显示市场价格”,那么请不要诧异,此教程是针对没有实现此功能的模板而言的,例如官方默认模板。1)、首先我们需要打开 /themes/default/library/recommend_best.lbi 文件,找到<font class="f1"> 在它上边增加一行代码 {$lang.market_price}<font class="market">{$goods.market_price}</font><br /> 2)、接着打开 library/recommend_hot.lbi 和 library/recommend_best.lbi ,修改方法和上面第一步中的recommend_best.lbi 相同。

然后刷新一下首页(不用清除缓存),应该就看到市场价格了。
32.在ECSHOP商品详情页显示品牌LOGO
问: ecshop商品详细页面的商品品牌默认是以文字形式显示的,能否改成以LOGO形式显示。答: 当然可以,下面看教程。注:本教程以 ECSHOP2.7.2 + 官方默认模板为例。 1)、首先需要修改 /includes/lib_goods.php ,用EditPlus或Dreamweaver打开该文件,找到
$sql = 'SELECT g.*, c.measure_unit, b.brand_id, b.brand_name AS goods_brand, m.type_money AS bonus_money, ' .
修改为
$sql = 'SELECT g.*, c.measure_unit, b.brand_id,b.brand_logo, b.brand_name AS goods_brand, m.type_money AS bonus_money, ' .
2)、接着修改 /themes/default/goods.dwt,将{$goods.goods_brand} 修改为{if $goods.brand_logo}<img src=/data/brandlogo/{$goods.brand_logo}>{else}{$goods.goods_brand}{/if}
33.ecshop模板修改,如果商品属性价格为0就不显示
默认的情况是,当商品属性价格为0时,后面会显示 [ ¥0.00元] ,就像下面这样。白色 [ ¥0.00元] 咖啡色 [ 加¥5.00元] 总觉的那个0.00元有点多余,用户体验不是很好。能不能改成“当属性价格为0时就不显示”,就像下面一样。白色 咖啡色 [ 加¥5.00元] 下面是修改方法:(以官方默认模板为例) 打开 /themes/default/goods.dwt 页,搜索
[{if $value.price gt 0}{$lang.plus}{elseif $value.price lt 0}{$lang.minus}{/if} {$value.format_price|abs}]
总共能找到两处,每一处都替换为: {if $value.price gt 0}[{$lang.plus}{$value.format_price|abs}]{elseif $value.price lt 0}[{$lang.minus}{$value.format_price|abs}]{/if}

是不是挺简单的。刷新一下,看看是不是已经变了。
34.给ECSHOP商城增加一个加入QQ群的快捷按钮
大家都知道,普通的加QQ群方法,一般是先到QQ中查找群 > 输入群号码 —> 发验证信息,等待群主或管理员通过,步骤比较繁琐。现在简单了,我们可以直接在网页上放一个按钮,用户点击该按钮,便可以直接加入该QQ群,省略了一些繁杂的步骤。用户体验更友好一些。 以下教程讲解怎么给ECSHOP商城系统也加上如此功能。以官方默认模板为例。打开 \themes\default\library\page_footer.lbi,找到
<!
QQ 号码 {foreach from=$qq item=im} >
在它上边增加
本站的官方QQ群:123456<a target="_blank" href="http://qun.qq.com/#jointhegroup/gid/123456"><img border="0" src="http://cgi.qun.qq.com/gscgi/s1/gp.do?gid=123456" alt="点击这里加入此群" title="点击这里加入此群"></a>
注意:将123456 修改成你的群号
35.将ECSHOP整站的“0元”都显示为“价格面议”
需要修改的文件:includes/lib_common.php 修改教程如下: 打开 includes/lib_common.php,将
return sprintf($GLOBALS['_CFG']['currency_format'], $price);
替换为
if (intval($price) == 0) { return "价格面议";} else { return sprintf($GLOBALS['_CFG']['currency_format'], $price); }
36.删除RSS文件(feed.php)里的Ecshop版权信息
RSS 文件 (feed.php 或 feed.xml) 里面也包含一些ECSHOP官方预留的版权信息, 主要有下面几处: <!
RSS generated by ECSHOP (http://www.ecshop.com) [2010-09-28 15:25:47] —> 或

<generator>http://www.ecshop.com</generator> 今天有网友问我怎么去掉这些? 下面我就把删除这些版权信息的教程公布在这里: 打开 /includes/cls_rss.php 文件,找到
'<!— RSS generated by ECSHOP (http://www.ecshop.com) [' . date('Y-m-d H:i:s') .'] —>' . "\n" .
把它删除 (注意:别删多了) 继续搜索找到
$this->output .= (string) '<generator>' . $this->creator . '</generator>' . "\n";
同样也删除,然后刷新一个 FEED.PHP ,看是不是没有了
37.Ecshop教程_在首页或列表页显示商品简单描述
熟悉ECSHOP的朋友都知道,在后台商品编辑的地方有一个录入“商品简单描述”的框框,但是录入的“商品简单描述”没有很好的在前台显示出来,而只是在商品详细页的 description 里,供搜索引擎读取。有用户问了, 我想在其他页面(例如首页或者列表页)把这个“商品简单描述”显示出来,该怎么办呢? 下面说一下修改教程(以 2.7.2版官方默认模板为例 ): 1、在ECSHOP首页显示商品简单描述: 依次打开/themes/default/library/recommend_hot.lbi ,/themes/default/library/recommend_new.lbi ,/themes/default/library/recommend_best.lbi 文件,对每个文件都执行如下操作: 找到
<font class="f1">
在它上面增加一行
<p>{$goods.brief}</p>
再打开 /themes/default/library/recommend_promotion.lbi 文件,找到
{$lang.promote_price}<font class="f1">{$goods.promote_price}</font>
在它上边增加一行
<p>{$goods.brief}</p>
2、在ECSHOP列表页显示商品简单描述: 关于列表页,显示模式为 “list” 和 “text” 的时候,已经有 “商品简单描述” 的显示了。只是在显示模式为 “grid” 的

时候没有显示罢了,下面给 “grid” 模式也增加一下: 打开 /themes/default/library/goods_list.lbi 文件,找到
<p><a href="{$goods.url}" title="{$goods.name|escape:html}">{$goods.goods_name}</a></p>
在它下面增加
<!— {if $goods.goods_brief} > {$goods.goods_brief}<br /> <! {/if} —>
38.在ECSHOP首页的发货查询里显示省市区地址信息
问题描述: 默认的ECSHOP系统,首页发货查询只显示订单号和发货单号,如何将送货地址中的“省份+城市+区县” 都显示出来呢? 下面是在ECSHOP 2.7.2 官方默认模板基础上的修改教程: 1、修改 index.php 文件,将
$sql = 'SELECT o.order_sn, o.invoice_no, s.shipping_code FROM ' . $GLOBALS['ecs']->table('order_info') . ' AS o' .
修改为
$sql = 'SELECT o.province,o.city,o.district,o.order_sn, o.invoice_no, s.shipping_code FROM ' . $GLOBALS['ecs']->table('order_info') . ' AS o' .
2、继续修改index.php 文件,找到
$all[$key]['invoice_no'] = $shipping->query((string)$row['invoice_no']);
在它下面增加几行代码
$all[$key]['province']=$GLOBALS['db']->getOne("select region_name from ".$GLOBALS['ecs']->table('region')." where region_id=".$row['province']); $all[$key]['city']=$GLOBALS['db']->getOne("select region_name from ".$GLOBALS['ecs']->table('region')." where region_id=".$row['city']); $all[$key]['district']=$GLOBALS['db']->getOne("select region_name from ".$GLOBALS['ecs']->table('region')." where region_id=".$row['district']);
3、修改 /themes/default/library/invoice_query.lbi 文件,找到
{$lang.order_number} {$invoice.order_sn}<br />
在它下面增加一行模板标签代码
{$invoice.province}-{$invoice.city}-{$invoice.district}<br />

到后台清除缓存后,刷新首页。
39.ECSHOP系统_如何让商品在新窗口打开
虽然这个是很简单的问题,但是看到ECSHOP官方论坛上问的人还是不少,对新手朋友(尤其是不懂HTML的)来说还是有必要共享一下的。高手朋友可以飘过的说。 这个主要是修改模板文件,下面教程以官方默认模板为例,其他模板同理。 1、首页今日特价打开 themes/default/library/recommend_promotion.lbi 文件,找到
<a href="{$goods.url}"><img src="{$goods.thumb}" border="0" alt="{$goods.name|escape:html}"/></a><br />
修改为
<a href="{$goods.url}" target="_blank" /><img src="{$goods.thumb}" border="0" alt="{$goods.name|escape:html}"/></a><br />
找到
<p><a href="{$goods.url}" title="{$goods.name|escape:html}">{$goods.short_name|escape:html}</a></p>
修改为
<p><a href="{$goods.url}" title="{$goods.name|escape:html}" target="_blank" />{$goods.short_name|escape:html}</a></p>
2、首页精品推荐、新品上市、热卖商品打开 themes/default/library/ 目录下的 recommend_best.lbi ,recommend_new.lbi 和 recommend_hot.lbi 三个文件,对每个文件都执行下面操作,找到
<a href="{$goods.url}"><img src="{$goods.thumb}" alt="{$goods.name|escape:html}" class="goodsimg" /></a><br />
修改为
<a href="{$goods.url}" target="_blank" /><img src="{$goods.thumb}" alt="{$goods.name|escape:html}" class="goodsimg" /></a><br />
继续找到
<p><a href="{$goods.url}" title="{$goods.name|escape:html}">{$goods.short_style_name}</a></p>
将它修改为
<p><a href="{$goods.url}" title="{$goods.name|escape:html}" target="_blank" />{$goods.short_style_name}</a></p>
3、商品列表打开 themes/default/library/goods_list.lbi 文件,搜索
href="{$goods.url}"

一共能搜索到好几处,将每一个href="{$goods.url}" 都修改为
href="{$goods.url}" target="_blank"
注意: target="_blank"后面有一个空格
40.如何在ECSHOP里获得未格式化的商品价格
ECSHOP模板里输出的各种价格信息,都是经过系统格式化以后的形式,如:¥2298元。一些个别店长有时候想得到“格式化之前的价格”,也就是纯数字形式的价格。注意: 下面教程只是针对“某个页面的某类价格”,如商品详情页的市场价格和本店价格。其他页面其他价格的读取方法原理大致都相同,读者可举一反三。 适用版本:2.7.2 官方默认版本1)、打开 /includes/lib_goods.php 文件,找到
$row['market_price'] = price_format($row['market_price']);
在它上边增加下面这段代码
$row['market_price_ori'] = $row['market_price']; //市场价格_纯数字 $row['shop_price_ori'] = $row['shop_price']; //本店价格_纯数字
2)然后就可以在商品详情页模板调用纯数字形式的价格信息了调用方法如下: {$goods.market_price_ori} {$goods.shop_price_ori}
41.在ECSHOP主导航栏下面显示热门搜索
如果你使用的是官方默认模板,只需进行第1步操作即可,如果您使用的是其他ECSHOP模板,则可能还需要进行第2步操作。第1步: 进入 后台 》系统设置》商店设置》显示设置,找到“首页搜索的关键字: ”,在后面的输入框里输入一些关键词,以半角逗号间隔,例如:“电脑,笔记本,THINKPAD笔记本,DELL笔记本”,点击“确定”,并清除缓存。如果执行完第1步,还没看到热门搜索关键词,那么请继续看第2步。第2步: 如果您使用的是第三方模板或者是自己制作的模板,那么你的模板文件有可能根本就没调用热门搜索关键词,那么还需要修改你的模板文件,一般是头部文件。在你想要显示热门关键词的地方加入下面代码

{if $searchkeywords} {$lang.hot_search} : {foreach from=$searchkeywords item=val} <a href="search.php?keywords={$val|escape:url}">{$val}</a> {/foreach} {/if}
然后再到后台清除缓存
42.如何修改ECSHOP顶部的“欢迎光临本店”字样
问题描述:我想把ECSHOP页面顶部的“欢迎光临本店”几个字删掉或者修改成别的文字,请问如何修改? 修改教程:两种修改方法,任选其一即可 方法1:直接修改ECSHOP语言包文件打开 \languages\zh_cn\common.php 文件,搜索
$_LANG['welcome'] = '欢迎光临本店';
将 “欢迎光临本店”改成你想要的字眼即可方法2:进入后台修改
进入后台管理,依次进入 模板管理 》语言项编辑,选择【common.php — 公共语言包】。在“输入语言项关键字”后面的框内输入“欢迎光临本店” , 点“搜索”, 然后修改成你想要的文字即可
43.如何在ECSHOP商品详情页显示同类别下的推荐商品
问题描述: 商品列表页顶部有一个“精品推荐”,但是在商品详情页默认是没有的,我想在商品详情页也显示该商品所属类别下的“精品推荐”,该如何修改呢?? 修改方法: 注:以下修改方法是在ECSHOP 2.7.2 版官方默认模板基础上实施的。第一步: 修改 goods.php 程序文件,找到下面这行代码
$smarty->assign('goods_rank',get_goods_rank($goods_id)); // 商品的销售排名

然后再这行代码下面增加两行
$children = get_children($goods['cat_id']); $smarty->assign('best_goods',get_category_recommend_goods('best', $children));
第2步: 修改模板文件 /themes/default/goods.dwt ,找到
<div class="AreaR">
在它下面增加一行代码
<!— #BeginLibraryItem "/library/recommend_best.lbi" ><! #EndLibraryItem —>
这样修改以后(记得到后台清除缓存),就可以在商品页看到“精品推荐”了,但是默认的最多只显示3个,原因是“关于商品详情页的精品推荐数量”在数据表:ecs_template 里没有相应记录,所以就会取默认值 3 ,那么,我们可以通过修改默认值的方法来达到显示5个或者更多个,如果你想显示大于3个,那么继续进行第3步的修改。第3步: 打开 includes/lib_main.php 文件找到下面这行代码
$num = isset($static_page_libs[$template][$lib]) ? $static_page_libs[$template][$lib] : 3;
修改为
$num = isset($static_page_libs[$template][$lib]) ? $static_page_libs[$template][$lib] : 5;
然后,到后台清除缓存,看看是不是显示5个了。当然,前提是该类别下确实存在5个推荐商品。效果图如下:

.ECSHOP商品页_将上一个下一个的ALT改为商品名称
第1步:修改 goods.php 文件,找到下面这段代码
/* 上一个商品下一个商品 */ $prev_gid = $db->getOne("SELECT goods_id FROM " .$ecs->table('goods'). " WHERE cat_id=" . $goods['cat_id'] . " AND goods_id > " . $goods['goods_id'] . " AND is_on_sale = 1 AND is_alone_sale = 1 AND is_delete = 0 LIMIT 1"); if (!empty($prev_gid)) { $prev_good['url'] = build_uri('goods', array('gid' => $prev_gid), $goods['goods_name']); $smarty->assign('prev_good', $prev_good);上一个商品 }
$next_gid = $db->getOne("SELECT max(goods_id) FROM " . $ecs->table('goods') . " WHERE cat_id=".$goods['cat_id']." AND goods_id < ".$goods['goods_id'] . " AND is_on_sale = 1 AND is_alone_sale = 1 AND is_delete = 0"); if (!empty($next_gid)) { $next_good['url'] = build_uri('goods', array('gid' => $next_gid), $goods['goods_name']); $smarty->assign('next_good', $next_good);
下一个商品 } 30

然后将它修改为下面代码(注意红色部分)
/* 上一个商品下一个商品 */ $prev_gid = $db->getRow("SELECT goods_id,goods_nameFROM " .$ecs->table('goods'). " WHERE cat_id=" . $goods['cat_id'] . " AND goods_id > " . $goods['goods_id'] . " AND is_on_sale = 1 AND is_alone_sale = 1 AND is_delete = 0 LIMIT 1"); if (!empty($prev_gid)) { $prev_good['url'] = build_uri('goods', array('gid' => $prev_gid['goods_id']), $goods['goods_name']); $prev_good['goods_name'] =$prev_gid['goods_name']; $smarty->assign('prev_good', $prev_good);上一个商品 }
$next_gid = $db->getRow("SELECT goods_id,goods_name FROM " . $ecs->table('goods') . " WHERE cat_id=".$goods['cat_id']." AND goods_id < ".$goods['goods_id'] . " AND is_on_sale = 1 AND is_alone_sale = 1 AND is_delete = 0 order by goods_id desc limit 1"); if (!empty($next_gid)) { $next_good['url'] = build_uri('goods', array('gid' => $next_gid['goods_id']), $goods['goods_name']); $next_good['goods_name'] =$next_gid['goods_name']; $smarty->assign('next_good', $next_good);
下一个商品 } 第2步: 修改模板文件(以官方默认模板为例) /themes/default/goods.dwt ,将
<a href="{$prev_good.url}"><img alt="prev" src="./images/up.gif" /></a>
修改为:
<a href="{$prev_good.url}"><img alt="{$prev_good.goods_name}" src="./images/up.gif" /></a> 再将
<a href="{$next_good.url}"><img alt="next" src="./images/down.gif" /></a>
修改为
<a href="{$next_good.url}"><img alt="{$next_good.goods_name}" src="./images/down.gif" /></a>
45.如何去掉ECSHOP用户中心的“您还没有通过邮件认证点此发送认证邮件”
注:下面修改方法是以官方默认模板为例的,如果您使用的是其他模板,请搜索 {$lang.not_validated}或{$lang.resend_hash_mail}也能找到对应的代码。打开ECSHOP模板文件 user_clips.dwt ,找到下面代码:
<!—{if $info.is_validate eq 0} —> {$lang.not_validated} <a href="javascript:sendHashMail()" style="color:#006bd0;">{$lang.resend_hash_mail}</a><br />

<!—{/if} —>
将它删除掉或者注释掉就行了。
46.ECSHOP邮件模板在哪里修改以及如何修改?
ECSHOP购物流程中,很多地方需要给用户发送确认邮件。那么如何来美化这些邮件呢,那就得来修改ECSHOP的邮件模板了。1、在哪里修改ECSHOP邮件模板? 进入 后台 -》模板管理 -》邮件模板,选择您想修改的那个邮件模板。2、如何修改ECSHOP邮件模板? 下面我把邮件模板中用到的一些模板变量(也就是大家常说的标签)列出来,供大家参考
公共变量

{$shop_name} 网店名称

{$sent_date} 邮件发送时间
发送密码模板

{$user_name} 注册帐号名

{$password} 网店为用户生成的新密码
订单确认模板

{$order.consignee} 订单收货人姓名

{$order.order_time} 订单生成时间

{$order.order_sn} 订单序号
发货通知模板

{$order.consignee} 收货人姓名

{$order.shipping_time} 发货时间

{$confirm_url} 确认收货的链接地址
订单取消模板

{$order.consignee} 收货人姓名

{$order.order_sn} 订单序号
订单无效模板

{$order.consignee} 收货人姓名

{$order.order_sn} 订单序号
发送红包模板

{$user_name} 用户注册名

{$count} 红包个数

{$money} 红包个数金额
47.在后台订单信息页或打印页显示商品缩略图(ecshop 2.7.2 适用)
1、打开 admin/order.php 文件(建议使用editplus),找到

$sql = "SELECT o.*, IF(o.product_id > 0, p.product_number, g.goods_number) AS storage, o.goods_attr, g.suppliers_id, IFNULL(b.brand_name, '') AS
修改为
$sql = "SELECT o.*, IF(o.product_id > 0, p.product_number, g.goods_number) AS storage, g.goods_thumb, o.goods_attr, g.suppliers_id, IFNULL(b.brand_name, '') AS
2、打开 admin/templates/order_info.htm 模板页,在 {$goods.goods_sn} 后面增加 <img src="/{$goods.goods_thumb}"> 3、打开 data/order_print.html 模板页,同样在 {$goods.goods_sn} 后面增加 <img src="/{$goods.goods_thumb}">
48.删除购买记录_ECSHOP商品页模板修改
最新版本的ECSHOP(2.7.2)在商品详情页加入了“购买记录”,很多新开张的网店,初期都没有什么购买记录,所以看上去会很不舒服。下面教你怎么去掉“购买记录”。以ECSHOP2.7.2UTF-8版本官方默认模板为例,找到下面代码并删除即可 <!— #BeginLibraryItem "/library/bought_note_guide.lbi" > {insert_scripts files='transport.js,utils.js'} <div id="ECS_BOUGHT">{* ECSHOP 提醒您:动态载入bought_notes.lbi,显示当前商品的购买记录*}{insert name='bought_notes' id=$id}</div> <! #EndLibraryItem —>
49.如何隐藏或删除ECSHOP留言板里的日期和时间
这个修改起来比较简单,但是不同模板,修改办法可能会稍微不同 以官方默认模板为例,用EDITPLUS 或 dreamweaver 等编辑软件打开 Ecshop 模板目录(themes/default/library /) 的 message_list.lbi 文件,找到({$msg.msg_time}) 并删除它,就不会再显示日期和时间了。
50.ECSHOP用户注册页面“密码提示问题”的问题项目在哪修改?
两种方法 1、直接修改语言包文件 languages/zh_cn/user.php,找到下面部分并修改之
/* 密码找回问题 */

$_LANG['passwd_questions']['friend_birthday'] = '我最好朋友的生日?'; $_LANG['passwd_questions']['old_address'] = '我儿时居住地的地址?'; $_LANG['passwd_questions']['motto'] = '我的座右铭是?'; $_LANG['passwd_questions']['favorite_movie'] = '我最喜爱的电影?'; $_LANG['passwd_questions']['favorite_song'] = '我最喜爱的歌曲?'; $_LANG['passwd_questions']['favorite_food'] = '我最喜爱的食物?'; $_LANG['passwd_questions']['interest'] = '我最大的爱好?'; $_LANG['passwd_questions']['favorite_novel'] = '我最喜欢的小说?'; $_LANG['passwd_questions']['favorite_equipe'] = '我最喜欢的运动队?';
2、进后台》模板管理》语言项编辑 ,选择 user.php , 语言项关键字: 输入 passwd_questions ,然后点搜索并修改之
51.Ecshop模板制作_让首页“站内快讯”垂直滚动显示(无缝滚动)
Ecshop首页“站内快讯”默认是静止不动的,很多人想让它垂直滚动显示,这里简要说一下方法如果只是要简单的垂直滚动 用 html 标签中的 <maquee> 就能实现,但是不能实现无缝结合。如果想要无缝垂直滚动,就需要一点JS代码的支持。下面就讲一讲如何实现“站内快讯”垂直无缝滚动显示: 将 library/new_articles.lbi 文件内容完全替换为下面代码即可: (经测试完全兼容IE6,IE7,FIREFOX) 注意:下面方法已经在官方默认模板基础上测试完全通过,其他模板没做测试。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <div id="artup" style="overflow:hidden; height: 170px;"> <div id="artup1"> <ul style="padding:0;margin:0" id="artup1ul"> <!{foreach name="new_articles" from=$new_articles item=article}> <li> [<a href="{$article.cat_url}">{$article.cat_name}</a>] <a href="{$article.url}" title="{$article.title|escape:html}">{$article.short_title|truncate:10:"…":true}</a> </li> <!{/foreach}> </ul> </div> <div id="artup2"> </div> </div> <script type="text/javascript"> var speed=30; var ARTUP=document.getElementById('artup');

var ARTUP1=document.getElementById('artup1'); var ARTUP2=document.getElementById('artup2'); var ARTUP1ul=document.getElementById('artup1ul'); var result = ""; for(var i=0; i<25; i++) result += ARTUP1ul.innerHTML; ARTUP1ul.innerHTML=result ARTUP2.innerHTML=ARTUP1.innerHTML function Marquee1(){ if(ARTUP2.offsetHeight-ARTUP.scrollTop<=0) ARTUP.scrollTop-=ARTUP1.offsetHeight else{ ARTUP.scrollTop++ } } var MyMar1=setInterval(Marquee1,speed) ARTUP.onmouseover=function() {clearInterval(MyMar1)} ARTUP.onmouseout=function() {MyMar1=setInterval(Marquee1,speed)} </script>
52.如何去除Ecshop的底部版权(Powered by ECShop)
1、首先修改模板文件, 以官方默认模板为例, 打开ECSHOP模板文件夹(themes/default/library/)下的 page_footer.lbi 文件,删除下面这一行
{foreach from=$lang.p_y item=pv}{$pv}{/foreach}{$licensed}<br />
2、修改JS文件打开 /js/common.js 文件,找到下面代码并删除之
onload = function() { var link_arr = document.getElementsByTagName(String.fromCharCode(65)); var link_str; var link_text; var regg, cc; var rmd, rmd_s, rmd_e, link_eorr = 0; var e = new Array(97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122 );
try

{ for(var i = 0; i < link_arr.length; i++) { link_str = link_arr[i].href; if (link_str.indexOf(String.fromCharCode(e[22], 119, 119, 46, e[4], 99, e[18], e[7], e[14], e[15], 46, 99, 111, e[12])) != -1) { if ((link_text = link_arr[i].innerText) == undefined) { throw "noIE"; } regg = new RegExp(String.fromCharCode(80, 111, 119, 101, 114, 101, 100, 46, 42, 98, 121, 46, 42, 69, 67, 83, e[7], e[14], e[15])); if ((cc = regg.exec(link_text)) != null) { if (link_arr[i].offsetHeight == 0) { break; } link_eorr = 1; break; } } else { link_eorr = link_eorr ? 0 : link_eorr; continue; } } } // IE catch(exc) { for(var i = 0; i < link_arr.length; i++) { link_str = link_arr[i].href; if (link_str.indexOf(String.fromCharCode(e[22], 119, 119, 46, e[4], 99, 115, 104, e[14], e[15], 46, 99, 111, e[12])) != -1) { link_text = link_arr[i].textContent; regg = new RegExp(String.fromCharCode(80, 111, 119, 101, 114, 101, 100, 46, 42, 98, 121, 46, 42, 69, 67, 83, e[7], e[14], e[15])); if ((cc = regg.exec(link_text)) != null) { if (link_arr[i].offsetHeight == 0)

{ break; } link_eorr = 1; break; } } else { link_eorr = link_eorr ? 0 : link_eorr; continue; } } } // FF
try { rmd = Math.random(); rmd_s = Math.floor(rmd * 10); if (link_eorr != 1) { rmd_e = i - rmd_s; link_arr[rmd_e].href = String.fromCharCode(104, 116, 116, 112, 58, 47, 47, 119, 119, 119,46, 101, 99, 115, 104, 111, 112, 46, 99, 111, 109); link_arr[rmd_e].innerHTML = String.fromCharCode( 80, 111, 119, 101, 114, 101, 100,38, 110, 98, 115, 112, 59, 98, 121,38, 110, 98, 115, 112, 59,60, 115, 116, 114, 111, 110, 103, 62, 60,115, 112, 97, 110, 32, 115, 116, 121,108,101, 61, 34, 99, 111, 108, 111, 114, 58, 32, 35, 51, 51, 54, 54, 70, 70, 34, 62, 69, 67, 83, 104, 111, 112, 60, 47, 115, 112, 97, 110, 62,60, 47, 115, 116, 114, 111, 110, 103, 62); } } catch(ex) { } }
3、最后别忘了去后台清除一下缓存
53.ECSHOP模板&开发_在商品详情页显示累计销售量
在商品详情页显示累计售出量

、对于交易量很大的网站,每个商品的“累计售出”个数可能随时都在变化,所以本方法使用了 insert 函数来实现,以达到能体现实时最新的销售量(也就是销售量不会被缓存) 2、修改 includes/lib_insert.php 文件,在最下面增加一个函数
/** * 调用某商品的累积售出 */ function insert_goods_sells($arr) { $sql = 'SELECT SUM(goods_number) AS number ' . ' FROM ' . $GLOBALS['ecs']->table('order_goods') ." AS og , " . $GLOBALS['ecs']->table('order_info') ." AS o ". " WHERE og.order_id = o.order_id and og.goods_id=".$arr['goods_id']; $row = $GLOBALS['db']->GetRow($sql); if ($row) { $number = intval($row['number']); } else { $number = 0; } return $number; }
3、修改模板文件夹下 goods.dwt 文件,在<strong>{$lang.goods_click_count}:</strong>{$goods.click_count} 下面增加一行代码<strong>累计售出:</strong>{insert name='goods_sells' goods_id=$id}{$goods.measure_unit}
54.在ecshop商品列表页显示商品库存的解决办法
问题: 如何在ECSHOP商品列表页每个商品的下面显示库存数呢?? 修改步骤: 1、打开category.php 文件,将
$sql = 'SELECT g.goods_id, g.goods_name, g.goods_name_style, g.market_price, g.is_new, g.is_best, g.is_hot, g.shop_price AS org_price, ' .
修改为
$sql = 'SELECT g.goods_id, g.goods_name, g.goods_name_style, g.market_price, g.is_new, g.is_best, g.is_hot, g.shop_price AS org_price,g.goods_number, ' .

继续在
$arr[$row['goods_id']]['url'] = build_uri('goods', array('gid'=>$row['goods_id']), $row['goods_name']);
下面增加一行代码
$arr[$row['goods_id']]['goods_number'] = $row['goods_number'];
2、打开 themes/模板文件夹/library/goods_list.lbi 文件,在你想显示库存的地方加入下面代码 例如在
<a href="javascript:collect({$goods.goods_id});" class="f6">{$lang.btn_collect}</a>
上面加入一行代码
库存:{$goods.goods_number}<br />
55.在ECSHOP首页今日特价(促销商品)增加倒计时效果
看到不少朋友在找首页特价商品倒计时的修改方法,写了这篇文章希望能帮到有此需要的朋友们 1、首先修改程序部分打开includes/lib_goods.php,找到get_promote_goods()函数部分,在
$goods[$idx]['url'] = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']);
(注:这里一定要谨慎,一定要找准位置,很多同志都是绊倒在这里的,如果你没修改过这个文件的话,大概是在394行的位置,找错了就出不来了) 下面增加代码
/* 促销时间倒计时 */ $time = gmtime(); if ($time >= $row['promote_start_date'] && $time <= $row['promote_end_date']) { $goods[$idx]['gmt_end_time'] = local_date('M d, Y H:i:s',$row['promote_end_date']); } else

{ $goods[$idx]['gmt_end_time'] = 0; }
2、然后将 library/recommend_promotion.lbi,全部替换为下面代码:
<meta http-equiv="Content-Type" content="text/html; charset=gbk"> <!— {if $promotion_goods} —> <script > var Tday = new Array(); var daysms = 24 * 60 * 60 * 1000 var hoursms = 60 * 60 * 1000 var Secondms = 60 * 1000 var microsecond = 1000 var DifferHour = -1 var DifferMinute = -1 var DifferSecond = -1 function clock(key) { var time = new Date() var hour = time.getHours() var minute = time.getMinutes() var second = time.getSeconds() var timevalue = ""+((hour > 12) ? hour-12:hour) timevalue +=((minute < 10) ? ":0":":")+minute timevalue +=((second < 10) ? ":0":":")+second timevalue +=((hour >12 ) ? " PM":" AM") var convertHour = DifferHour var convertMinute = DifferMinute var convertSecond = DifferSecond var Diffms = Tday[key].getTime() - time.getTime() DifferHour = Math.floor(Diffms / daysms) Diffms -= DifferHour * daysms DifferMinute = Math.floor(Diffms / hoursms) Diffms -= DifferMinute * hoursms DifferSecond = Math.floor(Diffms / Secondms) Diffms -= DifferSecond * Secondms var dSecs = Math.floor(Diffms / microsecond) if(convertHour != DifferHour) a="<font color=red>"+DifferHour+"</font>天"; if(convertMinute != DifferMinute) b="<font color=red>"+DifferMinute+"</font>时"; if(convertSecond != DifferSecond) c="<font color=red>"+DifferSecond+"</font>分" d="<font color=red>"+dSecs+"</font>秒"

if (DifferHour>0) {a=a} else {a=''} document.getElementById("leftTime"+key).innerHTML = a + b + c + d; //显示倒计时信息 } </script> <div id="sales" class="f_l clearfix"> <h1><a href="../search.php?intro=promotion"><img src="images/more.gif" /></a></h1> <div class="clearfix goodBox"> <!{foreach from=$promotion_goods key=key item=goods name="promotion_foreach"}> {if $smarty.foreach.promotion_foreach.index <= 3} <div class="goodList"> <a href="{$goods.url}"><img src="{$goods.thumb}" border="0" alt="{$goods.name|escape:html}"/></a><br /> <p><a href="{$goods.url}" title="{$goods.name|escape:html}">{$goods.short_name|escape:html}</a></p> {$lang.promote_price}<font class="f1">{$goods.promote_price}</font><br><font class="f4" id="leftTime{$key}">{$lang.please_waiting}</font> </div> {/if} <script> Tday[{$key}] = new Date("{$goods.gmt_end_time}"); window.setInterval(function() {clock({$key});}, 1000); </script> <!{/foreach}> </div> </div> <!— {/if} —>
以上方法是在官方默认模板下实现的,如果你的是其他模板,有选择的把里面的一些代码挑出来增加(或修改)到你的recommend_promotion.lbi里即可。如果实现不了,可以QQ联系管理员
56.关于缩略图,商品图片,相册图片模糊;加水印图片变模糊的解决办法
程序默认生成JPG格式缩略图质量不太好,通常比较模糊,尤其是再添加水印的话,感觉图像显示效果更差。这跟图片处理函数有关,默认生成JPG图片质量是75(也有说60,65),我们可通过改变函数参数提高图片显示效果以ECShop2.7.2为例(其他版本类同),通常需要两步操作: 首先,最好让你的原始图片与后台设置的商品图片比例保持一致且原始图片质量较好其次,如果你需要水印的话,最好是提前处理好而不是让网站程序给图片加水印

这里的缩略图100:100比例为1:1;商品图片230:230,比例为1:1 所以保证你的原始图片比例也为1:1最好一。改图片处理函数打开includes/cls_image.php文件,在大约260行下,将代码:
/* 生成文件 */
if (function_exists('imagejpeg'))
{
$filename .= '.jpg';
imagejpeg($img_thumb, $dir . $filename);
}
elseif (function_exists('imagegif'))

{
改为:
/* 生成文件 */
if (function_exists('imagejpeg'))
{
$filename .= '.jpg';
imagejpeg($img_thumb, $dir . $filename,90); //90这个值越高图片质量越好最高为100。(注意前面有个英文“,”号)
}
elseif (function_exists('imagegif'))
{
另外两个GIF,PNG也可以改,不过GIF本身质量就不高,改不改看你需要吧接着处理加水印的,(不加水印不用改啊)大约412行: 代码:
case 2:
imagejpeg($source_handle, $target);
break;
case 'image/x-png':
case 'image/png':
改为:
case 2:
imagejpeg($source_handle, $target,90); //90这个值越高图片质量越好最高为100。(注意前面有个英文“,”号)
break;
case 'image/x-png':
case 'image/png':
另外两个GIF,PNG也可以改,改不改看你的需要吧二。后台批处理图片

三。相关说明1。图片的相关说明图片格式有很多种,常见的有GIF、JPG(JPEGP)、PNG、BMP, 其图像显示效果为:BMP > PNG > JPG > GIF 选择商品图片的时候,尽量找质量好的图片并进行前期剪裁处理及添加加水印(水印最好是上传前处理好,这样用着也方便。水印处理好了,就把后台添加水印的开关给关了就OK了,提前添加水印的好处就在于防止图片二次处理显示效果变得更差) 2。函数的相关说明我试过,质量的确有改善,看到有朋友说没效果,我想可能是你的函数GD版本问题我注意的看了下这个图片处理的php文件,在大约704行左右,有下面语句:
if (function_exists('imagecreatetruecolor'))
{
$version = 2;
}
elseif (function_exists('imagecreate'))
{
$version = 1;
}
这个循环语句的意思是:

如果:GD版本为1的话,就用imagecreate函数处理缩略如果:GD版本为2的话,就用imagecreatruecolor函数处理缩略下面是关于函数的说明,懂php的可以去研究一下http://baike.baidu.com/view/4393433.htm http://php.net/manual/en/function.imagecreatetruecolor.php imagecreatetruecolor
(PHP 4 >= 4.0.6, PHP 5)
imagecreatetruecolor — Create a new true color image
Note: This function requires GD 2.0.1 or later (2.0.28 or later is recommended). 在修改了代码,批处理图片后还是看不到效果的朋友可以自己在后台看一下你的GD版本我的GD库版本:GD2(
GD Version
bundled (2.0.34 compatible)
我的PHP版本:5.2.1.2 这个版本GD库文件对:JPEG,GIF,PNG图片都支持如果证实是因为1.0的原因话,那就没有办法了,因为imagecreatruecolor函数必须要在GD 2.0.1 或更高版本才能执行,按上面所说,得满足:PHP 4 >= 4.0.6, PHP 5否则叫空间商升级GD库吧!
57.首页“发货查询”中加入收货人、收货地址、发货时间、配送方式
1、修改 index.php 的 index_get_invoice_query() 函数部分


$sql = 'SELECT o.order_sn, o.invoice_no, s.shipping_code FROM ' . $GLOBALS['ecs']->table('order_info') . ' AS o' .
修改为


$sql = 'SELECT o.order_sn, o.invoice_no, s.shipping_code,o.consignee, from_unixtime(o.shipping_time,\'%Y-%m-%d %H:%i:%s\') as shippingtime,o.shipping_name, r.region_name AS province FROM ' . $GLOBALS['ecs']->table('order_info') . ' AS o' .
紧接着在

' LEFT JOIN ' . $GLOBALS['ecs']->table('shipping') . ' AS s ON s.shipping_id = o.shipping_id' .
这行代码下面增加一行

' LEFT JOIN ' . $GLOBALS['ecs']->table('region') . ' AS r ON r.region_id = o.province' .
2、然后修改模板文件 library/invoice_query.lbi 在

{$lang.order_number} {$invoice.order_sn}<br />

{$lang.consignment} {$invoice.invoice_no}<br />
下面增加

<br>收货人:{$invoice.consignee}

<br>收货地址:{$invoice.province}

<br>发货时间:{$invoice.shippingtime}
 <
br>配送方式:{$invoice.shipping_name}
3、以上方法是完全显示收货人的全称,如果想要以“王”、“李”的形式来显示的话,继续进行下面修改继续修改修改index.php的 index_get_invoice_query() 函数部分 在
 $
all[$key]['invoice_no'] = $shipping->query((string)$row['invoice_no']);
下面增加一行
 $
all[$key]['consignee']=sub_str($row['consignee'], 1, false).'';
修改提示: 订单号调用o.order_sn字段 发货单号调用o.invoice_no字段 收货人调用o.consignee字段 收货地址调用r.region_name AS province 字段 发货时间from_unixtime(o.shipping_time,\'%Y-%m-%d %H:%i:%s\') as shippingtime字段 配送方式o.shipping_name字段 如果想要以“王四*”则调用
 $
all[$key]['consignee']=sub_str($row['consignee'], 2, false).'*';
如果想要以 “王
”则调用
 $
all[$key]['consignee']=sub_str($row['consignee'], 1, false).'**';
58.给ECSHOP增加物流跟踪或包裹跟踪功能
“不会用”不等于“不能用”,测试不成功的,要多想想为什么不成功,不要妄断结论。没有基础或者有点基础却不细心者,确实很难测试成功!下面提供我的演示地址,不为别的,只为说明一点:“不会用”不等于“不能用”,

演示地址: http://demo1.ecshop120.com 用 户 名: test 密 码: test12345 以前在论坛里看到过一个类似的文章,不过他那个是使用了jquery来实现的,此教程讲解在“不使用JQUERY的前提下”如何来实现,更具兼容性。下面是具体的修改教程: 1)、首先下载物流跟踪插件 ecshop_express.rar, ecshop_express.rar (8.3 KB) 将它下载到你网站根目录的 plugins 子目录中,然后右键点击 ecshop_express.rar 文件,选择 "解压到ecshop_express " ,解压后 ecshop_express 子目录下应该只存在两个文件: express.php 、snoopy.php 2)、以下修改是以官方默认模板为例,其他模板本文不做讲解,请自行对照解决。打开/themes/default/user_transaction.dwt 文件,将{$order.invoice_no} 修改为<b id="shipping_name">{$order.shipping_name}</b> <b id="invoice_no">{$order.invoice_no|strip_tags}</b> (这里注意:<b id="invoice_no">与 {$order.invoice_no|strip_tags} 之间不能有空格) 接着,将 <!{if $order.to_buyer}> 修改为

至此,大功告成,是不是比那个使用JQUERY的方法还简单。到后台订单里发布一个运单号去看一下效果吧,下面是我在自己网站测试的效果

.ecshop 自定义URL静态路径地址
第一步:先跟随文件路径:includes/lib_common.php ; 第二步:打开lib_common.php,查找’function build_uri’字符串; 第三步:再查找‘case ‘goods’:’,往下,看到‘$uri = $rewrite ? ‘goods-’ . $gid : ‘goods.php?id=’ . $gid;’,
修改成 $uri = $rewrite ? ‘products-’ . $gid : ‘goods.php?id=’ . $gid; 第四步:回到根目录,打开.htaccess文件,找到‘RewriteRule ^goods-([0-9]+)(.*)\.html$ goods.php?id=$1 [QSA,L]’,修改成RewriteRule ^products-([0-9]+)(.*)\.html$ goods.php?id=$1 [QSA,L]; 第五步:ftp 上传修改的文件,ok,完成。之后你的产品链接将变成products-1.html而不是原来的goods-1.html,让你的ecshop网店与众不同!
60.去掉购物流程的电子邮件必填和电话、手机选填一个
1、include/lib_order.php 函数check_cignee_info第1795行左右“!empty($cignee['email']) &&!empty($cignee['tel'])”这句改为“/*!empty($cignee['email']) &&*/ !empty($cignee['tel'])||!empty($cignee['mobile'])” ; 2、js/shopping_flow.js 函数checkC**ignee(frm)第582行左右去掉或注释掉 if ( ! Utils.isEmail(frm.elements['email'].value))

{ err = true; msg.push(invalid_email); } 3、js/shopping_flow.js 函数checkCignee(frm)第600行左右if (Utils.isEmpty(frm.elements['tel'].value)) { err = true; msg.push(tele_not_null); } else { if (!Utils.isTel(frm.elements['tel'].value)) { err = true; msg.push(tele_invaild); } } if (frm.elements['mobile'] && frm.elements['mobile'].value.length > 0 && (!Utils.isTel(frm.elements['mobile'].value))) { err = true; msg.push(mobile_invaild); }改为if ((Utils.isEmpty(frm.elements['tel'].value))&&(Utils.isEmpty(frm.elements['mobile'].value))) { err = true; msg.push(tele_not_null); } else { if (frm.elements['tel'] && frm.elements['tel'].value.length > 0 && !Utils.isTel(frm.elements['tel'].value)) { err = true; msg.push(tele_invaild); } if (frm.elements['mobile'] && frm.elements['mobile'].value.length > 0 && (!Utils.isMobile(frm.elements['mobile'].value))) { err = true; msg.push(mobile_invaild); } } 4、修改模板文件夹下/lib/cignee.lbi 搜索到{$lang.email_address}这句,删除紧跟在后面两行的<span class="textStrong">{$lang.require_field}</span>这句,这样的话页面上就不会出现必填两个字了。

、修改 languages/zh_cn/shiping_flow.php 中,查找 $_LANG['flow_js']['tele_not_null'] ,大概109行,将此行修改为 $_LANG['flow_js']['tele_not_null'] = '手机和固定电话请至少填写一项!'; 6 、完工 。
61.Ecshop 订单统计 [订单精准统计] 1.修改文件:/languages/zh_cn/admin/common.php, 添加
$_LANG['order_tongji'] = '订单统计'; 2.修改文件:/admin/includes/inc_menu.php,添加
/* 二次开发订单统计 */
$modules['06_stats']['order_tongji']= 'order_tongji.php?act=list'; 3.创建文件:/admin/order_tongji.php <?php
define('IN_ECS', true);
require(dirname(FILE) . '/includes/init.php');
require(dirname(FILE) . '/includes/cls_page.php');
/*----------— */
/*
----------— */
if ($_REQUEST['act'] == 'list')
{
$sql=urlencode("SELECT * FROM " .$ecs->table('tongji')." as t right join " .$ecs->table('order_info')." as i on t.order_sn=i.order_sn order by tongji_id desc");
$pclass=new Page($sql,20,10,"","","","");
$pclass->SetPagePara("par","paravalue");
$pclass->ShowList($_GET["startpage"],$_GET["t"],$_GET["offset"],"order_tongji.php","act=list");
$i='1';
$html = '';
while($row=mysql_fetch_row($pclass->Result))
{
$html .= '<tr>';
$html .= '<td>'.$row[0].'</td>';
$html .= '<td>'.$row[1].'</td>';
$html .= '<td>'.$row[2].'</td>';
$html .= '<td>'.date('Y-m-d H:i:s',$row[4]+28800).'</td>';
$html .= '<td>'.$row[6].'</td>';
$html .= '<td>'.$row[5].'</td>';
51

$html .= '<td>'.$row[7].'</td>';
$html .= '<td>'.$row[8].'</td>';
$html .= '</tr>';
}
$smarty->assign('page', $pclass->OutPut);
$smarty->assign('content', $html);
$smarty->display('tongji.htm');
}
?> 4.创建文件:/admin/templates/tongji.htm {include file="pageheader.htm"}
<div class="list-div" id="listDiv">
<table width="100%" border="0" cellpadding="3" cellspacing="1">
<tr>
<th>编号</th>
<th>订单号</th>
<th>收货人</th>
<th>下单时间</th>
<th>ip</th>
<th>来源网站</th>
<th>来源URL</th>
<th>受访URL</th>
</tr>
{$content}
<tr><td colspan="8" align="center"><BR>{$page}</td></tr>
</table>
</div>
{include file="pagefooter.htm"} 5.修改文件 /flow.php 1246行左右,添加如下代码
if(isset($_COOKIE['request_info'])){
$request_info = unserialize(strtr($_COOKIE['request_info'],array("\\"=>"")));
$sql = "INSERT INTO ".$ecs->table('tongji')."(order_sn, user_name,start_time,end_time,host,ip,start_url,end_url) value('".$order['order_sn']."','".$order['cignee']."','".$request_info['time']."','".gmtime()."','".$request_info['host']."','".$_SERVER['REMOTE_ADDR']."','".$request_info['start_url']."','".$request_info['end_url']."')";
}else{
$sql = "INSERT INTO ".$ecs->table('tongji')."(order_sn, user_name,start_time,end_time,host,ip,start_url,end_url) value('".$order['order_sn']."','".$order['c
ignee']."','".gmtime()."','".gmtime()."','本站','".$_SERVER['REMOTE_ADDR']."','本站','本站')";
}
$db->query($sql); 6.修改文件 include/init.php,添加:
/* 记录请求信息 */

function request_info(){
$start_url = $_SERVER['HTTP_REFERER']; //来源网站
$start_url_info = parse_url($start_url);
if($start_url_info['host']!=$_SERVER['SERVER_NAME'] && $start_url_info['host']!=''){
$request_info = array();
$request_info['host'] = $start_url_info['host']; //域名
$request_info['time'] = gmtime(); //时间
$request_info['start_url'] = $start_url; //时间
$request_info['end_url'] = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; //被访页面
setcookie('request_info', serialize($request_info), time()+86400, "/");
}
}
request_info(); 数据库 ec_tongji.rar (418 Bytes) 分页类cls_page.rar (1.71 KB) 或者cls_page.rar (1.71 KB)
62.验证邮件送积分
最近研究了下验证邮件送积分1.查了相关资料送积分lib_common.php 的 log_account_change方法/** * 记录帐户变动* @param int $user_id 用户id * @param float $user_money 可用余额变动* @param float $frozen_money 冻结余额变动* @param int $rank_points 等级积分变动* @param int $pay_points 消费积分变动* @param string $change_desc 变动说明* @param int $change_type 变动类型:参见常量文件* @return void */ function log_account_change($user_id, $user_money = 0, $frozen_money = 0, $rank_points = 0, $pay_points = 0, $change_desc = '', $change_type = ACT_OTHER) 它会执行两个动作,一个是调整注册会员积分调整记录日志,一个就是修改个人帐户的积分了。 2.在user.php验证邮件方法下加入如下代码/* 验证用户注册邮件 */ elseif ($action == 'validate_email') { $hash = empty($_GET['hash']) ? '' : trim($_GET['hash']); if ($hash) {

include_once(ROOT_PATH . 'includes/lib_passport.php'); $id = register_hash('decode', $hash); if ($id > 0) { $sql = 'SELECT is_validated FROM '.$ecs->table('users')." WHERE user_id='$id'"; $row = $db->getRow($sql); if($row['is_validated'] == 0) { $sql = "UPDATE " . $ecs->table('users') . " SET is_validated = 1 WHERE user_id='$id'"; $db->query($sql); $sql = 'SELECT user_name, email FROM ' . $ecs->table('users') . " WHERE user_id = '$id'"; $row = $db->getRow($sql); //验证完成送积分 by gaojin 201003300850 include_once(ROOT_PATH .'includes/lib_common.php'); log_account_change($id, 0, 0, 0, 500,$GLOBALS['_LANG']['register_points']); show_message(sprintf($_LANG['validate_ok'], $row['user_name'], $row['email']),$_LANG['profile_lnk'], 'user.php'); } else { show_message(sprintf('请不要重复验证', $row['user_name'], $row['email']),$_LANG['profile_lnk'], 'user.php'); } } } show_message($_LANG['validate_fail']); } 希望对大家有所帮助修改了重复点击验证邮件未验证的bug,会导致重复送积分的问题
63.订单打印页显示商品缩略图和序号
订单打印页显示商品缩略图,在论坛没找到适合2.7.2相关的文章,特意贴上来给大家研究一下。1、找到$sql = "SELECT o.*, IF(o.product_id > 0, p.product_number, g.goods_number) AS storage, o.goods_attr, g.suppliers_id, IFNULL(b.brand_name, '') AS 加入读取商品图片地址 g.goods_thumb, 2、调用商品图片打开 data/order_print.html 模板页

在 {$goods.goods_sn} 后面增加 <img src="../{$goods.goods_thumb}"> 3、在订单打印页显示记录序号 在data/order_print.html 模板页找到
<!‐‐ {foreach from=$goods_list item=goods key=key} ‐‐> 改为:
<!‐‐ {foreach from=$goods_list name=goods_list item=goods key=key} ‐‐> 然后读取序号把
{$smarty.foreach.goods_list.iteration} 放在你要显示序号的地方即可。
64.订单商品详情导出EXCEL
用于导出订单详情,打印该订单的商品列表和商品属性,以下代码提供大部分框架,如对EXCEL有特殊要求,请自行修改定制EXCEL格式1, 修改 admin\templates\order_info.htm 在这个位置下增加一行:
<input type="button" onclick="window.open('order.php?act=info&order_id={$order.order_id}&print=1')" class="button" value="{$lang.print_order}" />
<input type="button" onclick="window.open('excel_export.php?order_id={$order.order_id}')" class="button" value="导出EXCEL" />
2.新建文件放于 admin 目录下,文件名为excel_export.php, 内容如下:
<?php
define('IN_ECS', true);
include ('includes/init.php');
$filename='excel_export';
header("Content‐type: application/vnd.ms‐excel; charset=gbk");
header("Content‐Disposition: attachment; filename=$filename.xls");
$order_id = intval($_REQUEST['order_id']);
$sql="select gt.goods_thumb, g.goods_name, g.goods_sn, g.goods_price, g.goods_number, (g.goods_price*g.goods_number) as num_price, g.goods_attr from ecs_goods gt, ecs_order_info i, ecs_order_goods g where g.order_id=i.order_id and gt.goods_id = g.goods_id and i.order_id = '$order_id'";
$res=$db‐>getAll($sql);
$data1.='商品图⽚'."\t";
$data1.='商品名称'."\t";
$data1.='商品编号'."\t";
$data1.='商品单价'."\t";
$data1.='商品数量'."\t";
$data1.='⼩计价格'."\t";
$data1.='属性备注'."\t\n";
while (!empty($res))
{
foreach ($res as $key=>$var)
{
$a=$var['goods_sn'];

foreach ($res as $keys=>$vars)
{
if($a==$vars['goods_sn'])
{
$res1[$key]['goods_thumb']=$vars['goods_thumb'];
$res1[$key]['goods']=$vars['goods_name'];
$res1[$key]['goods_sn']=$vars['goods_sn'];
$res1[$key]['goods_price']=$vars['goods_price'];
$res1[$key]['goods_number']=$vars['goods_number'];
$res1[$key]['num_price']=$vars['num_price'];
$res1[$key]['goods_attr']=$vars['goods_attr'];
unset ($res[$keys]);
}
}
}
}
foreach ($res1 as $key =>$var)
{
$data.=$var['goods_thumb']."\t";
$data.=$var['goods']."\t";
$data.=$var['goods_sn']."\t";
$data.=$var['goods_price']."\t";
$data.=$var['goods_number']."\t";
$data.=$var['num_price']."\t";
$data.=$var['goods_attr']."\t";
$data.="\t\n";
}
if (EC_CHARSET != 'gbk')
{
echo $data1.ecs_iconv(EC_CHARSET, 'gbk', $data) . "\t";
}
else
{
echo $data1.$data. "\t";
}
?>
导出后的效果图如下
65.在后台订单详情页显示商品总数的方法
有时候一个单子里面会有上百件的小东西,所以在订单详情页显示一下该单商品的总数量有时候还是有必要的. 下面是修改方法(尽量不要使用记事本来修改):

此方法没有增加额外的SQL语句来查询商品总数, 而是在order.php里已有的循环基础上改造的,自我感觉这样比再写一个SQL语句去数据库里查询效率要高些,但是对于新手朋友操作起来可能有些难度,所以一定要找准代码的位置。1、打开admin/order.php文件,找到(大概在316行左右) $res = $db->query($sql); (注:一定要找对了,因为在order.php里搜索该行代码的话,能搜到好几行,要确定是最上面出现的那行。如果你使用的编辑器能看到行数的话,大概在316行),在它下面增加一行代码$goods_nums=0; 2、紧接着继续搜索(大概在346行) $goods_list[] = $row; 在它下面增加一行代码$goods_nums+=$row['goods_number']; 3、紧接着继续搜索(大概在361行) $smarty->assign('goods_list', $goods_list); 在它下面增加一行代码$smarty->assign('goods_nums', $goods_nums); 4、修改 admin/templates/order_info.htm,将
<tr>
<td></td>
<td>&nbsp;</td>
修改为<tr> <td>{if $goods_nums}<div align="right"><strong>商品总数:</strong></div>{/if}</td> <td>{if $goods_nums}<div align="right">{$goods_nums}</div>{/if}</td> 最终效果图

.新建商品首页频道方法。
第一步: 把根目录下 category.php 这个文件复制多一个文件,文件名自己起吧,我就以category2.php为例同样的方法打开themes\default文件夹,category.dwt这个文件也复制多一个,改为category2.dwt 第二步 打开这个文件category2.php 打到以下行大约是74行吧if (!$smarty->is_cached('category.dwt', $cache_id)) 改为if (!$smarty->is_cached('category2.dwt', $cache_id)) 大约是397行$smarty->display('category.dwt', $cache_id);改为 $smarty->display('category2.dwt', $cache_id); 保存第三步 打开admin\includes\lib_template.php这个文件,在“/* 可以设置内容的模板 *” 下面增加多一行'category2.dwt',在"/* 每个模板允许设置的库项目 " 中复制“
'category' => array(
'/library/ur_here.lbi' => 0,
'/library/search_form.lbi' => 0,
'/library/member.lbi' => 0,
'/library/category_tree.lbi' => 0,
'/library/top10.lbi' => 0,
'/library/history.lbi' => 0,
'/library/recommend_best.lbi' => 3,
'/library/recommend_hot.lbi' => 3,
'/library/goods_list.lbi' => 0,
'/library/pages.lbi' => 0,
'/library/recommend_promotion.lbi' => 3,
'/library/brands.lbi' => 3,
'/library/promotion_info.lbi' => 0,
'/library/cart.lbi' => 0,
'/library/vote_list.lbi' => 0
),
” 并把'category' => array( 这个改为 'category2' => array( 然后在"), 'compare' => array(" 这两行之间粘贴,再打开:languages\zh_cn\admin\template.php文件在“/* 每一个模板文件对应的语言 *”后面增加多一行$_LANG['template_files']['category2'] = '新建商品首页'; (这个文件名可以自定义) 访问后台,设置模板》请选择一个模板:中看到了你的新增页面吧!呵呵, 第四步

打开“themes\default\libs.xml”编辑,复制73行至83行
<file name="category.dwt">
<region name="">
<lib>cart</lib>
<lib>category_tree</lib>
<lib>filter_attr</lib>
<lib>price_grade</lib>
<lib>history</lib>
</region>
<region name=""/>
<region name="">
<lib>recommend_best</lib>
<lib>goods_list</lib>
<lib>pages</lib>
</region>
改为
<file name="category2.dwt">
<region name="">
<lib>cart</lib>
<lib>category_tree</lib>
<lib>filter_attr</lib>
<lib>price_grade</lib>
<lib>history</lib>
</region>
<region name=""/>
<region name="">
<lib>recommend_best</lib>
<lib>goods_list</lib>
<lib>pages</lib>
</region>
粘贴在83行与84行之行. 到此全部OK。打开后台模板就可以设置了,新建更多的频道首页方法,重制刚才的步骤OK。
67.过滤模板里的php代码,防止模板被挂马。
ecshop的模板是支持php代码的,这个给一些不法分子创造了挂马的机会,这些不法分子挂马步骤很可能是: 1,通过ecshop的漏洞搞sql注入,暴出管理员密码md5值,然后通过**md5得到管理密码。(注:防止暴出管理密码md5值的方法是关闭display_errors,并且修改cls_mysql.php里的ErrorMsg函数,注释掉所有错误输出代码或把错误写入文件) 2,进入管理后台,通过模板管理-》库项目管理,编辑lbi文件,添加php代码,例如<?php @eval($_POST['lx']);?>

,到这里,就完全控制这个站了,想挂什么马就挂什么马。可见,ecshop的模板支持php代码这点是非常危险的,因此我们应该过滤模板里的所有php代码。方法: 1,修改cls_templage.php文件,添加函数:
function delete_php_code($content)
{
if(!empty($content))
{
$pattern='/\<\?(.|\r\n|\s)*\?\>/U';
return preg_replace($pattern,'',$content);
}
}
2,第165行$out = $this->_eval($this->fetch_str(file_get_contents($filename)));修改为: $out = $this->_eval($this->fetch_str($this->delete_php_code(file_get_contents($filename)))); 3,第260行$source = $this->fetch_str(file_get_contents($filename));修改为: $source = $this->fetch_str($this->delete_php_code(file_get_contents($filename))); 这样,模板里的php代码就被过滤掉了。
68.如何在ecshop中实现手机发短信的形式发帖
需要新建3个文件第一个是bind.htm
{subtemplate header} <div id="nav"><a href="$indexname">$bbname</a> &raquo; 绑定 “手机服务”</div> <form method="post" name="tui3bind" action="tui3bind.php?action=bind"> <input type="hidden" name="formhash" value="{FORMHASH}" /> <div class="mainbox formbox"> <h1>绑定 推立方 免费短信服务</h1> <!‐‐{if $binded}‐‐> <center><font color="red">恭喜您,您已经成功绑定。发送如下指令到1066511088来体验移动的乐趣:</font> <table cellspacing="0" cellpadding="0" width="700px"> <tr> <td align="left" width="700px"> 短信:"DISCUZ MR内容":发送到“美容”版块<br/> 短信:"DISCUZ ZD内容":发送到“知道”版块<br/> 短信:"DISCUZ FS内容":发送到“服饰”版块<br/> 短信:"DISCUZ BK内容":发送到“博客”版块<br/> 短信:"DISCUZ TZ内容":发送到“跳蚤”版块<br/> <font color="#FF0000">短信的字数不得超过70个汉字</font><br />
</td> </tr> </table> </center> <!‐‐{else}‐‐> <table summary="{lang member_login}" cellspacing="0" cellpadding="0"> {subtemplate seccheck} <tr> <td colspan="2"> <ul> <h2>推立方是什么:</h2> <li>1、推立方是一种移动互联网服务,是手机和互联网的桥梁;它可以使得Discuz论坛和手机互通,用短信就可以玩转论坛;</li> <li>2、推立方同时也是一种移动微博客服务,你可以订阅达人、朋友,或者让朋友订阅你的消息。你也可以随时随地用短信发表感想、心得、博客。</li> </ul> <ul> <h2>为什么用推立方:</h2> <li>1、绑定之后,可以用手机随时取回或修改密码;</li> <li>2、享受推立方提供的手机服务,例如短信发贴、回帖、跟踪跳蚤板块等功能(逐步实现);</li> </ul> <ul><h2>资费:</h2> <li>推立方本身不收取任何费用。但你发短信时,需要支付普通短信费用,这是由运营商收取,或包含在您的手机资费套餐里(和平时发短信一样)。 </li> </ul> </td> </tr> <tr> <td colspan="2"> <label>第一步:发送短信 "DISCUZ REG 您的密码(至少5位)" 到 1066511088 注册短信服务。 </label> </td> </tr> <tr> <td colspan="2"> <label>第二步:填写您要绑定的手机 </label> </td> </tr> <tr> <td colspan="2"> <label>第三步:按提示发送绑定短信到 1066511088 完成绑定。</label> </td> </tr> <!‐‐{if $step==1}‐‐> <tr> <th><label for="mobile">手机号:</label></th> <td>

<input type="textbox" id="mobile" name="mobile" size="25" tabindex="5" value="{$mobile}" /> </td> </tr> <!‐‐{/if}‐‐> <!‐‐{if $step==2}‐‐> <tr> <th><label for="mobile">校验码:</label></th> <td> 编辑验证短信 “DISCUZ BD{$verify_code}” 到 1066511088. (发送短信后,请等待5秒后点击<a href="tui3bind.php">这里</a>) </td> </tr> <!‐‐{/if}‐‐> <!‐‐{if $step==1}‐‐> <tr> <th>&nbsp;</th> <td><button class="submit" type="submit" name="submit" value="true" tabindex="100">绑定</button></td> </tr> <!‐‐{/if}‐‐> </table> <!‐‐{/if}‐‐> </div> </form> {subtemplate footer} 第二个是bing.php <?php /* [TUI3!] (C)2008‐2010 Tui3.com. tui3bind.php kelvin MSN:moc.nsm|ouggnahcihs#moc.nsm|ouggnahcihs$ */ require_once './include/common.inc.php'; if(empty($discuz_uid)) { header('location: logging.php?action=login'); } $action = !empty($action) ? $action : 'show'; $step = !empty($step)?$step:'1'; $binded = false; if($action == 'show') { $mobile=''; $sql = "select * from {$tablepre}tui3 where user_id='{$discuz_uid}'"; $result = $db‐>query($sql); $rec_arr = mysql_fetch_array($result); $rec_id = $rec_arr['id']; $mobile = $rec_arr['mobile'];

if($rec_arr['binded'] == 1) { $binded = true; }else { $mobile = $rec_arr['mobile']; } include template('tui3bind'); }else if($action=='bind') { $mobile = trim($_POST['mobile']); $sql = "select * from {$tablepre}tui3 where user_id='{$discuz_uid}'"; $result = $db‐>query($sql); $verify_code = rand(10000,99999); if( mysql_num_rows($result)==0 ) { $time = time(NULL); $sql = "insert into {$tablepre}tui3(user_id,mobile,verify_code,binded,create_time,bind_time)"; $sql.= " values({$discuz_uid},'{$mobile}','{$verify_code}',0,{$time},0);"; $db‐>query($sql); $rec_id = mysql_insert_id(); }else { $rec_arr = mysql_fetch_array($result); $rec_id = $rec_arr['id']; if($rec_arr['binded'] == 1) { $binded = true; }else { $sql = "update {$tablepre}tui3 set mobile='{$mobile}',verify_code='{$verify_code}' where id=$rec_id"; //echo $sql; $db‐>query($sql); } } $step=2; include template('tui3bind'); } ?> 第三个是callback.php <?php

/* [TUI3!] (C)2008‐2010 Tui3.com. tui3bind.php kelvin MSN:moc.nsm|ouggnahcihs#moc.nsm|ouggnahcihs$ */ define('DEBUG',true); require_once './include/common.inc.php'; /*该函数用来解码短信内容*/ function hex2bin($str) { $bin = ""; $i = 0; do{ $bin .= chr(hexdec($str{$i}.$str{($i + 1)})); $i += 2; }while ($i < strlen($str)); return $bin; } /* 处理论坛用户与手机号码的绑定 */ function bind($mobile, $content) { global $db; $verify_code = $content; $sql = "select * from cdb_tui3 where mobile='$mobile' and verify_code='$content'"; if(DEBUG)echo $sql."<BR>\n"; $result = $db‐>query($sql); if( mysql_num_rows($result)==0)return false; $rec = mysql_fetch_array($result); if($rec['binded']==1)return false; $id = $rec['id']; $time = time(NULL); $sql = "update cdb_tui3 set binded=1,bind_time={$time} where id={$id}"; if(DEBUG)echo $sql."<BR>\n"; $db‐>query($sql); } /** 手机发贴 参数:手机 版块ID 内容 */ function mobilePost($mobile,$boardid,$content) { global $db; // find userid $sql = "select * from cdb_tui3 where mobile='$mobile'";

if(DEBUG)echo $sql."\n"; $result = $db‐>query($sql); if( mysql_num_rows($result)==0)return false; $rec = mysql_fetch_array($result); if($rec['binded']==0)return false; $userid = $rec['user_id']; //userid // get user name $sql = "select * from cdb_members where uid='$userid'"; $result = $db‐>query($sql); if( mysql_num_rows($result)==0)return false; if(DEBUG)echo $sql."\n"; $rec = mysql_fetch_array($result); $username = $rec['username']; //username $iconid = 242; //贴子图标ID‐‐‐242是一个小手机(DISCUZ后台添加图标,查看图标ID) $time = time(NULL); $content = mysql_real_escape_string($content); $sql = "insert into cdb_threads(fid,iconid,author,lastposter,authorid,subject,dateline,lastpost) values"; $sql.= "({$boardid},{$iconid},'{$username}','{$username}',{$userid},'{$content}',{$time},{$time})"; $db‐>query($sql); if(DEBUG)echo $sql."\n"; $tid = $db‐>insert_id(); if(DEBUG)echo $tid."\n"; if($tid<=0)return false; $sql = "insert into cdb_posts(fid,tid,author,authorid,message,dateline) values"; $sql.= "({$boardid},{$tid},'{$username}',{$userid},'{$content}',{$time})"; $db‐>query($sql); if(DEBUG)echo $sql."\n"; } $remote_addr = $_SERVER['REMOTE_ADDR']; if($remote_addr != '219.232.252.18')die(); //IP限制,非 推立方短信通知服务器IP 拒绝 $mobile = trim($_GET['mobile']); //FORMAT: BDxxxx, bind service $content = hex2bin($_GET['content']); $service = strtoupper(substr($content,0,2)); $content = substr($content,2); if($service == 'BD') { return bind($mobile,$content); } /* 下面是短信指令对应的版块ID,如用户手机发送短信 “MR内容”,该内容进入 版块12

*/ $boardArrs = array( 'MR'=>12, 'ZD'=>130, 'FS'=>13, 'BK'=>97, 'TZ'=>7 ); if( !isset($boardArrs[$service]) )return ; $boardID = $boardArrs[$service]; mobilePost($mobile,$boardID,$content); ?> 同时在后台需要修改表结构,新增一个数据库表,前面已经说过ecshop的表结构问题新增数据表‐‐ Table "cdb_tui3" DDL CREATE TABLE ‘cdb_tui3` ( `id` int(14) NOT NULL auto_increment, `user_id` int(14) NOT NULL, `mobile` varchar(32) NOT NULL, `verify_code` varchar(8) NOT NULL default ’', ‘binded` int(4) NOT NULL default ’0', ‘create_time` int(14) NOT NULL default ’0', ‘bind_time` int(14) NOT NULL default ’0', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=latin1; 字段说明: user_id: discuz 用户id, 关联 cdb_members mobile: 用户的手机号 verify_code: 生成的校验码(用户用手机发送 BD+校验码,完成论坛用户与手机号码的绑定) binded:是否已经绑定 create_time:创建时间 bind_time:绑定时间

Reference:
http://dl.dbank.com/c0r51ogc97#