分类 "Ecshop" 下的文章

警告内容:Warning: number_format() expects parameter 1 to be double, string given in D:\wamp\www\ecshop_old\includes\lib_common.php on line 966

解决这个问题的时候,一开始我也是先到网上查看相关的解决方案,

大部分都说是lib_common.phpprice_format ()里面的$price变量没有判断$price为空时调用number_format()函数出错,

然而ecshop2.7.3上面已经加了相应的判断:if($price==='') { $price=0; }

所以问题不在这儿,我又找到了订单里面编辑配送方式的对应的代码,发现$shipping_list[$key]['free_money'] = price_format($shipping['configure']['free_money'])的这个里面的$shipping['configure']是序列化的,但是ecshop里面并没有进行反序列化的处理,所以导致$shipping['configure']['free_money']的值是'a',这样在price_format ()里面并没有判断他不是数字,所以出错,现在的思路已经清晰了,只要更改将$shipping['configure']进行反序列化的处理,然后获得相应free_money的值,就可以解决问题了,详细的更改代码:

将:admin/order.php的2201行的

$shipping_list[$key]['free_money'] = price_format($shipping['configure']['free_money'])

这行代码先注释掉,然后加上一下代码:

    $shipping['configure'] = unserialize($shipping['configure']);
            $sun_shipping = array();
            foreach($shipping['configure'] as $row){
                $sun_shipping[$row['name']] = $row['value'];
            }
            $shipping_list[$key]['free_money'] = price_format($sun_shipping['free_money']);

如果觉的有用的话,就顶一个

问题一:商城首页报错 Strict Standards: Only variables should be passed by reference in D:\wamp\piaoyun.cc\ecshop\includes\cls_template.php on line 422

解决方法:找到提示错误的文件 cls_template.php 及行号

把 $tag_sel = array_shift(explode(' ', $tag));

改成:
$tag_arr = explode(' ', $tag);
$tag_sel = array_shift($tag_arr);

5.3以上版本的问题,应该也和配置有关,只要406行把这一句拆成两句就没有问题了,因为array_shift的参数是引用传递的,5.3以上默认只能传递具体的变量,而不能通过函数返回值

并且删除 D:\wamp\piaoyun.cc\ecshop\temp\caches下所有的文件

问题二:后台首页报错 Strict Standards: Non-static method cls_image::gd_version() should not be called statically in D:\wamp\piaoyun.cc\ecshop\includes\lib_base.php on line 346

解决办法

找到D:\wamp\www\ecshop\includes\cls_image.php文件

方法一:搜索:return cls_image::gd_version();
修改为:

$cls_image = new cls_image();
return $cls_image->gd_version();

方法二:搜索 function gd_version 改成 static function gd_version

问题三:后台-商店设置
Strict Standards: mktime(): You should be using the time() function instead in D:\wamp\piaoyun.cc\ecshop\admin\sms_url.php on line 31
Strict Standards: mktime(): You should be using the time() function instead in D:\wamp\piaoyun.cc\ecshop\admin\shop_config.php on line 32

解决办法:
根据错误提示 把 mktime() 改成 time()

问题四:

PHP Strict Standards:  Redefining already defined constructor for class balance in D:\wamp\piaoyun.cc\ecshop\includes\modules\payment\balance.php on line 79
PHP Strict Standards:  Redefining already defined constructor for class cappay in D:\wamp\piaoyun.cc\ecshop\includes\modules\payment\cappay.php on line 81
PHP Strict Standards:  Redefining already defined constructor for class chinabank in D:\wamp\piaoyun.cc\ecshop\includes\modules\payment\chinabank.php on line 85
PHP Strict Standards:  Redefining already defined constructor for class cod in D:\wamp\piaoyun.cc\ecshop\includes\modules\payment\cod.php on line 82
PHP Strict Standards:  Redefining already defined constructor for class ips in D:\wamp\piaoyun.cc\ecshop\includes\modules\payment\ips.php on line 82
PHP Strict Standards:  Redefining already defined constructor for class kuaiqian in D:\wamp\piaoyun.cc\ecshop\includes\modules\payment\kuaiqian.php on line 83
PHP Strict Standards:  Redefining already defined constructor for class paypal in D:\wamp\piaoyun.cc\ecshop\includes\modules\payment\paypal.php on line 82
PHP Strict Standards:  Redefining already defined constructor for class paypal_ec in D:\wamp\piaoyun.cc\ecshop\includes\modules\payment\paypal_ec.php on line 96
PHP Strict Standards:  Redefining already defined constructor for class post in D:\wamp\piaoyun.cc\ecshop\includes\modules\payment\post.php on line 79
PHP Strict Standards:  Redefining already defined constructor for class shenzhou in D:\wamp\piaoyun.cc\ecshop\includes\modules\payment\shenzhou.php on line 81
PHP Strict Standards:  Redefining already defined constructor for class tenpayc2c in D:\wamp\piaoyun.cc\ecshop\includes\modules\payment\tenpayc2c.php on line 83

解决办法:
如alipay.php

function __construct()
{
$this->alipay();
}

放到

function alipay()
{
}

之前!

最近更换了lnmp环境,发现用自带的ecshop.conf的伪静态规则是无效的,不知道是我的设置有问题呢,还是其他问题,通过搜索找到了一个可以用的

正确的可以使用的规则如下:

