专注ECSHOP第九年
始自2007,服务二千多商户,不断为您增光溢彩

ECSHOP在php5.4,php5.5的错误处理方法

阿牛阅读(1253)

ECSHOP是一个挺不错的程序,由于最初开发早在08年,当时php5.2环境下的,可现在php都飙到5.6,难免会出现一些问题。

按下面方法修改基础即可,测试PHP5.4,PHP5.5测试通过。

(1)includes/cls_templates.php

array_shift() 的参数是引用传递的,5.3以上默认只能传递具体的变量,而不能通过函数返回值 end(&array);

修改方法:

将 $tag_sel = array_shift(explode(‘ ‘, $tag)); 这句话拆开为两句。
$tag_arr = explode(‘ ‘, $tag);
$tag_sel = array_shift($tag_arr);

(2)includes/cls_base.php

修改gd_version函数为:

function gd_version()
//static function gd_version() //部分版本不兼容可换为这个
{ 
include_once(ROOT_PATH . 'includes/cls_image.php'); 
$p = new cls_image();
return $p->gd_version(); 
}

(3)/includes/lib_main.php

查找修改:$ext = end(explode(‘.’, $tmp));


$ext = explode(‘.’,$tmp);
$ext = end($ext);

大功告成。 此仅限于安装程序后的修改。以此类推,提供方法,见招拆招就行了。~

ECSHOP常见二次开发项

阿牛阅读(907)

(1)ECSHOP获取商品的销量