location / {
    if (!-e $request_filename) {
        rewrite "^/index\.html" /index.php last;
        rewrite "^/category$" /index.php last;
        rewrite "^/feed-c([0-9]+)\.xml$" /feed.php?cat=$1 last;
        rewrite "^/feed-b([0-9]+)\.xml$" /feed.php?brand=$1 last;
        rewrite "^/feed\.xml$" /feed.php last;
        rewrite "^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5&page=$6&sort=$7&order=$8 last;
        rewrite "^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)(.*)\.html$" /category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5 last;
        rewrite "^/category-([0-9]+)-b([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /category.php?id=$1&brand=$2&page=$3&sort=$4&order=$5 last;
        rewrite "^/category-([0-9]+)-b([0-9]+)-([0-9]+)(.*)\.html$" /category.php?id=$1&brand=$2&page=$3 last;
        rewrite "^/category-([0-9]+)-b([0-9]+)(.*)\.html$" /category.php?id=$1&brand=$2 last;
        rewrite "^/category-([0-9]+)(.*)\.html$" /category.php?id=$1 last;
        rewrite "^/goods-([0-9]+)(.*)\.html" /goods.php?id=$1 last;
        rewrite "^/article_cat-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /article_cat.php?id=$1&page=$2&sort=$3&order=$4 last;
        rewrite "^/article_cat-([0-9]+)-([0-9]+)(.*)\.html$" /article_cat.php?id=$1&page=$2 last;
        rewrite "^/article_cat-([0-9]+)(.*)\.html$" /article_cat.php?id=$1 last;
        rewrite "^/article-([0-9]+)(.*)\.html$" /article.php?id=$1 last;
        rewrite "^/brand-([0-9]+)-c([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)\.html" /brand.php?id=$1&cat=$2&page=$3&sort=$4&order=$5 last;
        rewrite "^/brand-([0-9]+)-c([0-9]+)-([0-9]+)(.*)\.html" /brand.php?id=$1&cat=$2&page=$3 last;
        rewrite "^/brand-([0-9]+)-c([0-9]+)(.*)\.html" /brand.php?id=$1&cat=$2 last;
        rewrite "^/brand-([0-9]+)(.*)\.html" /brand.php?id=$1 last;
        rewrite "^/tag-(.*)\.html" /search.php?keywords=$1 last;
        rewrite "^/snatch-([0-9]+)\.html$" /snatch.php?id=$1 last;
        rewrite "^/group_buy-([0-9]+)\.html$" /group_buy.php?act=view&id=$1 last;
        rewrite "^/auction-([0-9]+)\.html$" /auction.php?act=view&id=$1 last;
        rewrite "^/exchange-id([0-9]+)(.*)\.html$" /exchange.php?id=$1&act=view last;
        rewrite "^/exchange-([0-9]+)-min([0-9]+)-max([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /exchange.php?cat_id=$1&integral_min=$2&integral_max=$3&page=$4&sort=$5&order=$6 last;
        rewrite "^/exchange-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /exchange.php?cat_id=$1&page=$2&sort=$3&order=$4 last;
        rewrite "^/exchange-([0-9]+)-([0-9]+)(.*)\.html$" /exchange.php?cat_id=$1&page=$2 last;
        rewrite "^/exchange-([0-9]+)(.*)\.html$" /exchange.php?cat_id=$1 last;
    }

    if (!-e $request_filename) {
        return 404;
    }
}

lnmp自带的规则如下(我使用无效):

if (!-e $request_filename)
{
rewrite "^/index\.html" /index.php last;
rewrite "^/category$" /index.php last;
rewrite "^/feed-c([0-9]+)\.xml$” /feed.php?cat=$1 last;
rewrite “^/feed-b([0-9]+)\.xml$” /feed.php?brand=$1 last;
rewrite “^/feed\.xml$” /feed.php last;
rewrite “^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5&page=$6&sort=$7&order=$8 last;
rewrite “^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)(.*)\.html$” /category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5 last;
rewrite “^/category-([0-9]+)-b([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /category.php?id=$1&brand=$2&page=$3&sort=$4&order=$5 last;
rewrite “^/category-([0-9]+)-b([0-9]+)-([0-9]+)(.*)\.html$” /category.php?id=$1&brand=$2&page=$3 last;
rewrite “^/category-([0-9]+)-b([0-9]+)(.*)\.html$” /category.php?id=$1&brand=$2 last;
rewrite “^/category-([0-9]+)(.*)\.html$” /category.php?id=$1 last;
rewrite “^/goods-([0-9]+)(.*)\.html” /goods.php?id=$1 last;
rewrite “^/article_cat-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /article_cat.php?id=$1&page=$2&sort=$3&order=$4 last;
rewrite “^/article_cat-([0-9]+)-([0-9]+)(.*)\.html$” /article_cat.php?id=$1&page=$2 last;
rewrite “^/article_cat-([0-9]+)(.*)\.html$” /article_cat.php?id=$1 last;
rewrite “^/article-([0-9]+)(.*)\.html$” /article.php?id=$1 last;
rewrite “^/brand-([0-9]+)-c([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)\.html” /brand.php?id=$1&cat=$2&page=$3&sort=$4&order=$5 last;
rewrite “^/brand-([0-9]+)-c([0-9]+)-([0-9]+)(.*)\.html” /brand.php?id=$1&cat=$2&page=$3 last;
rewrite “^/brand-([0-9]+)-c([0-9]+)(.*)\.html” /brand.php?id=$1&cat=$2 last;
rewrite “^/brand-([0-9]+)(.*)\.html” /brand.php?id=$1 last;
rewrite “^/tag-(.*)\.html” /search.php?keywords=$1 last;
rewrite “^/snatch-([0-9]+)\.html$” /snatch.php?id=$1 last;
rewrite “^/group_buy-([0-9]+)\.html$” /group_buy.php?act=view&id=$1 last;
rewrite “^/auction-([0-9]+)\.html$” /auction.php?act=view&id=$1 last;
rewrite “^/exchange-id([0-9]+)(.*)\.html$” /exchange.php?id=$1&act=view last;
rewrite “^/exchange-([0-9]+)-min([0-9]+)-max([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /exchange.php?cat_id=$1&integral_min=$2&integral_max=$3&page=$4&sort=$5&order=$6 last;
rewrite ^/exchange-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /exchange.php?cat_id=$1&page=$2&sort=$3&order=$4 last;
rewrite “^/exchange-([0-9]+)-([0-9]+)(.*)\.html$” /exchange.php?cat_id=$1&page=$2 last;
rewrite “^/exchange-([0-9]+)(.*)\.html$” /exchange.php?cat_id=$1 last;
}

ecshop增加已售数量和评论数量很简单,步骤如下:

1.在ecshop程序goods.php页面最下面加入这两个函数

function get_buy_sum($goods_id)
{
    $sql = 'SELECT IFNULL(SUM(g.goods_number), 0) ' .
        'FROM ' . $GLOBALS['ecs']->table('order_info') . ' AS o, ' .
            $GLOBALS['ecs']->table('order_goods') . ' AS g ' .
        "WHERE o.order_id = g.order_id " .
        "AND o.order_status = '" . OS_CONFIRMED . "' " .
        "AND o.shipping_status " . db_create_in(array(SS_SHIPPED, SS_RECEIVED)) .
        " AND o.pay_status " . db_create_in(array(PS_PAYED, PS_PAYING)) .
        " AND g.goods_id = '$goods_id'";
    return $GLOBALS['db']->getOne($sql);
}

function get_comment_num($goods_id)  {
     $sql= "select count(*)  from ".$GLOBALS['ecs']->table('comment')." where id_value='".$goods_id."'  AND status = 1";
     return $GLOBALS['db']->getOne($sql);
}

2.在ecshop程序goods.php中加入

在代码:

$smarty->display('goods.dwt', $cache_id);

的前面,加入如下代码:

$smarty->assign('buy_num',get_buy_sum($goods_id));
$smarty->assign('comment_num',get_comment_num($goods_id));

3.ecshop中goods.dwt模板中加入如下代码:

<!-- {if $buy_num} 已出售量-->
<li class="clearfix">
<dd>
<strong>累计售出:</strong>{$buy_num}
</dd>
</li>
<!--{/if}-->
<!-- {if $comment_num} 评论数量-->
<li class="clearfix">
<dd>
<strong>评论数量:</strong><a href="#comment">{$comment_num}</a>
</dd>
</li>
<!--{/if}-->

ECshop与jQuery冲突的问题由来已久,解决方法大多繁琐,且在一些小地方会出错,如产品比较功能等,本文中的方法结合了网上最新公开文章与本站实际开发过程中的经验,基本上可完美解决ECshop与jQuery的冲突,经测试,兼容ECshop原有所有的功能,包括产品比较功能,而且修改步骤简单明了:

1、修改文件:/js/transport.js
在文件最底部增加代码:

if (Object.prototype.toJSONString) {
	var oldToJSONString = Object.toJSONString;
	Object.prototype.toJSONString = function() {
		if (arguments.length > 0) {
			return false;
		} else {
			return oldToJSONString.apply(this, arguments);
		}
	}
}

2、修改文件:/js/compare.js
查找代码:

this.timer = window.setInterval(this.relocation.bind(this), 50);

修改为:

this.timer = window.setInterval(this.bind(this.relocation,this), 50);

查找代码:

lastScrollY : 0

在代码上面一行增加代码:

bind: function(obj1, obj2) {
	return function() {
		obj1.apply(obj2, arguments);
	}
},

3、在以下模板文件中,找到嵌入global.js文件的代码,删除嵌入global.js
brand.dwt
brand_list.dwt
category.dwt
exchange_list.dwt
search.dwt

4、下载最新版的jquery库文件到模板目录中,如:
/themes/temlatename/images/js/jquery.1.5.2.js

如果你的模板中没有对应目录,则新建目录拷入jquery文件即可

5、修改文件:/themes/temlatename/library/page_header.lbi

在顶部加入代码:

<script src="images/js/jquery.1.5.2.min.js" type="text/javascript"></script>
<script type="text/javascript">var $$=jQuery.noConflict();</script>

注意,以后调用JQUERY对象要用两个美元符$$,不要用一个$,因为一个$与ECshop原有的函数同名有兼容问题。

6. 到此应该就能解决冲突了

另外一种方法:

ecshop模板兼容jquery问题, 一直是困扰开发人员的棘手问题,主要原因是 transprot.js  文件中, 大概 580行到590行之间,这个句用于格式化json,他重写了object的结构,导致于js框架冲突。冲突的原因是jquery给一个object增加了很多元素,那么在Object.prototype.toJSONString = function () 这个函数中 for (k in this) 语句中进行了无数次的循环,导致网页很卡,并且在IE中会报错。

ECSHOP开发中心为您提供一个简单的解决transport.js 和 jquery 方法:

在 page_header.lbi 库文件中加入如下代码,注意操作顺序:

1.先导入transport.js  文件 {insert_scripts files='transport.js,utils.js'}

2.然后导入您网站使用的jquery文件
<script language="javascript" src="您的jquery存放路径"></script>

3.加入代码

<script type="text/javascript">
$(function() {
window.__Object_toJSONString = Object.prototype.toJSONString;
delete Object.prototype.toJSONString;
});
</script>

ECSHOP的分类列表页有一个“商品筛选”功能,可以对不同品牌不同价格不同属性的商品进行筛选过滤。但是这个筛选区有一个很蹩脚的地方,那就是品牌项或属性值的排序是杂乱无章的,不能按照站长的意志自定义排序。为了让这个“商品筛选”的排序更人性化,本站开发了这个插件供大家使用。

下面就来具体说一下是用这个插件都能做些什么:

1)、
不仅可以自定义每个属性项中属性值的排序,
还可以自定义品牌列表的顺序,
还有价格范围的自定义排序。
2)、
后台管理超级简单,
只需要在分类编辑页面输入一组属性值即可,
按照你想要的先后顺序输入即可,例如“颜色:白色,黑色,金色,灰色”。
后台按什么顺序输入的,前台就按什么顺序排列,如下图所示:

没有此排序功能之前
no_paixu
有了排序功能之后
yes_paixu

教程开始:

一、后台文件的修改

1、首先在后台模板文件中找到category_info.htm
找到代码:大概位置:121行——122行

<tr>
<td class="label"><a href="javascript:showNotice('noticeGrade');" title="{$lang.form_notice}">

在代码:<tr>的上面添加如下的代码:

<tr>
<td class="label">属性排序:</td>
<td>
<textarea name='shuxing_paixu' rows="6" cols="70">{$cat_info.shuxing_paixu}</textarea>
</td>
</tr>

2、在数据库ecs_category表中加入字段:shuxing_paixu,如下图:
shuxing_paixu_mysql

alter table `ecs_goods` ADD `shuxing_paixu` varchar(500) NOT NULL,;

3、在后台category.php中分别对加入和修改的地方if ($_REQUEST['act'] == 'insert')和if ($_REQUEST['act'] == 'edit') 里面加入
1).找到代码:

$cat['cat_recommend'] = !empty($_POST['cat_recommend']) ? $_POST['cat_recommend'] : array();

在此行代码的后面添加代码:

//ECSHOP分类页筛选属性自定义排序插件新增代码
$cat['shuxing_paixu'] = trim($_POST['shuxing_paixu']);

2).找到代码:

$cat['cat_recommend'] = !empty($_POST['cat_recommend']) ? $_POST['cat_recommend'] : array();

在此行代码的后面添加代码:

//ECSHOP分类页筛选属性自定义排序插件新增代码
$cat['shuxing_paixu'] = trim($_POST['shuxing_paixu']);

就是分别对后台增加插入和修改这两个字段的功能,这个简单就不具体细说