/includes/lib_insert.php,在最下面增加一个函数(注意别加在 “?>”外面 增加:

function insert_sales($arr)
//调用ecshop所有销量总数
{
$db = $GLOBALS['db'];
$ecs = $GLOBALS['ecs'];
$goods_id = $arr['id'];
$sql = "select sum(goods_number) from " . $GLOBALS['ecs']->table('order_goods') . " AS g ,".$GLOBALS['ecs']->table('order_info') . " AS o WHERE o.order_id=g.order_id and g.goods_id = " . $goods_id . " and o.order_status=5 " ;

if (($GLOBALS['db']->getOne($sql)) == ""){
return "0";
}else{
return $GLOBALS['db']->getOne($sql);
}
}

调用:

详细页调用:
已销售:{insert name=’sales’ id=$id}
分类页调用:
已销售:{insert name=’sales’ id=$goods.goods_id}

(2)获取ECSHOP评论总数

打开includesb_insert.php 文件,在最下面增加一个函数(注意别加在 “?>”外面 )

// 调用ecshop评论信息条数  
function insert_commentnum($arr)    
{    
$count=$GLOBALS['db']->getOne('SELECT COUNT(*) FROM '.    $GLOBALS['ecs']->table('comment')."WHERE id_value='$arr[id]'".    "AND comment_type='$arr[type]' AND status = 1 AND parent_id = 0");    
return $count;
}

(3)后台删除商品的同时,删除商品描述图。

打开admin/goods.php 约1685行。

$sql = “SELECT goods_id, goods_name,

增加:goods_desc,

搜索:

if (!empty($goods['original_img']))
    {
        @unlink('../' . $goods['original_img']);
    }

后增加:

if($goods['goods_desc']){
		preg_match_all("/<img(.*?)src=\"(.*?)\"[^>]*\/>/is",$goods['goods_desc'],$arr);
		if($arr[2]){//BY UUECS_Com
			foreach($arr[2] as $k => $v){
				@unlink("../".$v);
			}
		}
	}

 

ecshop后台批量删除,全选删除的功能要点分析

阿牛阅读(1873)

ecshop后台批量删除,全选删除的功能要点分析:
仅供攻城师参考~~

(1)绑定ID,这个必须的~

(2)
在后台适当位置,增加{insert_scripts files=”../js/utils.js,listtable.js”}

(3)增加全选按钮
全选

(4)处理提交的删除项

(5)增加脚本文件

ecshop中把商品图分离到子域名以加速显示

阿牛阅读(940)

在使用ecshop做商店时,大量的图片是避免不了的。为了解决同域下浏览器下载的线程的限制,我们有必要把ecshop里上传的图片分离到另一个域名下。当前我采用产品ID的最后一个小数除以2取整来划分不同的子域来,这样在页面被浏览时加载图片可以更多同步线程下载到浏览器端以加速显示。

下面是我修改ecshop的方法:
在/includes/lib_common.php中大约2774行,找到下面代码,增加红色部位即可。

/**
 * 重新获得商品图片与商品相册的地址
 *
 * @param int $goods_id 商品ID
 * @param string $image 原商品相册图片地址
 * @param boolean $thumb 是否为缩略图
 * @param string $call 调用方法(商品图片还是商品相册)
 * @param boolean $del 是否删除图片
 *
 * @return string   $url
 */
function get_image_path($goods_id, $image='', $thumb=false, $call='goods', $del=false){
    $url = empty($image) ? $GLOBALS['_CFG']['no_picture'] : $image;
    $url = str_replace('images/','http://pic'.floor(substr($goods_id,-1)/2).'.uuecs.com/',$url); // 增加的
    return $url;
}

当然,如果你觉得这样操作比较麻烦,也可以这样。商品图统一用某特定URL做CDN加速。

/**
 * 重新获得商品图片与商品相册的地址
 *
 * @param int $goods_id 商品ID
 * @param string $image 原商品相册图片地址
 * @param boolean $thumb 是否为缩略图
 * @param string $call 调用方法(商品图片还是商品相册)
 * @param boolean $del 是否删除图片
 *
 * @return string   $url
 */
function get_image_path($goods_id, $image='', $thumb=false, $call='goods', $del=false)
{
    $url = empty($image) ? $GLOBALS['_CFG']['no_picture'] : $image;
    return "http://img.uuecs.com/".$url;
}

 

使用curl 模拟抓取淘宝页面

阿牛阅读(1061)

因工作需要,使用curl 模拟抓取淘宝页面,核心代码。

  /**
     * 根据地址抓取淘宝页面html代码
     * @param type $url 地址
     * @return boolean
     */
    function getTaoBaoHtml($url) {
        if (empty($url)) {
            return false;
        }
        $ch = curl_init();
        // 设置 url
        curl_setopt($ch, CURLOPT_URL, $url);
        // 设置浏览器的特定header
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            "User-Agent: {Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0}",
            "Accept: {text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8}",
            "Accept-Language: {zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3}",
            "Cookie:{cq=ccp%3D1; cna=a7suCzOmSTECAXgg9iCf4AtX; t=671b2069c7e8ac444da66d664a397a5f; tracknick=%5Cu4F0D%5Cu6653%5Cu8F8901; _tb_token_=nDiU1vCuzFd0; cookie2=c54709ffbe04a5ccb80283c34d6b00fa; pnm_cku822=128WsMPac%2FFS4KgNn%2BYfhzduo4U2NC0zh9cAS4%3D%7CWUCLjKhqr873bOIFQcMecSw%3D%7CWMEKRlV%2B3D9a6XWaidNWNQOSWXwaXugvQHzhxALh%7CX0YLbX78NUR2b2DHoxnIqZENQqR35TBZbfQ5vooI0b6GHZA3U1kr%7CXkdILogCr878ZK9I%2B%2FE3QjAD3lFJJaAZRA%3D%3D%7CXUeMwMR2s%2BTUQk8IPP5TNgWfUjQwonccMCxihTa0fRYgtjgfa4j6%7CXMYK7F8liOvH3hMUpzXkiaU%2FJw%3D%3D}",
        ));
        // 页面内容我们并不需要
        curl_setopt($ch, CURLOPT_NOBODY, 0);
        // 只需返回HTTP header
        curl_setopt($ch, CURLOPT_HEADER, 0);
        // 返回结果,而不是输出它
        //curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        ob_start();
        curl_exec($ch);
        $html = ob_get_contents();
        ob_end_clean();
        curl_close($ch);
        return $html;
    }

 