4、如下图往数据库加入如下数据:
155729ch791cocq9do139d

二、前台文件的修改

1、找到前台category.php

1).找到代码:大概位置:309行
$smarty->assign('filter_attr_list', $all_attr_list);

在这行的代码的上面添加以下的代码。

//ECSHOP分类页筛选属性自定义排序插件新增代码 By:飘云	2013年11月24日17:05:17  代码开始
//print_r($all_attr_list);
$shuxing_paixu =  trim($cat['shuxing_paixu']);
//echo "$shuxing_paixu";
$shuxing_paixuArr = array();
$temparr =  preg_split ("/\r\n/",$shuxing_paixu);
//print_r($temparr);
foreach($temparr as $k=>$v){
	$temparrList = explode(":",$v);
	$arr_a[$k]['filter_attr_name'] =  trim($temparrList[0]);
	$arr_a[$k]['attr_list'] =  explode(",", trim($temparrList[1]));
}
//print_r($arr_a);
//print_r($arr_a);
//print_r($all_attr_list);
foreach($all_attr_list as $key=>$val){
foreach($arr_a as $k=>$v){
	if(trim($val['filter_attr_name']) == trim($v['filter_attr_name'])){
		$temp_b = $all_attr_list[$k]['attr_list'];//无序数组
		$temp_c  = $v['attr_list'];//自定义排序数组

//取消自定义排序数组的左右空白 一便于比较
foreach($temp_c as $key2 => $val2){
	$temp_c[$key2] =  trim($val2);
}

//去掉自定义排序数组中不需要的字段
$temp_d = array();
foreach($temp_b as $key1 => $val1){
	$temp_d[$key1] = $val1['attr_value'];
}
//print_r($temp_b);
//print_r(array_intersect($temp_c,$temp_d));
$temp_e = array_intersect($temp_c,$temp_d);//自定义排序数组交集 去掉了不需要的字段

$newattrlist = array();
	$i = 1;
		foreach($temp_e as  $val4){
		foreach($temp_b as $key3 => $val3){
			$newattrlist[0] = $temp_b[0];
			if($val4  == trim($val3['attr_value'])){
				$newattrlist[$i] = $temp_b[$key3];
				$i++;
		}
	}
}
unset($all_attr_list[$key]['attr_list']);
$all_attr_list[$key]['attr_list'] = $newattrlist;
//print_r($all_attr_list);
			}
		}
}
//ECSHOP分类页筛选属性自定义排序插件新增代码

2).找到代码:大概位置:502行——513行之间

/**
 * 获得分类的信息
 *
 * @param   integer $cat_id
 *
 * @return  void
 */
function get_cat_info($cat_id)
{
		return $GLOBALS['db']->getRow('SELECT cat_name, keywords, cat_desc, style, grade, filter_attr, parent_id FROM ' . $GLOBALS['ecs']->table('category') .
				" WHERE cat_id = '$cat_id'");
}

在代码parent_id后面添加:,shuxing_paixu ,修改为如下的代码:

/**
 * 获得分类的信息
 *
 * @param   integer $cat_id
 *
 * @return  void
 */
function get_cat_info($cat_id)
{
		return $GLOBALS['db']->getRow('SELECT cat_name, keywords, cat_desc, style, grade, filter_attr, parent_id,shuxing_paixu FROM ' . $GLOBALS['ecs']->table('category') .
				" WHERE cat_id = '$cat_id'");
}

三、后台怎么填写的顺序,前台就怎么显示!

170442hlrpo5jp2oh8gqgp

1704425y3nuqjp3nj3t6tq

经过以上步骤,基本大工搞成!代码虽然写的很乱,但是基本功能是实现了!

写在结尾的话:

在这里十分感谢来自:自学IT网的:sunlonghb 也就是此教程的原创作者的帮助,我是精简了他之前的代码,他之前发布的代码还有品牌的排序,但是我使用了之后连接的地址有问题呢,所以联系到了原作者,在他的帮助下解决了属性筛选的排序问题呢!很热心的一个朋友!

商品列表页面的按上架时间、价格、更新时间是默认的,现在需要添加的是按销量排行,但是在商品表里面没有销量的字段,这样的话,必须二次开发才可以解决。
网上搜索了老半天,没有解决问题,研究了半天,终于解决了,现在分享给大家。

【第一步】在表“ecs_goods”添加字段:salesnum(注:自定义字段名)

方法:

alter table `ecs_goods` ADD `salesnum` int(11) NOT NULL DEFAULT '0',;

 【第二步】打开根目录下文件:flow.php

找到以下代码:

    /* 插入订单商品 */
    $sql = "INSERT INTO " . $ecs->table('order_goods') . "( " .
                "order_id, goods_id, goods_name, goods_sn, product_id, goods_number, market_price, ".
                "goods_price, goods_attr, is_real, extension_code, parent_id, is_gift, goods_attr_id) ".
            " SELECT '$new_order_id', goods_id, goods_name, goods_sn, product_id, goods_number, market_price, ".
                "goods_price, goods_attr, is_real, extension_code, parent_id, is_gift, goods_attr_id".
            " FROM " .$ecs->table('cart') .
            " WHERE session_id = '".SESS_ID."' AND rec_type = '$flow_type'";
    $db->query($sql);

在这段代码的下面,添加如下代码:

/* 插入商品表的salesnum 字段,统计销量排行 代码开始*/
$sql = "update " .$GLOBALS['ecs']->table('goods') . " AS a, ".$GLOBALS['ecs']->table('cart') . " AS b ".
		"set a.salesnum= a.salesnum + b.goods_number".
				" WHERE a.goods_id=b.goods_id AND b.session_id = '".SESS_ID."' AND b.rec_type = '$flow_type'";
$db->query($sql);
/* 插入商品表的salesnum 字段,统计销量排行 代码结束*/

【第三步】打开文件:default\library\goods_list.lbi,找到下面的代码:

<a href="{$script_name}.php?category={$category}&display={$pager.display}&brand={$brand_id}&price_min={$price_min}&price_max={$price_max}&filter_attr={$filter_attr}&page={$pager.page}&sort=last_update&order=<!-- {if $pager.sort == 'last_update' && $pager.order == 'DESC'} -->ASC<!-- {else} -->DESC<!-- {/if} -->#goods_list"><img src="images/last_update_<!-- {if $pager.sort == 'last_update'} -->{$pager.order}<!-- {else} -->default<!-- {/if} -->.gif" alt="{$lang.sort.last_update}"></a>

在上面那段代码的下面添加:

<a href="{$script_name}.php?category={$category}&display={$pager.display}&brand={$brand_id}&price_min={$price_min}&price_max={$price_max}&filter_attr={$filter_attr}&page={$pager.page}&sort=salesnum&order=<!-- {if $pager.sort == 'salesnum' && $pager.order == 'DESC'} -->ASC<!-- {else} -->DESC<!-- {/if} -->#goods_list"><img src="images/shop_salesnum_<!-- {if $pager.sort == 'salesnum'} -->{$pager.order}<!-- {else} -->default<!-- {/if} -->.gif" alt="按商品销量排行"></a>

[红色区是图片的名称,对应做上该命名的图片即可][蓝色区是第一步所添加的字段名称]

PS:如果把销量的点击排行分开处理,可以按照下面的方法添加代码:

<!-- {if $pager.sort == 'salesnum' && $pager.order == 'DESC'} -->
<a href="/category.php?category=1&display=grid&brand=0&price_min=0&price_max=0&filter_attr=0&page=1&sort=salesnum&order=DESC#goods_list" title="销量从高到低排序"><img src="images/shop_sales_DESC.jpg" alt="销量从高到低排序"></a><!-- {else} -->
<a href="/category.php?category=1&display=grid&brand=0&price_min=0&price_max=0&filter_attr=0&page=1&sort=salesnum&order=DESC#goods_list" title="销量从高到低排序"><img src="images/shop_sales_DESC_default.jpg" alt="销量从高到低排序"></a><!-- {/if} -->
<!-- {if $pager.sort == 'salesnum' && $pager.order == 'ASC'} -->
<a href="/category.php?category=1&display=grid&brand=0&price_min=0&price_max=0&filter_attr=0&page=1&sort=salesnum&order=ASC#goods_list" title="销量从低到高排序"><img src="images/shop_sales_ASC.jpg" alt="销量从低到高排序"></a><!-- {else} -->
<a href="/category.php?category=1&display=grid&brand=0&price_min=0&price_max=0&filter_attr=0&page=1&sort=salesnum&order=ASC#goods_list" title="销量从低到高排序"><img src="images/shop_sales_DESC_default.jpg" alt="销量从低到高排序"></a><!-- {/if} -->

【第四步】打开文件:category.php,找到如下代码:

$sort = (isset($_REQUEST['sort']) && in_array(trim(strtolower($_REQUEST['sort'])), array('goods_id', 'shop_price', 'last_update'))) ? trim($_REQUEST['sort']) : $default_sort_order_type;

修改为:

$sort = (isset($_REQUEST['sort']) && in_array(trim(strtolower($_REQUEST['sort'])), array('goods_id', 'shop_price', 'last_update', 'salesnum'))) ? trim($_REQUEST['sort']) : $default_sort_order_type;

也就是在代码: 'last_update' 的后面添加:, 'salesnum'

如果要修改默认的排序显示,找到以下的代码:

/* 排序、显示方式以及类型 */
$default_display_type = $_CFG['show_order_type'] == '0' ? 'list' : ($_CFG['show_order_type'] == '1' ? 'grid' : 'text');
$default_sort_order_method = $_CFG['sort_order_method'] == '0' ? 'DESC' : 'ASC';
$default_sort_order_type = $_CFG['sort_order_type'] == '0' ? 'goods_id' : ($_CFG['sort_order_type'] == '1' ? 'shop_price' : 'last_update');

修改其中的这一句代码:

$default_sort_order_type = $_CFG['sort_order_type'] == '0' ? 'goods_id' : ($_CFG['sort_order_type'] == '1' ? 'shop_price' : 'last_update');

修改为:

$default_sort_order_type = $_CFG['sort_order_type'] == '0' ? 'salesnum' : ($_CFG['sort_order_type'] == '1' ? 'shop_price' : 'last_update');
方法一:如果按照上面这个方法修改,还要到数据库操作,后台设置也要一致!

数据库操作方法:
找到表名:ec_shop_config
字段名:code
值为:sort_order_type
如下图所示,添加一个数字3在后面!
sort_order_type

然后修改语言包:
1.找到文件:languages\zh_cn\admin\shop_config.php 大概位置:293行到295行,代码如下:

$_LANG['cfg_range']['sort_order_type']['0'] = '按上架时间';
$_LANG['cfg_range']['sort_order_type']['1'] = '按商品价格';
$_LANG['cfg_range']['sort_order_type']['2'] = '按最后更新时间';

2.修改为:

$_LANG['cfg_range']['sort_order_type']['0'] = '按商品销量';
$_LANG['cfg_range']['sort_order_type']['1'] = '按商品价格';
$_LANG['cfg_range']['sort_order_type']['2'] = '按上架时间';
$_LANG['cfg_range']['sort_order_type']['3'] = '按最后更新时间';

然后在后台——商店设置——显示设置下面可以看到如下图所示:
sort_order_type_admin

方法二:
/* 排序、显示方式以及类型 */
$default_display_type = $_CFG['show_order_type'] == '0' ? 'list' : ($_CFG['show_order_type'] == '1' ? 'grid' : 'text');
$default_sort_order_method = $_CFG['sort_order_method'] == '1' ? 'DESC' : 'ASC';
$default_sort_order_type = 'salesnum';

OK,完工。到这里就修改完毕了!

最近一直做ECSHOP商城的开发,常常会发现一些莫名奇妙的错误,ecshop本身有一种ajax的,好多都是因为ecshop本身的JS与外部冲突导致的,网上这样的情况也不少,看了很多,真正可以用的少之又少,所以结合自己的开发总结了一些:
本次的情况是:我在应用懒人加载效果jquery.lazyload.js   jquery-1.6.2.min.js,所以把transport.js等去掉了,于是邮件订阅就失效了。
为了不利用transport.js 只能另想办法了。
在网上搜了一下,找好久才找到一篇靠谱的,与大家分享一下:

/*邮件订阅*/
$(".bnt_blue").click(function() {
  var email = $("#user_email").val();
  if (check_email(email)) {
    $.ajax({
      type: "get",
      url: "user.php?act=email_list",
      data: 'job=add&email=' + email,
      success: function(data) {
        alert(data);
      }
    });
  }
});
/*取消订阅*/
$(".bnt_bonus").click(function() {
  var email = $("#user_email").val();
  if (check_email(email)) {
    $.ajax({
      type: "get",
      url: "user.php?act=email_list",
      data: 'job=del&email=' + email,
      success: function(data) {
        alert(data);
      }
    });
  }
});