ecshop后台商品列表页批量修改商品价格

阿牛阅读(2803)

ecshop后台商品列表页批量修改商品价格插件
1、打开admin/goods.php文件
找到:(大约在1167-1205行左右)

/*------------------------------------------------------ */
//-- 批量操作
/*------------------------------------------------------ */

elseif ($_REQUEST['act'] == 'batch')
{
$code = empty($_REQUEST['extension_code'])? '' : trim($_REQUEST['extension_code']);

/* 取得要操作的商品编号 */
$goods_id = !empty($_POST['checkboxes']) ? join(',', $_POST['checkboxes']) : 0;

if (isset($_POST['type']))
{
/* 放入回收站 */
if ($_POST['type'] == 'trash')
{
/* 检查权限 */
admin_priv('remove_back');

update_goods($goods_id, 'is_delete', '1');

/* 记录日志 */
admin_log('', 'batch_trash', 'goods');
}
/* 上架 */
elseif ($_POST['type'] == 'on_sale')
{
/* 检查权限 */
admin_priv('goods_manage');
update_goods($goods_id, 'is_on_sale', '1');
}

/* 下架 */
elseif ($_POST['type'] == 'not_on_sale')
{
/* 检查权限 */
admin_priv('goods_manage');
update_goods($goods_id, 'is_on_sale', '0');
}

 

在这段代码的下面添加:

/* add by UUECS_Com 后台商品列表页批量修改商品价格插件 begin */
elseif ($_POST['type'] == 'edit_price')
{
$set = "";
$act_edit_price = !empty($_POST['act_edit_price']) ? intval($_POST['act_edit_price']) : '';
$price_rate = !empty($_POST['price_rate']) ? $_POST['price_rate'] : 0;
$market_price_rate=$_CFG['market_price_rate'];
if($act_edit_price==2)
{
$set = " set shop_price=shop_price+$price_rate,promote_price=promote_price+$price_rate,market_price=shop_price*$market_price_rate ";
}
elseif($act_edit_price==3)
{
$set = " set shop_price=shop_price-$price_rate,promote_price=promote_price-$price_rate,market_price=shop_price*$market_price_rate ";
}
elseif($act_edit_price==4)
{
$set = " set shop_price=shop_price*$price_rate,promote_price=promote_price*$price_rate,market_price=shop_price*$market_price_rate ";
}
elseif($act_edit_price==5)
{
$set = " set shop_price=shop_price/$price_rate,promote_price=promote_price/$price_rate,market_price=shop_price*$market_price_rate ";
}
$sql = "update ". $ecs->table('goods') . " as g $set where 1 and g.goods_id in($goods_id)";
$db->query($sql);
}
/* add by UUECS_Com 后台商品列表页批量修改商品价格插件 end */

 

2、打开admin/templates/goods_list.htm文件
(1)找到:

<div>
<input type="hidden" name="act" value="batch" />
<select name="type" id="selAction" onchange="changeAction()">
<option value="">{$lang.select_please}</option>
<option value="trash">{$lang.trash}</option>
<option value="on_sale">{$lang.on_sale}</option>
<option value="not_on_sale">{$lang.not_on_sale}</option>
<option value="best">{$lang.best}</option>
<option value="not_best">{$lang.not_best}</option>
<option value="new">{$lang.new}</option>
<option value="not_new">{$lang.not_new}</option>
<option value="hot">{$lang.hot}</option>
<option value="not_hot">{$lang.not_hot}</option>
<option value="move_to">{$lang.move_to}</option>

 
在这段代码的下面添加:

<!-- add by UUECS_Com 后台商品列表页批量修改商品价格插件 begin -->
<option value="edit_price">修改商品价格</option>
<!-- add by UUECS_Com 后台商品列表页批量修改商品价格插件 end -->

 

(2)找到:

{if $suppliers_list > 0}
<option value="suppliers_move_to">{$lang.suppliers_move_to}</option>
{/if} 
</select>
<select name="target_cat" style="display:none">
<option value="0">{$lang.select_please}</option>{$cat_list}
</select>
在这段代码的下面添加:
<!-- add by UUECS_Com 后台商品列表页批量修改商品价格插件 begin -->
<select name="act_edit_price" style="display:none">
<option value="2">加</option>
<option value="3">减</option>
<option value="4">乘</option>
<option value="5">除</option>
</select>
<input name="price_rate" type="text" size="6" style="display:none" value=""/>
<!-- add by UUECS_Com 后台商品列表页批量修改商品价格插件 end -->

 

(3)找到:

/**
* @param: bool ext 其他条件:用于转移分类
*/
function confirmSubmit(frm, ext)
{
if (frm.elements['type'].value == 'trash')
{
return confirm(batch_trash_confirm);
}
else if (frm.elements['type'].value == 'not_on_sale')
{
return confirm(batch_no_on_sale);
}
else if (frm.elements['type'].value == 'move_to')
{
ext = (ext == undefined) ? true : ext;
return ext && frm.elements['target_cat'].value != 0;
}

 
在这段代码的下面添加:

/* add by UUECS_Com 后台商品列表页批量修改商品价格插件 begin */
else if (frm.elements['type'].value == 'edit_price')
{
ext = (ext == undefined) ? true : ext;
return ext && frm.elements['act_edit_price'].value != 0;
}
/* add by UUECS_Com 后台商品列表页批量修改商品价格插件 end */

 

(4)找到:

function changeAction()
{
var frm = document.forms['listForm'];

// 切换分类列表的显示
frm.elements['target_cat'].style.display = frm.elements['type'].value == 'move_to' ? '' : 'none';

 

在这段代码的下面添加:

/* add by UUECS_Com 后台商品列表页批量修改商品价格插件 begin */
frm.elements['act_edit_price'].style.display = frm.elements['type'].value == 'edit_price' ? '' : 'none';
frm.elements['price_rate'].style.display = frm.elements['type'].value == 'edit_price' ? '' : 'none';
/* add by UUECS_Com 后台商品列表页批量修改商品价格插件 end */

 

购物流程页面出错解决 Fatal error: Call to undefined function compile str()

阿牛阅读(1267)

购物流程页面出错 Fatal error: Call to undefined function compile str() in 。。。。www\flow.php on line 382
出错提示内容:
Fatal error: Call to undefined function compile_str() in D:\vhostroot\LocalUser\8smvjl2mptxy1z.com\www\flow.php on line 382

打开lib_base.php

function compile_str($str)
{
$arr = array(‘<' => ‘<’, ‘>’ => ‘>’);

return strtr($str, $arr);
}
贴到网站最底部即可 。

ECSHOP使用PC浏览器模拟手机浏览器

阿牛阅读(992)

我们在测试各种手机站的时候,很多时候可能都在用手机登陆或扫描测试,其实可用PC浏览器,就能达到模拟WAP页面效果了

在 PC 上使用chrome 谷歌浏览器模拟手机浏览器是一件非常简单的事情,最新 chrome 浏览器都提供了这项功能,可以模拟 android 、iphone、meego、黑莓等等多款手机,还有多款手机浏览器,如360极速浏览器,安全浏览器,chrome、firefox以及手机系统自带的浏览器。

使用方法,打开谷歌浏览器控制台,按 F12,如下图:

monishouji然后点击右下角的设置按钮,出现如下设置框:

monishouji02如图设置,选择你要模拟的手机及浏览器,然后再打开网站,模拟过程中不要关闭控制台。

这项功能对制作手机网站的童鞋来说非常有用!

阿牛ECSHOP 更专业 更方便

关于我们联系我们