function check_email(str) {
  res = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
  var re = new RegExp(res);
  if (str.match(re)) {
    return true;
  } else {
    alert("请输入正确的E-mail地址");
    return false;
  }
}

结合以上代码重新修改了一下,也贴出来了:
email_list.lbi

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<div class="mod1 mod2 blank email1">
<span class="lt"></span><span class="lb"></span><span class="rt"></span><span class="rb"></span>

<div class="mod2con" style=" background:url(images/68ec_emailbg2.jpg) no-repeat right center;" >
<h1 style="line-height:35px; text-indent:3px; font-weight:normal">Email订阅最新特惠信息:</h1>
<input type="text" id="user_email" class="InputBorder" style="margin-bottom:9px;" size="25"/><br />
<input type="button" value="{$lang.email_list_ok}" id="bnt_blue" class="bnt_number2"  />
<input type="button"  value="{$lang.email_list_cancel}" id="bnt_bonus" class="bnt_number2"  />
</div>
</div>
<script type="text/javascript">
/*var email = document.getElementById('user_email');
function add_email_list()
{
  if (check_email())
  {
    Ajax.call('user.php?act=email_list&job=add&email=' + email.value, '', rep_add_email_list, 'GET', 'TEXT');
  }
}
function rep_add_email_list(text)
{
  alert(text);
}
function cancel_email_list()
{
  if (check_email())
  {
    Ajax.call('user.php?act=email_list&job=del&email=' + email.value, '', rep_cancel_email_list, 'GET', 'TEXT');
  }
}
function rep_cancel_email_list(text)
{
  alert(text);
}
function check_email()
{
  if (Utils.isEmail(email.value))
  {
    return true;
  }
  else
  {
    alert('{$lang.email_invalid}');
    return false;
  }
}*/

/*邮件订阅*/
$(".bnt_blue").click(function() {
  var email = $("#user_email").val();
  if (check_email(email)) {
    $.ajax({
      type: "get",
      url: "user.php?act=email_list",
      data: 'job=add&email=' + email,
      success: function(data) {
        alert(data);
      }
    });
  }
});
/*取消订阅*/
$(".bnt_bonus").click(function() {
  var email = $("#user_email").val();
  if (check_email(email)) {
    $.ajax({
      type: "get",
      url: "user.php?act=email_list",
      data: 'job=del&email=' + email,
      success: function(data) {
        alert(data);
      }
    });
  }
});

function check_email(str) {
  res = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
  var re = new RegExp(res);
  if (str.match(re)) {
    return true;
  } else {
    alert("请输入正确的E-mail地址");
    return false;
  }
}
</script>
经过上面的方法修改之后,邮件订阅时候,页面你是没有提示的,直接进邮箱收取确认邮件!

ECSHOP开启站点访问统计后,随着时间的推移,访问记录表stats越来越大,直到空间爆满,网站瘫痪。ECSHOP的计划任务“浏览日志删除”需开 启“是否开启命令行调用计划任务”,不少朋友使用国内虚拟主机,虚拟主机对函数限制过多,计划任务形同摆设。本文讲解如何按系统设定自动删除访问统计,减少stats表的负载。
20131031152143_01

一、修改数据库,加入删除访问统计的时间配置的字段值”ipdel”

UPDATE ecs_shop_config SET sort_order = 2 WHERE code = "visit_stats";
INSERT INTO ecs_shop_config (id, parent_id, code, type, store_range, store_dir, value, sort_order) VALUES
(247, 2, 'ipdel', 'select', '0,1,2,3,4,5', '', '0', 2);

二、/languages/zh_cn/admin/shop_config.php中添加

$_LANG['cfg_name']['ipdel']= '自动删除访问统计';
$_LANG['cfg_range']['ipdel']['0'] = '永不删除';
$_LANG['cfg_range']['ipdel']['1'] = '7天前';
$_LANG['cfg_range']['ipdel']['2'] = '30天前';
$_LANG['cfg_range']['ipdel']['3'] = '90天前';
$_LANG['cfg_range']['ipdel']['4'] = '180天前';
$_LANG['cfg_range']['ipdel']['5'] = '360天前';
$_LANG['cfg_desc']['ipdel'] = '由前台用户触发,“站点访问统计”设为开启时才可使用此功能。';

三、/includes/lib_main.php中访问统计信息函数function visit_stats()结束前添加

/* 按系统设定删除访问统计 */
$ipdel_day = 0;
switch ($GLOBALS['_CFG']['ipdel'])
{
case '0': // 永不删除
$ipdel_day = 0;
break;
case '1': // 7天前
$ipdel_day = 7;
break;
case '2': // 30天前
$ipdel_day = 30;
break;
case '3': // 90天前
$ipdel_day = 90;
break;
case '4': // 180天前
$ipdel_day = 180;
break;
case '5': // 360天前
$ipdel_day = 360;
break;
}
if($ipdel_day)
{
$deltime = gmtime() - $ipdel_day * 3600 * 24;
$ipdel_sql = "DELETE FROM " . $ecs->table('stats') .
"WHERE access_time < '$deltime'";
$db->query($ipdel_sql); 
}
else
{
return;
}

取消这个插件,数据库写法是这样:

delete from ecs_shop_config where code="ipdel";

"ecs_"是表前缀。

下面是两种解决ecs_stats数据库表大的办法:
一、直接关闭:网站后台--系统设置--商店设置--基本设置--站点访问统计:关
二、备份前删除表记录:

delete from ecs_stats;

找到文件:lib_common.php
找到代码:650-680行

/**
* 获得某个分类下
*
* @access public
* @param int $cat
* @return array
*/
function get_brands($cat = 0, $app = 'brand')
{
global $page_libs;
$template = basename(PHP_SELF);
$template = substr($template, 0, strrpos($template, '.'));
include_once(ROOT_PATH . ADMIN_PATH . '/includes/lib_template.php');
static $static_page_libs = null;
if ($static_page_libs == null)
{
$static_page_libs = $page_libs;
}
$children = ($cat > 0) ? ' AND ' . get_children($cat) : '';
$sql = "SELECT b.brand_id, b.brand_name, b.brand_logo, b.brand_desc, COUNT(*) AS goods_num, IF(b.brand_logo > '', '1', '0') AS tag ".
"FROM " . $GLOBALS['ecs']->table('brand') . "AS b, ".
$GLOBALS['ecs']->table('goods') . " AS g ".
"WHERE g.brand_id = b.brand_id $children AND is_show = 1 " .
" AND g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 ".
"GROUP BY b.brand_id HAVING goods_num > 0 ORDER BY tag DESC, b.sort_order ASC";
if (isset($static_page_libs[$template]['/library/brands.lbi']))
{
$num = get_library_number("brands");
$sql .= " LIMIT $num ";

修改代码结束处的:$sql .= " LIMIT $num "; 中的$num 为数字就可以了!

ecshop商品分类里面显示的内容,默认的模板里面肯定是不够的。我们在ecshop分类页面里面,如果需要设置不同的ecshop商品分类,显示不同的模板的话,那么就非常复杂了。我们必须通过不同的分类ID来取得不同模板。
我们可以通过分类ID来判断.比如分类为1的,调用cat1.dwt。分类为2的,调用cat2.dwt,我们在category.php里面就可以这样判断.

if($cat_id == '1'){
$smarty->display('cat1.dwt', $cache_id);
}else
if($cat_id == '2'){
$smarty->display('cat2.dwt', $cache_id);
}else{
$smarty->display('category.dwt', $cache_id);
}

这里所说的不同商品,是指所属类别不同。
这里讲一个比较简单的实现方法,

我们假设, 有4个分类,cat_id 分别为 1 ,2, 3, 4
首先我们要制作四个对应的模板文件 goods1.dwt ,goods2.dwt, goods3.dwt, goods4.dwt
然后 我们打开开 goods.php文件,找到:

$smarty->display('goods.dwt', $cache_id);

将它修改为:

switch ($goods['cat_id']){
case 1:
$smarty->display('goods1.dwt', $cache_id);
break; 
case 2:
$smarty->display('goods2.dwt', $cache_id);
break; 
case 3:
$smarty->display('goods3.dwt', $cache_id);
break; 
case 4:
$smarty->display('goods4.dwt', $cache_id);
break; 
default:
$smarty->display('goods.dwt', $cache_id);
break; 
}

这样就可以了。

ecshop是一套非常好的网店系统,fckeditor也是个不错的html编辑器,常用于各种cms及商城系统实现在纺编辑html代码,然后ecshop使用的fckeditor在上传图片和其它文件时是没有按目录存放的,我们很多人都习惯上传的文件按年和月这样的日期存放这样不至于上传文件夹存放的内容太多太杂,影响系统的稳定性,同时上传的文件也没有进行重命名,当我们上传中文文件名的文件时有些时候会出错,下面我们就来实现:
一、ecshop的fckeditor上传文件时按年和日存放,假如我们是2012年3月存放的,系统会自动建一个文件夹201207,方法
打开includes/fckeditor/editor/filemanager/connectors/php/config.php,找到:
修改前的代码:
// Path to user files relative to the document root.
$Config['UserFilesPath'] = $root_path . IMAGE_DIR . '/upload/';

// Fill the following value it you prefer to specify the absolute path for the
// user files directory. Useful if you are using a virtual directory, symbolic
// link or alias. Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
// Attention: The above 'UserFilesPath' must point to the same directory.
$Config['UserFilesAbsolutePath'] = ROOT_PATH . IMAGE_DIR . '/upload/' ;
修改后的代码:
// Path to user files relative to the document root.
$Config['UserFilesPath'] = $root_path . IMAGE_DIR . '/upload/'.date('Ym').'/';

// Fill the following value it you prefer to specify the absolute path for the
// user files directory. Useful if you are using a virtual directory, symbolic
// link or alias. Examples: 'C:\\MySite\\userfiles\\' or '/root/mysite/userfiles/'.
// Attention: The above 'UserFilesPath' must point to the same directory.
$Config['UserFilesAbsolutePath'] = ROOT_PATH . IMAGE_DIR . '/upload/'.date('Ym').'/';
然后保存,非常简单,仅是在这两行后面增加了  .date('Ym').'/'
二、ecshop的fckeditor上传文件时自动重命名,方法:
找到文件:includes/fckeditor/editor/filemanager/connectors/php/io.php,找到
修改前的代码:
// Do a cleanup of the file name to avoid possible problems
function SanitizeFileName( $sNewFileName )
{
    global $Config ;

    $sNewFileName = stripslashes( $sNewFileName ) ;

    // Replace dots in the name with underscores (only one dot can be there... security issue).
    if ( $Config['ForceSingleExtension'] )
        $sNewFileName = preg_replace( '/\\.(?![^.]*$)/', '_', $sNewFileName ) ;

    // Remove \ / | : ? * " < >
    $sNewFileName = preg_replace( '/\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[[:cntrl:]]/', '_', $sNewFileName ) ;

    return $sNewFileName ;
}
修改后的代码:
// Do a cleanup of the file name to avoid possible problems
function SanitizeFileName( $sNewFileName )
{
    global $Config ;

    $sNewFileName = stripslashes( $sNewFileName ) ;

    // Replace dots in the name with underscores (only one dot can be there... security issue).
    if ( $Config['ForceSingleExtension'] )
        $sNewFileName = preg_replace( '/\\.(?![^.]*$)/', '_', $sNewFileName ) ;

    // Remove \ / | : ? * " < >
    //$sNewFileName = preg_replace( '/\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[[:cntrl:]]/', '_', $sNewFileName ) ;
    $sExtension = substr( $sNewFileName, (strrpos($sNewFileName,'.') + 1 ) ) ;
    $sNewFileName = date('YmdHis').rand(0,999).'.'.$sExtension;
    return $sNewFileName ;
}
就是把
$sNewFileName = preg_replace( '/\\|\/|\||\:|\?|\*|"|<|>|[[:cntrl:]]/', '_', $sNewFileName ) ;

注释掉,新增加:

$sExtension = substr( $sNewFileName, (strrpos($sNewFileName,'.') + 1 ) ) ;
$sNewFileName = date('YmdHis').rand(0,999).'.'.$sExtension;
保存后,在ecshop的后台测试就会发现我们上传的图片按年月分目录保存并自动重命名了!
经测试ecshop V2.7.3 20120411版本还未失效的!

程序默认生成JPG格式缩略图质量不太好,通常比较模糊,尤其是再添加水印的话,感觉图像显示效果更差。
这跟图片处理函数有关,默认生成JPG图片质量是75(也有说60,65),我们可通过改变函数参数提高图片显示效果

以ECShop2.7.3为例(其他版本类同),通常需要两步操作
首先,最好让你的原始图片与后台设置的商品图片比例保持一致且原始图片质量较好
其次,如果你需要水印的话,最好是提前处理好而不是让网站程序给图片加水印20131030091059_01
这里的缩略图100:100比例为1:1;商品图片230:230,比例为1:1
所以保证你的原始图片比例也为1:1最好
20131030091059_02

一、改图片处理函数

打开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也可以改,改不改看你的需要吧

二、后台批处理图片

20131030091100_03

三、相关说明

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.13
20131030091100_04

这个版本GD库文件对:JPEG,GIF,PNG图片都支持

如果证实是因为1.0的原因话,那就没有办法了,因为imagecreatruecolor函数必须要在GD 2.0.1 或更高版本才能执行,按上面所说,得满足:PHP 4 >= 4.0.6, PHP 5 否则叫空间商升级GD库吧!

还有其他办法就是用原图代替,研究过再发吧,嘿嘿,待续……

ECshop 默认的商品自定义属性是一次性输出的,想要单独调用某个属性就需要动动手术了。

第一步:打开 includes\lib_insert.php 文件,在最后面 ?> 前面加入以下代码:注意,在在 ?> 前面。

/*调用商品属性*/
function insert_attr($arr)
{
static $static_res = NULL;
$aid= isset($arr['aid'])?$arr['aid']:0;
$gid= isset($arr['gid'])?$arr['gid']:0;
if($aid==0) return '';
if ($static_res[$aid][$gid] === NULL)
{
if($gid>0)
{
$static_res[$aid][$gid] = $GLOBALS['db']->getOne('select attr_value from ' . $GLOBALS['ecs']->table('goods_attr') . " where attr_id ='$aid' and goods_id='$gid' "); 
}
else
{
$static_res[$aid][$gid] = $GLOBALS['db']->getOne('select attr_name from ' . $GLOBALS['ecs']->table('attribute') . " where attr_id ='$aid' ");
}
}

return $static_res[$aid][$gid];
}

每二步:在模板里调用,支持dwt与lib。
属性名称:{insert name='attr' aid=属性ID}
属性值:{insert name='attr' aid=属性ID gid=$goods_id}

$goods_id 是调用商品编号,也就是ID,不是货号。

一、去掉网页标题 Powered by ECShop

打开includes/lib_main.php 文件
查找:

$page_title = $GLOBALS['_CFG']['shop_title'] . ' - ' . 'Powered by ECShop';

替换为:

$page_title = $GLOBALS['_CFG']['shop_title'];

二、去掉底部乱跑的 Powered by ecshop

打开 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)
{
}
}

删除这段代码。

再打开 library/page_footer.lbi 文件,查找并删除:

{foreach from=$lang.p_y item=pv}{$pv}{/foreach}{$licensed}

三、修改文件代码头部的Generator标记,有2个方法修改:

修改文件:includes/cls_ecshop.php
查找:

define(‘APPNAME’, ‘ECSHOP’);

修改为:

define(‘APPNAME’, ‘自定义的网站代号’);

修改文件:includes/cls_template.php
查找:

/* 在头部加入版本信息 */
$source = preg_replace('/<head>/i', "<head>\r\n<meta name=\"Generator\" content=\"" . APPNAME .' ' . VERSION . "\" />", $source);

注释这段代码!
修改为:

/* 在头部加入版本信息
$source = preg_replace('/<head>/i', "<head>\r\n<meta name=\"Generator\" content=\"" . APPNAME .' ' . VERSION . "\" />", $source); */

四、去掉后台两张 ECSHOP的图片。直接修改掉这两张图片即可:

admin/images/ecshop_logo.gif
admin/images/login.png

五、后台右上角的“关于ECSHOP”

打开admin/templates/top.htm 文件,查找并删除:

<li><a href="index.php?act=about_us" target="main-frame">{$lang.about}</a></li>

六、后台中部 ECSHOP 管理中心, 和底部的版权所有:

打开language/zh_cn/admin/common.php

查找:

$_LANG['cp_home'] = 'ECSHOP 管理中心';
$_LANG['copyright'] = '版权所有 &copy; 2005-2012 上海商派网络科技有限公司,并保留所有权利。';

替换成:

$_LANG['cp_home'] = '后台管理中心';
$_LANG['copyright'] = '管理,就是这么简单!';

七、与官方网站地址通信的地方修改和文件!

打开admin/
查找并删除:

<frameset rows="0, 0" framespacing="0" border="0">
<frame src="http://api.ecshop.com/record.php?mod=login&url={$shop_url}" id="hidd-frame" name="hidd-frame" frameborder="no" scrolling="no">
</frameset>

八、删除后台的“云提醒”

admin/cloud.php
查找:

$api_arr['content']='<li class="cloud_close">'.$message['0'].'&nbsp;&nbsp;&nbsp;&nbsp;'.$_LANG['cloud_no_priv'].'<img onclick="cloud_close( '.$message['1'].')" src="images/no.gif"></li>';

替换成:

$api_arr['content']='';

查找:

$api_arr['content']='<li class="cloud_close">'.$message['0'].'&nbsp;&nbsp;&nbsp;&nbsp;'.$message['2'].'</li>';

替换成

$api_arr['content']='';

3、在MYSQL数据库的数据表:shop_config中查找字段code值为 certi 的记录,其值为:http://service.shopex.cn/openapi/api.php ,修改为一个错误的网址!
如:http://Www.PiaoYun.CC/openapi/api.php

4、修改文件:admin/templates/top.htm
查找:

Ajax.call(‘index.php?is_ajax=1&amp;act=license’,”, start_sendmail_Response, ‘GET’, ‘JSON’);

注释掉。

5、修改文件:admin/templates/menu.htm
查找:

<script type=”text/javascript” language=”JavaScript”src=”http://api.ecshop.com/menu_ext.php?charset={$charset}&amp;lang={$help_lang}”>script>;

注释掉。

6、修改文件:admin/templates/start.htm查找;删除之

7、修改文件:admin/index.php
查找:

$t = new transport;
$api_comment = $t-&gt;request(‘http://api.ecshop.com/checkver.php’, $apiget);
$api_str = $api_comment["body"];
echo $api_str;

全部注释掉