ecshop增加点击购买直接进入购物车

eBestMall 发表了文章 • 0 个评论 • 76 次浏览 • 2018-08-23 17:08 • 来自相关话题

ecshop如何设置了购买停留在商品页面之后。将ecshop商品加入购物车的时候。就不会直接进入购物车。这样使用购物车非常不方便。我们为了既保持该页面功能,又能进入购物车功能。所以增加了另外一个购买按扭。点购买之后。可以直接进入ecshop的购物车。这样只牵涉到修改ecshop模板,对ecshop二次开发稍微修改就可以做到。

1:goods.dwt模板

<a href="javascript:addToCart1({$goods.goods_id})"><img src="images/bnt_cat.gif" />

2:js/common.js

function addToCart1(goodsId, parentId)

{

  var goods        = new Object();

  var spec_arr     = new Array();

  var fittings_arr = new Array();

  var number       = 1;

  var formBuy      = document.forms['ECS_FORMBUY'];

  var quick     = 0;

  // 检查是否有商品规格 

  if (formBuy)

  {

    spec_arr = getSelectedAttributes(formBuy);

    if (formBuy.elements['number'])

    {

      number = formBuy.elements['number'].value;

    }

 quick = 1;

  }

  goods.quick    = quick;

  goods.spec     = spec_arr;

  goods.goods_id = goodsId;

  goods.number   = number;

  goods.parent   = (typeof(parentId) == "undefined") ? 0 : parseInt(parentId);

  Ajax.call('flow.php?step=add_to_cart1', 'goods=' + goods.toJSONString(), addToCartResponse1, 'POST', 'JSON');

}

function addToCartResponse1(result)

{

  if (result.error > 0)

  {

    // 如果需要缺货登记,跳转

    if (result.error == 2)

    {

      if (confirm(result.message))

      {

        location.href = 'user.php?act=add_booking&id=' + result.goods_id + '&spec=' + result.product_spec;

      }

    }

    // 没选规格,弹出属性选择框

    else if (result.error == 6)

    {

      openSpeDiv(result.message, result.goods_id, result.parent);

    }

    else

    {

      alert(result.message);

    }

  }

  else

  {

    var cartInfo = document.getElementById('ECS_CARTINFO');

    var cart_url = 'flow.php?step=cart';

    if (cartInfo)

    {

      cartInfo.innerHTML = result.content;

    }

 location.href = cart_url;

  }

}

3:flow.php

elseif ($_REQUEST['step'] == 'add_to_cart1')

{

    include_once('includes/cls_json.php');

    $_POST['goods'] = json_str_iconv($_POST['goods']);

    if (!empty($_REQUEST['goods_id']) && empty($_POST['goods']))

    {

        if (!is_numeric($_REQUEST['goods_id']) || intval($_REQUEST['goods_id']) <= 0)

        {

            ecs_header("Location:./\n");

        }

        $goods_id = intval($_REQUEST['goods_id']);

        exit;

    }

    $result = array('error' => 0, 'message' => '', 'content' => '', 'goods_id' => '');

    $json  = new JSON;

    if (empty($_POST['goods']))

    {

        $result['error'] = 1;

        die($json->encode($result));

    }

    $goods = $json->decode($_POST['goods']);

    /* 检查:如果商品有规格,而post的数据没有规格,把商品的规格属性通过JSON传到前台 */

    if (empty($goods->spec) AND empty($goods->quick))

    {

        $sql = "SELECT a.attr_id, a.attr_name, a.attr_type, ".

            "g.goods_attr_id, g.attr_value, g.attr_price " .

        'FROM ' . $GLOBALS['ecs']->table('goods_attr') . ' AS g ' .

        'LEFT JOIN ' . $GLOBALS['ecs']->table('attribute') . ' AS a ON a.attr_id = g.attr_id ' .

        "WHERE a.attr_type != 0 AND g.goods_id = '" . $goods->goods_id . "' " .

        'ORDER BY a.sort_order, g.attr_price, g.goods_attr_id';

        $res = $GLOBALS['db']->getAll($sql);

        if (!empty($res))

        {

            $spe_arr = array();

            foreach ($res AS $row)

            {

                $spe_arr[$row['attr_id']]['attr_type'] = $row['attr_type'];

                $spe_arr[$row['attr_id']]['name']     = $row['attr_name'];

                $spe_arr[$row['attr_id']]['attr_id']     = $row['attr_id'];

                $spe_arr[$row['attr_id']]['values'][] = array(

                                                            'label'        => $row['attr_value'],

                                                            'price'        => $row['attr_price'],

                                                            'format_price' => price_format($row['attr_price'], false),

                                                            'id'           => $row['goods_attr_id']);

            }

            $i = 0;

            $spe_array = array();

            foreach ($spe_arr AS $row)

            {

                $spe_array[]=$row;

            }

            $result['error']   = ERR_NEED_SELECT_ATTR;

            $result['goods_id'] = $goods->goods_id;

            $result['parent'] = $goods->parent;

            $result['message'] = $spe_array;

            die($json->encode($result));

        }

    }

    /* 检查:商品数量是否合法 */

    if (!is_numeric($goods->number) || intval($goods->number) <= 0)

    {

        $result['error']   = 1;

        $result['message'] = $_LANG['invalid_number'];

    }

    /* 更新:购物车 */

    else

    {

        // 更新:添加到购物车

        if (addto_cart($goods->goods_id, $goods->number, $goods->spec, $goods->parent))

        {

            if ($_CFG['cart_confirm'] > 2)

            {

                $result['message'] = '';

            }

            else

            {

                $result['message'] = $_CFG['cart_confirm'] == 1 ? $_LANG['addto_cart_success_1'] : $_LANG['addto_cart_success_2'];

            }

            $result['content'] = insert_cart_info();

            $result['one_step_buy'] = $_CFG['one_step_buy'];

        }

        else

        {

            $result['message']  = $err->last_message();

            $result['error']    = $err->error_no;

            $result['goods_id'] = stripslashes($goods->goods_id);

            if (is_array($goods->spec))

            {

                $result['product_spec'] = implode(',', $goods->spec);

            }

            else

            {

                $result['product_spec'] = $goods->spec;

            }

        }

    }

    $result['confirm_type'] =3;

    die($json->encode($result));

} 查看全部
ecshop如何设置了购买停留在商品页面之后。将ecshop商品加入购物车的时候。就不会直接进入购物车。这样使用购物车非常不方便。我们为了既保持该页面功能,又能进入购物车功能。所以增加了另外一个购买按扭。点购买之后。可以直接进入ecshop的购物车。这样只牵涉到修改ecshop模板,对ecshop二次开发稍微修改就可以做到。

1:goods.dwt模板

<a href="javascript:addToCart1({$goods.goods_id})"><img src="images/bnt_cat.gif" />

2:js/common.js

function addToCart1(goodsId, parentId)

{

  var goods        = new Object();

  var spec_arr     = new Array();

  var fittings_arr = new Array();

  var number       = 1;

  var formBuy      = document.forms['ECS_FORMBUY'];

  var quick     = 0;

  // 检查是否有商品规格 

  if (formBuy)

  {

    spec_arr = getSelectedAttributes(formBuy);

    if (formBuy.elements['number'])

    {

      number = formBuy.elements['number'].value;

    }

 quick = 1;

  }

  goods.quick    = quick;

  goods.spec     = spec_arr;

  goods.goods_id = goodsId;

  goods.number   = number;

  goods.parent   = (typeof(parentId) == "undefined") ? 0 : parseInt(parentId);

  Ajax.call('flow.php?step=add_to_cart1', 'goods=' + goods.toJSONString(), addToCartResponse1, 'POST', 'JSON');

}

function addToCartResponse1(result)

{

  if (result.error > 0)

  {

    // 如果需要缺货登记,跳转

    if (result.error == 2)

    {

      if (confirm(result.message))

      {

        location.href = 'user.php?act=add_booking&id=' + result.goods_id + '&spec=' + result.product_spec;

      }

    }

    // 没选规格,弹出属性选择框

    else if (result.error == 6)

    {

      openSpeDiv(result.message, result.goods_id, result.parent);

    }

    else

    {

      alert(result.message);

    }

  }

  else

  {

    var cartInfo = document.getElementById('ECS_CARTINFO');

    var cart_url = 'flow.php?step=cart';

    if (cartInfo)

    {

      cartInfo.innerHTML = result.content;

    }

 location.href = cart_url;

  }

}

3:flow.php

elseif ($_REQUEST['step'] == 'add_to_cart1')

{

    include_once('includes/cls_json.php');

    $_POST['goods'] = json_str_iconv($_POST['goods']);

    if (!empty($_REQUEST['goods_id']) && empty($_POST['goods']))

    {

        if (!is_numeric($_REQUEST['goods_id']) || intval($_REQUEST['goods_id']) <= 0)

        {

            ecs_header("Location:./\n");

        }

        $goods_id = intval($_REQUEST['goods_id']);

        exit;

    }

    $result = array('error' => 0, 'message' => '', 'content' => '', 'goods_id' => '');

    $json  = new JSON;

    if (empty($_POST['goods']))

    {

        $result['error'] = 1;

        die($json->encode($result));

    }

    $goods = $json->decode($_POST['goods']);

    /* 检查:如果商品有规格,而post的数据没有规格,把商品的规格属性通过JSON传到前台 */

    if (empty($goods->spec) AND empty($goods->quick))

    {

        $sql = "SELECT a.attr_id, a.attr_name, a.attr_type, ".

            "g.goods_attr_id, g.attr_value, g.attr_price " .

        'FROM ' . $GLOBALS['ecs']->table('goods_attr') . ' AS g ' .

        'LEFT JOIN ' . $GLOBALS['ecs']->table('attribute') . ' AS a ON a.attr_id = g.attr_id ' .

        "WHERE a.attr_type != 0 AND g.goods_id = '" . $goods->goods_id . "' " .

        'ORDER BY a.sort_order, g.attr_price, g.goods_attr_id';

        $res = $GLOBALS['db']->getAll($sql);

        if (!empty($res))

        {

            $spe_arr = array();

            foreach ($res AS $row)

            {

                $spe_arr[$row['attr_id']]['attr_type'] = $row['attr_type'];

                $spe_arr[$row['attr_id']]['name']     = $row['attr_name'];

                $spe_arr[$row['attr_id']]['attr_id']     = $row['attr_id'];

                $spe_arr[$row['attr_id']]['values'][] = array(

                                                            'label'        => $row['attr_value'],

                                                            'price'        => $row['attr_price'],

                                                            'format_price' => price_format($row['attr_price'], false),

                                                            'id'           => $row['goods_attr_id']);

            }

            $i = 0;

            $spe_array = array();

            foreach ($spe_arr AS $row)

            {

                $spe_array[]=$row;

            }

            $result['error']   = ERR_NEED_SELECT_ATTR;

            $result['goods_id'] = $goods->goods_id;

            $result['parent'] = $goods->parent;

            $result['message'] = $spe_array;

            die($json->encode($result));

        }

    }

    /* 检查:商品数量是否合法 */

    if (!is_numeric($goods->number) || intval($goods->number) <= 0)

    {

        $result['error']   = 1;

        $result['message'] = $_LANG['invalid_number'];

    }

    /* 更新:购物车 */

    else

    {

        // 更新:添加到购物车

        if (addto_cart($goods->goods_id, $goods->number, $goods->spec, $goods->parent))

        {

            if ($_CFG['cart_confirm'] > 2)

            {

                $result['message'] = '';

            }

            else

            {

                $result['message'] = $_CFG['cart_confirm'] == 1 ? $_LANG['addto_cart_success_1'] : $_LANG['addto_cart_success_2'];

            }

            $result['content'] = insert_cart_info();

            $result['one_step_buy'] = $_CFG['one_step_buy'];

        }

        else

        {

            $result['message']  = $err->last_message();

            $result['error']    = $err->error_no;

            $result['goods_id'] = stripslashes($goods->goods_id);

            if (is_array($goods->spec))

            {

                $result['product_spec'] = implode(',', $goods->spec);

            }

            else

            {

                $result['product_spec'] = $goods->spec;

            }

        }

    }

    $result['confirm_type'] =3;

    die($json->encode($result));

}

ecshop添加多国货币

eBestMall 发表了文章 • 0 个评论 • 83 次浏览 • 2018-08-23 17:06 • 来自相关话题

1.在数据库里的表ecs_shop_config插入

INSERT INTO `ecs_shop_config`(`id`, `parent_id`, `code`, `type`, `store_range`, `store_dir`, `value`, `sort_order`) VALUES (null,'1','rate','text','','','1,0.71,0.69,6.85,1.45','1'),(null,'1','ybprice_format','text','','','&%s','1'),(null,'1','aprice_format','text','','','EUR%s','1'),(null,'1','cprice_format','text','','','¥%s','1'),(null,'1','aoprice_format','text','','','AU%s','1')
1
2.在/languages/zh_cn/admin/shop_config.php下添加 (73行)

$_LANG['cfg_name']['rate'] = '货币汇率';
$_LANG['cfg_name']['ybprice_format'] = '英镑格式';
$_LANG['cfg_name']['aprice_format'] = '欧元格式';
$_LANG['cfg_name']['cprice_format'] = '人民币格式';
$_LANG['cfg_name']['aoprice_format'] = '澳元格式';

3.并且添加下面的帮助信息 (199行)

$_LANG['cfg_desc']['rate'] = '输入规则按照和美元的汇率进行出入 Us,EURP,BriishPound,China,Austriliar';
$_LANG['cfg_desc']['ybprice_format'] = '显示英镑格式,%s将被替换为相应的价格。';
$_LANG['cfg_desc']['aprice_format'] = '显示欧元格式,%s将被替换为相应的价格。';
$_LANG['cfg_desc']['cprice_format'] = '显示人民币格式,%s将被替换为相应的价格。';
$_LANG['cfg_desc']['aoprice_format'] = '显示澳元格式,%s将被替换为相应的价格。';

4.在themes/当前使用的模板文件夹/library/page_header.lbi的合适位置添加

<div class="TopNavList">
<li><a href="{$url_head}&currency=USD">美元</a><span></span></li>
<li><a href="{$url_head}&currency=CNY">人民币</a><span></span></li>
<li><a href="{$url_head}&currency=EUR">欧元</a><span></span></li>
<li><a href="{$url_head}&currency=GBP">英镑</a><span></span></li>
<li><a href="{$url_head}&currency=AUD">澳元</a><span></span></li>
</div> 
<select>
<option value="{$url_head}&currency=USD">美元</option>
<option value="{$url_head}&currency=CNY">人民币</option>
<option value="{$url_head}&currency=EUR">欧元</option>
<option value="{$url_head}&currency=GBP">英镑</option>
<option value="{$url_head}&currency=AUD">澳元</option>
</select>

<div class="TopNavList">
<ul>
<li><a href="{$url_head}&currency=USD">美元</a><span></span></li>
<li><a href="{$url_head}&currency=CNY">人民币</a><span></span></li>
<li><a href="{$url_head}&currency=EUR">欧元</a><span></span></li>
<li><a href="{$url_head}&currency=GBP">英镑</a><span></span></li>
<li><a href="{$url_head}&currency=AUD">澳元</a><span></span></li>
</ul>
</div>

可以根据自己实际情况添加; 
5.在/includes/init.php最后面添加 //路径处理

$url_this="http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?id=".@$_GET['id'];
$smarty->assign("url_head",$url_this);
$currency=@$_GET['currency'];

clear_all_files(); 清除缓存功能
if($currency!=""){
$_SESSION['currency']=$currency;
}
if($_SESSION['currency']==''){
$_SESSION['currency']='USD';
}
跳转链接可以根据实际情况写ajax

6.在/includes/lib_commom.php找到这个函数price_format并且按下面的进行修改

/**   * 格式化商品价格 
 *   * @access  public 
 * @param   float   $price  商品价格 
 * @return  string 
*/


function price_format($price,$change_price=true){
$currency=$_SESSION['currency'];
$rate=explode(',',$GLOBALS['_CFG']['rate']);
if($currency=='USD'){
$price=$price*$rate[0];
}
if($currency=='CNY'){
$price=$price*$rate[3];
}
if($currency=='EUR'){
$price=$price*$rate[1];
}
if($currency=='GBP'){
$price=$price*$rate[2];
}
if($currency=='AUD'){
$price=$price*$rate[4];
}
if($change_price && defined('ESC_ADMIN')==false){
switch($GLOBALS['_CFG']['price_format']){
case 0:
$price=number_format($price,2,'.','');
break;
case 1:  //保留不为3的尾数
$price=preg_replace('/(.*)(\\.)([0-9]*?)0+$/','\1\2\3',number_format($price,2,'.',''));
if(substr($price,-1)=='.'){
$price=substr($price,0,-1);
}
break;
case 2:  //四舍五入,保留1位
$price=substr(number_format($price,2,'.',''),0,-1);
break;
case 3:  //直接取整
$price=intval($price);
break;
case 4:  //四舍五入,保留1位
$price=number_format($price,1,'.','');
break;
case 5:  //四舍五入,不保留小数
$price=round($price);
break;
}
}else{
$price=number_format($price,2,'.','');
}
switch ($currency){
case 'USD':
return sprintf($GLOBALS['_CFG']['currency_format'],$price);
break;
case 'CNY':
return sprintf($GLOBALS['_CFG']['cprice_format'],$price);
break;
case 'EUR':
return sprintf($GLOBALS['_CFG']['aprice_format'],$price);
break;
case 'GBP':
return sprintf($GLOBALS['_CFG']['ybprice_format'],$price);
break;
case 'AUD':
return sprintf($GLOBALS['_CFG']['aoprice_format'],$price);
break;
}
}

7.修改表ecs_order_info

alter table 'ecs_order_info' add 'currency' varchar(10) not null,add 'new_money' decimal(10,2) not null
1
8.修改flow.php文件中

{
//分成功能关闭
$parent_id=0;
}


$order['parent_id']=$parent_id;


//大约1608行左右下面  插入以下代码


$order['currency']=$_SESSION['currency'];
$order['new_money']=price_format_hs($order['order_amount']);

9.修改\inlucdes\lib_common.php在里面新增加price_format_hs函数

/** 
  * 用于支付换算  * 
 * @access  public 
 * @param   float   $price  商品价格  * @return  string 
*/


function price_format_hs($price,$change_price=true){
$currency=$_SESSION['currency'];
$rate=explode(',',$GLOBALS['_CFG']['rate']);
if($currency=='USD'){
$price=$price*$rate[0];
}
if($currency=='CNY'){
$price=$price*$rate[3];
}
if($currency=='EUR'){
$price=$price*$rate[1];
}
if($currency=='GBP'){
$price=$price*$rate[2];
}
if($currency=='AUD'){
$price=$price*$rate[4];
}
if($change_price && defined('ESC_ADMIN')==false){
switch ($GLOBALS['_CFG']['price_format']){
case 0:
$price=number_format($price,2,'.','');
break;
case 1:  //保留不为0的尾数
$price=price_replace('/(.*)(\\.)([0-9]*?)0+$/','\1\2\3',number_format($price,2,'.',''));
if(substr($price,-1)=='.'){
$price=substr($price,0,-1);
}
break;
case 2:  //不四舍五入,保留1位
$price=substr(number_format($price,2,'.',''),0,-1);
break;
case 3:  //直接取整
$price=intval($price);
break;
case 4:  //四舍五入,保留1位
$price=number_format($price,1,'.','');
break;
case 5:  //四舍五入,不保留小数
$price=round($price);
break;
}
}else{
$price=number_format($price,2,'.','');
}
return $price;
}

10.在\includes\modules\payment\paypal.php 大约92行一个get_code函数

function get_code($order,$payment){
$paypal_currency=$_SESSION["currency"];//新增加的
$data_order_id=$order['log_id'];
$data_amount=$order['order_amount'];
$data_return_url=return_url(basename(__FILE__,'.php'));
$data_pay_account=$payment['paypal_account'];
$currency_code=$paypal_currency;//把下一行复制出来,并下行注掉,修改为这一行
//$currency_code=$payment['paypal_currency'];
} 查看全部
1.在数据库里的表ecs_shop_config插入

INSERT INTO `ecs_shop_config`(`id`, `parent_id`, `code`, `type`, `store_range`, `store_dir`, `value`, `sort_order`) VALUES (null,'1','rate','text','','','1,0.71,0.69,6.85,1.45','1'),(null,'1','ybprice_format','text','','','&%s','1'),(null,'1','aprice_format','text','','','EUR%s','1'),(null,'1','cprice_format','text','','','¥%s','1'),(null,'1','aoprice_format','text','','','AU%s','1')
1
2.在/languages/zh_cn/admin/shop_config.php下添加 (73行)

$_LANG['cfg_name']['rate'] = '货币汇率';
$_LANG['cfg_name']['ybprice_format'] = '英镑格式';
$_LANG['cfg_name']['aprice_format'] = '欧元格式';
$_LANG['cfg_name']['cprice_format'] = '人民币格式';
$_LANG['cfg_name']['aoprice_format'] = '澳元格式';

3.并且添加下面的帮助信息 (199行)

$_LANG['cfg_desc']['rate'] = '输入规则按照和美元的汇率进行出入 Us,EURP,BriishPound,China,Austriliar';
$_LANG['cfg_desc']['ybprice_format'] = '显示英镑格式,%s将被替换为相应的价格。';
$_LANG['cfg_desc']['aprice_format'] = '显示欧元格式,%s将被替换为相应的价格。';
$_LANG['cfg_desc']['cprice_format'] = '显示人民币格式,%s将被替换为相应的价格。';
$_LANG['cfg_desc']['aoprice_format'] = '显示澳元格式,%s将被替换为相应的价格。';

4.在themes/当前使用的模板文件夹/library/page_header.lbi的合适位置添加

<div class="TopNavList">
<li><a href="{$url_head}&currency=USD">美元</a><span></span></li>
<li><a href="{$url_head}&currency=CNY">人民币</a><span></span></li>
<li><a href="{$url_head}&currency=EUR">欧元</a><span></span></li>
<li><a href="{$url_head}&currency=GBP">英镑</a><span></span></li>
<li><a href="{$url_head}&currency=AUD">澳元</a><span></span></li>
</div> 
<select>
<option value="{$url_head}&currency=USD">美元</option>
<option value="{$url_head}&currency=CNY">人民币</option>
<option value="{$url_head}&currency=EUR">欧元</option>
<option value="{$url_head}&currency=GBP">英镑</option>
<option value="{$url_head}&currency=AUD">澳元</option>
</select>

<div class="TopNavList">
<ul>
<li><a href="{$url_head}&currency=USD">美元</a><span></span></li>
<li><a href="{$url_head}&currency=CNY">人民币</a><span></span></li>
<li><a href="{$url_head}&currency=EUR">欧元</a><span></span></li>
<li><a href="{$url_head}&currency=GBP">英镑</a><span></span></li>
<li><a href="{$url_head}&currency=AUD">澳元</a><span></span></li>
</ul>
</div>

可以根据自己实际情况添加; 
5.在/includes/init.php最后面添加 //路径处理

$url_this="http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?id=".@$_GET['id'];
$smarty->assign("url_head",$url_this);
$currency=@$_GET['currency'];

clear_all_files(); 清除缓存功能
if($currency!=""){
$_SESSION['currency']=$currency;
}
if($_SESSION['currency']==''){
$_SESSION['currency']='USD';
}
跳转链接可以根据实际情况写ajax

6.在/includes/lib_commom.php找到这个函数price_format并且按下面的进行修改

/**   * 格式化商品价格 
 *   * @access  public 
 * @param   float   $price  商品价格 
 * @return  string 
*/


function price_format($price,$change_price=true){
$currency=$_SESSION['currency'];
$rate=explode(',',$GLOBALS['_CFG']['rate']);
if($currency=='USD'){
$price=$price*$rate[0];
}
if($currency=='CNY'){
$price=$price*$rate[3];
}
if($currency=='EUR'){
$price=$price*$rate[1];
}
if($currency=='GBP'){
$price=$price*$rate[2];
}
if($currency=='AUD'){
$price=$price*$rate[4];
}
if($change_price && defined('ESC_ADMIN')==false){
switch($GLOBALS['_CFG']['price_format']){
case 0:
$price=number_format($price,2,'.','');
break;
case 1:  //保留不为3的尾数
$price=preg_replace('/(.*)(\\.)([0-9]*?)0+$/','\1\2\3',number_format($price,2,'.',''));
if(substr($price,-1)=='.'){
$price=substr($price,0,-1);
}
break;
case 2:  //四舍五入,保留1位
$price=substr(number_format($price,2,'.',''),0,-1);
break;
case 3:  //直接取整
$price=intval($price);
break;
case 4:  //四舍五入,保留1位
$price=number_format($price,1,'.','');
break;
case 5:  //四舍五入,不保留小数
$price=round($price);
break;
}
}else{
$price=number_format($price,2,'.','');
}
switch ($currency){
case 'USD':
return sprintf($GLOBALS['_CFG']['currency_format'],$price);
break;
case 'CNY':
return sprintf($GLOBALS['_CFG']['cprice_format'],$price);
break;
case 'EUR':
return sprintf($GLOBALS['_CFG']['aprice_format'],$price);
break;
case 'GBP':
return sprintf($GLOBALS['_CFG']['ybprice_format'],$price);
break;
case 'AUD':
return sprintf($GLOBALS['_CFG']['aoprice_format'],$price);
break;
}
}

7.修改表ecs_order_info

alter table 'ecs_order_info' add 'currency' varchar(10) not null,add 'new_money' decimal(10,2) not null
1
8.修改flow.php文件中

{
//分成功能关闭
$parent_id=0;
}


$order['parent_id']=$parent_id;


//大约1608行左右下面  插入以下代码


$order['currency']=$_SESSION['currency'];
$order['new_money']=price_format_hs($order['order_amount']);

9.修改\inlucdes\lib_common.php在里面新增加price_format_hs函数

/** 
  * 用于支付换算  * 
 * @access  public 
 * @param   float   $price  商品价格  * @return  string 
*/


function price_format_hs($price,$change_price=true){
$currency=$_SESSION['currency'];
$rate=explode(',',$GLOBALS['_CFG']['rate']);
if($currency=='USD'){
$price=$price*$rate[0];
}
if($currency=='CNY'){
$price=$price*$rate[3];
}
if($currency=='EUR'){
$price=$price*$rate[1];
}
if($currency=='GBP'){
$price=$price*$rate[2];
}
if($currency=='AUD'){
$price=$price*$rate[4];
}
if($change_price && defined('ESC_ADMIN')==false){
switch ($GLOBALS['_CFG']['price_format']){
case 0:
$price=number_format($price,2,'.','');
break;
case 1:  //保留不为0的尾数
$price=price_replace('/(.*)(\\.)([0-9]*?)0+$/','\1\2\3',number_format($price,2,'.',''));
if(substr($price,-1)=='.'){
$price=substr($price,0,-1);
}
break;
case 2:  //不四舍五入,保留1位
$price=substr(number_format($price,2,'.',''),0,-1);
break;
case 3:  //直接取整
$price=intval($price);
break;
case 4:  //四舍五入,保留1位
$price=number_format($price,1,'.','');
break;
case 5:  //四舍五入,不保留小数
$price=round($price);
break;
}
}else{
$price=number_format($price,2,'.','');
}
return $price;
}

10.在\includes\modules\payment\paypal.php 大约92行一个get_code函数

function get_code($order,$payment){
$paypal_currency=$_SESSION["currency"];//新增加的
$data_order_id=$order['log_id'];
$data_amount=$order['order_amount'];
$data_return_url=return_url(basename(__FILE__,'.php'));
$data_pay_account=$payment['paypal_account'];
$currency_code=$paypal_currency;//把下一行复制出来,并下行注掉,修改为这一行
//$currency_code=$payment['paypal_currency'];
}

解决ecshop购物时自动退出的办法

eBestMall 发表了文章 • 0 个评论 • 95 次浏览 • 2018-08-23 17:05 • 来自相关话题

ecshop的session机制是一个不错的解决方案,但也有一些瑕疵,部分会员在操作时可能会出现登录后自动退出或商品无法加入购车或购物车自动清空等情况,这个一方面 
如是是因为用代理上网,ip不断变化,可以参考的解决方法,另外也可以打开includes\cls_session.php找到

function gen_session_key($session_id)
    {
        static $ip = '';
        if ($ip == '')
        {
            $ip = substr($this->_ip, 0, strrpos($this->_ip, '.'));
        }
        return sprintf('x', crc32(!empty($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] . ROOT_PATH . $ip . $session_id : ROOT_PATH . $ip . $session_id));
  }

替换成

function gen_session_key($session_id)
    {
        static $ip = '';
        if ($ip == '')
        {
            $ip = substr($this->_ip, 0, strrpos($this->_ip, '.'));
        }
        return sprintf('x', crc32(ROOT_PATH . $ip . $session_id));
    }

如果还是会退出 
替换成

function gen_session_key($session_id) {
        static $ip = '';

//        if ($ip == '')
//        {
//            $ip = substr($this->_ip, 0, strrpos($this->_ip, '.'));
//        }

        return sprintf('x', crc32(ROOT_PATH . $ip . $session_id));
} 查看全部
ecshop的session机制是一个不错的解决方案,但也有一些瑕疵,部分会员在操作时可能会出现登录后自动退出或商品无法加入购车或购物车自动清空等情况,这个一方面 
如是是因为用代理上网,ip不断变化,可以参考的解决方法,另外也可以打开includes\cls_session.php找到

function gen_session_key($session_id)
    {
        static $ip = '';
        if ($ip == '')
        {
            $ip = substr($this->_ip, 0, strrpos($this->_ip, '.'));
        }
        return sprintf('x', crc32(!empty($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] . ROOT_PATH . $ip . $session_id : ROOT_PATH . $ip . $session_id));
  }

替换成

function gen_session_key($session_id)
    {
        static $ip = '';
        if ($ip == '')
        {
            $ip = substr($this->_ip, 0, strrpos($this->_ip, '.'));
        }
        return sprintf('x', crc32(ROOT_PATH . $ip . $session_id));
    }

如果还是会退出 
替换成

function gen_session_key($session_id) {
        static $ip = '';

//        if ($ip == '')
//        {
//            $ip = substr($this->_ip, 0, strrpos($this->_ip, '.'));
//        }

        return sprintf('x', crc32(ROOT_PATH . $ip . $session_id));
}

ecshop调用指定分类ID的下级分类

eBestMall 发表了文章 • 0 个评论 • 51 次浏览 • 2018-08-23 17:04 • 来自相关话题

第一步:打开 lib_goods.php 最后加上以下函数
//调用商品分类指定分类下级分类
function get_parent_id_tree($parent_id)
{
    $three_c_arr = array();
    $sql = 'SELECT count(*) FROM ' . $GLOBALS['ecs']->table('category') . ' WHERE parent_id = ' . $parent_id . ' AND is_show = 1 ';
    if ($GLOBALS['db']->getOne($sql))
    {
        $child_sql = 'SELECT cat_id, cat_name, parent_id, is_show ' .
        'FROM ' . $GLOBALS['ecs']->table('category') .
        'WHERE parent_id = ' . $parent_id . ' AND is_show = 1 ORDER BY sort_order ASC, cat_id ASC';
        $res = $GLOBALS['db']->getAll($child_sql);
        foreach ($res AS $row)
        {
            if ($row['is_show'])
            $three_c_arr[$row['cat_id']]['id']   = $row['cat_id'];
            $three_c_arr[$row['cat_id']]['name'] = $row['cat_name'];
            $three_c_arr[$row['cat_id']]['url'] = build_uri(‘category’, array(‘cid’ => $row['cat_id']), $row['cat_name']);
        }
    }
    return $three_c_arr;
}
第二步:声明后用$smarty调用,就是在 index.php 中加上下面一句(注意这里加的位置要找对大约117行左右都行):
$smarty->assign('thiscid6', get_parent_id_tree(6)); //调用父级分类6的下级分类
第三步:现在可以在 index.dwt 模板文件里开始调用了
<ul>
<!--{foreach from=$thiscid6 item=child6}-->
<li><a href="/category.php?id={$child6.id}">{$child6.name|escape:html}</a></li>
<!--{/foreach}-->
</ul> 查看全部
第一步:打开 lib_goods.php 最后加上以下函数
//调用商品分类指定分类下级分类
function get_parent_id_tree($parent_id)
{
    $three_c_arr = array();
    $sql = 'SELECT count(*) FROM ' . $GLOBALS['ecs']->table('category') . ' WHERE parent_id = ' . $parent_id . ' AND is_show = 1 ';
    if ($GLOBALS['db']->getOne($sql))
    {
        $child_sql = 'SELECT cat_id, cat_name, parent_id, is_show ' .
        'FROM ' . $GLOBALS['ecs']->table('category') .
        'WHERE parent_id = ' . $parent_id . ' AND is_show = 1 ORDER BY sort_order ASC, cat_id ASC';
        $res = $GLOBALS['db']->getAll($child_sql);
        foreach ($res AS $row)
        {
            if ($row['is_show'])
            $three_c_arr[$row['cat_id']]['id']   = $row['cat_id'];
            $three_c_arr[$row['cat_id']]['name'] = $row['cat_name'];
            $three_c_arr[$row['cat_id']]['url'] = build_uri(‘category’, array(‘cid’ => $row['cat_id']), $row['cat_name']);
        }
    }
    return $three_c_arr;
}
第二步:声明后用$smarty调用,就是在 index.php 中加上下面一句(注意这里加的位置要找对大约117行左右都行):
$smarty->assign('thiscid6', get_parent_id_tree(6)); //调用父级分类6的下级分类
第三步:现在可以在 index.dwt 模板文件里开始调用了
<ul>
<!--{foreach from=$thiscid6 item=child6}-->
<li><a href="/category.php?id={$child6.id}">{$child6.name|escape:html}</a></li>
<!--{/foreach}-->
</ul>

ecshop配送方式处理

eBestMall 发表了文章 • 0 个评论 • 68 次浏览 • 2018-08-23 17:03 • 来自相关话题

ecshop配送方式的文件路径在includes\modules\payment

语言包在languages\zh_cn\shipping

里面的文件和中文名称的对应是:

上门取货 cac.php 

城际快递 city_express.php

EMS 国内邮政特快专递 ems.php

市内快递 flat.php

运费到付 fpd.php

邮政快递包裹 post_express.php

邮局平邮 post_mail.php

邮政挂号印刷品 presswork.php

申通快递 sto_express.php

顺丰速运 sf_express.php

圆通速递 yto.php

中通速递 zto.php

下面修改下各个快递的货到付款

例如: 想让顺丰快递能支持 货到付款.

在ecshop 程序的主目录下:  找到 includes/modules/shipping/sf_express.php  这个文件

文件中查找下面的内容

/* 配送方式是否支持货到付款 */
$modules[$i]['cod']     = true;              注:false 默认是不支持的  把它改成 true .

然后进入后台把顺丰快递 卸载   然后重新安装 就ok了  .

如果需要修改其他的配送方式,方法也是一样的 只是要找到对应的 快递php 程序 查看全部
ecshop配送方式的文件路径在includes\modules\payment

语言包在languages\zh_cn\shipping

里面的文件和中文名称的对应是:

上门取货 cac.php 

城际快递 city_express.php

EMS 国内邮政特快专递 ems.php

市内快递 flat.php

运费到付 fpd.php

邮政快递包裹 post_express.php

邮局平邮 post_mail.php

邮政挂号印刷品 presswork.php

申通快递 sto_express.php

顺丰速运 sf_express.php

圆通速递 yto.php

中通速递 zto.php

下面修改下各个快递的货到付款

例如: 想让顺丰快递能支持 货到付款.

在ecshop 程序的主目录下:  找到 includes/modules/shipping/sf_express.php  这个文件

文件中查找下面的内容

/* 配送方式是否支持货到付款 */
$modules[$i]['cod']     = true;              注:false 默认是不支持的  把它改成 true .

然后进入后台把顺丰快递 卸载   然后重新安装 就ok了  .

如果需要修改其他的配送方式,方法也是一样的 只是要找到对应的 快递php 程序

ecshop 后台订单导出

eBestMall 发表了文章 • 0 个评论 • 86 次浏览 • 2018-08-23 17:02 • 来自相关话题

1.获取订单列表信息:这里只导出 '订单号','时间','付款方式','金额'
2.格式化数据
header("Content-type:text/html;charset=utf-8");
//获取订单列表
$sql = "SELECT order_sn,add_time,confirm_time,order_amount,currency,pay_name,goods_amount,shipping_fee,(goods_amount + shipping_fee) AS total FROM ".$GLOBALS['fds']->table('order_info')." WHERE pay_status=2  ORDER BY order_id DESC";
$order_list = $GLOBALS['db']->getAll($sql);
if($order_list){
    foreach($order_list as $k=>$v){
        $order_list[$k]['format_confirm_time'] = local_date("Y/m/d",$v['confirm_time']);//付款时间
        $order_list[$k]['format_add_time'] = local_date("Y/m/d",$v['add_time']);//添加时间
    }
}
//整理数据
if($order_list){
    $temp = array();
    foreach($order_list as $key=>$val){
        $temp[$key]['order_sn'] = $val['order_sn'];
        $temp[$key]['format_confirm_time'] = $val['format_confirm_time'];    
        $temp[$key]['pay_name'] = $val['pay_name'];
        $temp[$key]['order_amount_s'] = $val['total'].' '.$val['currency'];    
    }
}
$title = array('订单号','时间','付款方式','金额');
exportexcel($temp,$title,'order');
3.创建exportexcel函数
/**
 * 导出数据为excel表格
 *@param $data    一个二维数组,结构如同从数据库查出来的数组
 *@param $title   excel的第一行标题,一个数组,如果为空则没有标题
 *@param $filename 下载的文件名
 *@examlpe
$stu = M ('User');
$arr = $stu -> select();
exportexcel($arr,array('id','账户','密码','昵称'),'文件名!');
 */
function exportexcel($data=array(),$title=array(),$filename='report'){
    header("Content-type:application/octet-stream");
    header("Accept-Ranges:bytes");
    header("Content-type:application/vnd.ms-excel");
    header("Content-Disposition:attachment;filename=".$filename.".xls");
    header("Pragma: no-cache");
    header("Expires: 0");
    //导出xls 开始
    if (!empty($title)){
        foreach ($title as $k => $v) {
            $title[$k]=iconv("utf-8", "gb2312",$v);
        }
        $title= implode("\t", $title);
        echo "$title\n";
    }
    if (!empty($data)){
        foreach($data as $key=>$val){
            foreach ($val as $ck => $cv) {
                $data[$key][$ck]=iconv("UTF-8", "GB2312", $cv);
            }
            $data[$key]=implode("\t", $data[$key]);

        }
        echo implode("\n",$data);
    }
} 查看全部
1.获取订单列表信息:这里只导出 '订单号','时间','付款方式','金额'
2.格式化数据
header("Content-type:text/html;charset=utf-8");
//获取订单列表
$sql = "SELECT order_sn,add_time,confirm_time,order_amount,currency,pay_name,goods_amount,shipping_fee,(goods_amount + shipping_fee) AS total FROM ".$GLOBALS['fds']->table('order_info')." WHERE pay_status=2  ORDER BY order_id DESC";
$order_list = $GLOBALS['db']->getAll($sql);
if($order_list){
    foreach($order_list as $k=>$v){
        $order_list[$k]['format_confirm_time'] = local_date("Y/m/d",$v['confirm_time']);//付款时间
        $order_list[$k]['format_add_time'] = local_date("Y/m/d",$v['add_time']);//添加时间
    }
}
//整理数据
if($order_list){
    $temp = array();
    foreach($order_list as $key=>$val){
        $temp[$key]['order_sn'] = $val['order_sn'];
        $temp[$key]['format_confirm_time'] = $val['format_confirm_time'];    
        $temp[$key]['pay_name'] = $val['pay_name'];
        $temp[$key]['order_amount_s'] = $val['total'].' '.$val['currency'];    
    }
}
$title = array('订单号','时间','付款方式','金额');
exportexcel($temp,$title,'order');
3.创建exportexcel函数
/**
 * 导出数据为excel表格
 *@param $data    一个二维数组,结构如同从数据库查出来的数组
 *@param $title   excel的第一行标题,一个数组,如果为空则没有标题
 *@param $filename 下载的文件名
 *@examlpe
$stu = M ('User');
$arr = $stu -> select();
exportexcel($arr,array('id','账户','密码','昵称'),'文件名!');
 */
function exportexcel($data=array(),$title=array(),$filename='report'){
    header("Content-type:application/octet-stream");
    header("Accept-Ranges:bytes");
    header("Content-type:application/vnd.ms-excel");
    header("Content-Disposition:attachment;filename=".$filename.".xls");
    header("Pragma: no-cache");
    header("Expires: 0");
    //导出xls 开始
    if (!empty($title)){
        foreach ($title as $k => $v) {
            $title[$k]=iconv("utf-8", "gb2312",$v);
        }
        $title= implode("\t", $title);
        echo "$title\n";
    }
    if (!empty($data)){
        foreach($data as $key=>$val){
            foreach ($val as $ck => $cv) {
                $data[$key][$ck]=iconv("UTF-8", "GB2312", $cv);
            }
            $data[$key]=implode("\t", $data[$key]);

        }
        echo implode("\n",$data);
    }
}

ecshop 首页显示每个分类的产品列表

eBestMall 发表了文章 • 0 个评论 • 64 次浏览 • 2018-08-23 17:01 • 来自相关话题

 首页显示每个分类的产品列表.txt 原创


 方案1 , 分别读取数据,直接解析后,,


 // add yangggg
    $goods_list_str = '';
    foreach($cat_list_row  as $cat_row){


        $children = get_children($cat_row['cat_id']);
        $cat_goods_list_row = get_category_recommend_goods('best','', $children);


        //print_r($cat_goods_list_row);


        $smarty->assign('goods_cat_list',$cat_goods_list_row);
        $smarty->assign('goods_cat',$cat_row);
        //echo $smarty->fetch('library/cat_goods_list.lbi');
        //exit();
        $goods_list_str .=$smarty->fetch('library/cat_goods_list.lbi');
    }
    $smarty->assign('goods_list_str',$goods_list_str);
    //var_dump($cat_goods_list);




    模板中 
    goods_list_str




cat_goods_list.lbi


        <div class="w mt29 default_floor_show">
        <div class="floor_top clearfix">
        <div class="w960_nav Left JS_floor_nav">
        <a class="title-bg title JS_title title-{$goods_cat.sort_order}F" title="{$goods_cat.name}" target="_blank" href="{$goods_cat.url}">
        <span class="item Left">{$goods_cat.sort_order}F {$goods_cat.name}</span>
        <span class="sign Right"></span>
        </a>
        <b class="title-shadow"></b>
        <ul>










        </ul>
        </div>
        </div>
        </div>


        <div id="JS_list_panel" class="list-panel">
        <div class="w list-wrap">
        <ul class="list-goods clearfix">
        <!--{foreach from=$goods_cat_list item=goods name=gli}--> 


         <!-- {if $goods.id} -->
        <li class="g-item <!--{if $smarty.foreach.gli.index mod 4 eq 3}-->last4<!--{/if}-->">
            <!--{if $goods.watermark_img neq "" } -->
            <div class="g-float" style="background:url(images/{$goods.watermark_img}.png) center center no-repeat;_background: none;_filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(images/{$goods.watermark_img}.png);"></div>
            <!--{/if}-->
            <div class="g-dtl">
                <a href="{$goods.url}" target="_blank"><img title="{$goods.name}" alt="{$goods.name}" src="{$goods.thumb}" class="d-img"></a>


                <a href="{$goods.url}" title="{$goods.name|escape:html}" class="d-name"><span>{$goods.name}</span><span class="n-extra">{$goods.goods_brief}</span></a><div class="d-price">
                    <strong class="p-money">
                        <sub class="m-mark">¥</sub>
                        <span class="m-count JS_async_price">    
                            {if $goods.user_price}
                            {foreach from=$goods.user_price item=user_price}                                        
                                {if $user_price.rank_id eq $user_rank}{$user_price.price}{/if}
                            {/foreach}
                            {/if} 
                        </span>
                    </strong>
                    <del class="p-del">
                        <sub class="d-mark">¥</sub>
                        {$goods.shop_price}
                    </del>                            


                    <a href="javascript:void(0);" style="float:right; line-height:20px; margin:8px 10px;">
                            销量
                            <b class="t-num JS_async_sale_num">{$goods.sales_volume}</b>
                        </a>
                </div>
                <div class="d-options">
                    <a class="list-bg o-btn o-cart" href="javascript:addToCart({$goods.id})" style="background:#ffc232;">
                        
                        <span>加入购物车</span>
                    </a>
                    <a class="list-bg o-btn o-collect" href="javascript:collect({$goods.id});"  style="background:#ffc232;">立即收藏</a>
                </div>
            </div>                
        </li>
        <!--{/if}-->
        <!--{/foreach}-->  
        </ul>
        </div>
        </div>






=============================================================================================================================================================================================================


                分割线


=============================================================================================================================================================================================================


方案2


  使用嵌套循环,吧分类列表数据,保存在3维数组里面


  php代码




    foreach($cat_list_row  as $cat_row){


        $children = get_children($cat_row['cat_id']);
        //echo $children .PHP_EOL;
        $cat_goods_list[$cat_row['cat_id']] = get_category_recommend_goods('best','', $children);
        //print_r($cat_goods_list_row);


    }


    $smarty->assign('cat_goods_list',$cat_goods_list);
    $smarty->assign('goods_cat_list',$cat_list_row);




  模板






<!--{foreach from=$goods_cat_list item=goods_cat name=foo}-->
<div class="w mt29 default_floor_show">
    <div class="floor_top clearfix">
        <div class="w960_nav Left JS_floor_nav">
            <a class="title-bg title JS_title title-{$goods_cat.sort_order}F" title="{$goods_cat.name}" target="_blank" href="{$goods_cat.url}">
                <span class="item Left">{$goods_cat.sort_order}F {$goods_cat.name}</span>
                <span class="sign Right"></span>
            </a>
            <b class="title-shadow"></b>
            <ul>
                    <!--{foreach from=$cat_goods_list item=goods_list name=gli key=k}-->
                      {$k}--{$goods_cat.cat_id}
                     {if $k eq $goods_cat.cat_id}
                         <!--{foreach from=$goods_list item=goods name=gli key=kk}-->
                            {$goods.name}{$k}
                        <!--{/foreach}-->
                     {/if}
                    <!--{/foreach}-->
            </ul>


        </div>
    </div>
</div>
<!--{/foreach}-->




=======================


注意
                <!--{foreach from=$cat_goods_list item=goods_list name=gli key=k}-->
                      {$k}--{$goods_cat.cat_id}
                     {if $k eq $goods_cat.cat_id}
                         <!--{foreach from=$goods_list item=goods name=gli key=kk}-->
                            {$goods.name}{$k}
                        <!--{/foreach}-->
                     {/if}
                    <!--{/foreach}-->
================================
首页推荐商品数量设置 查看全部
 首页显示每个分类的产品列表.txt 原创


 方案1 , 分别读取数据,直接解析后,,


 // add yangggg
    $goods_list_str = '';
    foreach($cat_list_row  as $cat_row){


        $children = get_children($cat_row['cat_id']);
        $cat_goods_list_row = get_category_recommend_goods('best','', $children);


        //print_r($cat_goods_list_row);


        $smarty->assign('goods_cat_list',$cat_goods_list_row);
        $smarty->assign('goods_cat',$cat_row);
        //echo $smarty->fetch('library/cat_goods_list.lbi');
        //exit();
        $goods_list_str .=$smarty->fetch('library/cat_goods_list.lbi');
    }
    $smarty->assign('goods_list_str',$goods_list_str);
    //var_dump($cat_goods_list);




    模板中 
    goods_list_str




cat_goods_list.lbi


        <div class="w mt29 default_floor_show">
        <div class="floor_top clearfix">
        <div class="w960_nav Left JS_floor_nav">
        <a class="title-bg title JS_title title-{$goods_cat.sort_order}F" title="{$goods_cat.name}" target="_blank" href="{$goods_cat.url}">
        <span class="item Left">{$goods_cat.sort_order}F {$goods_cat.name}</span>
        <span class="sign Right"></span>
        </a>
        <b class="title-shadow"></b>
        <ul>










        </ul>
        </div>
        </div>
        </div>


        <div id="JS_list_panel" class="list-panel">
        <div class="w list-wrap">
        <ul class="list-goods clearfix">
        <!--{foreach from=$goods_cat_list item=goods name=gli}--> 


         <!-- {if $goods.id} -->
        <li class="g-item <!--{if $smarty.foreach.gli.index mod 4 eq 3}-->last4<!--{/if}-->">
            <!--{if $goods.watermark_img neq "" } -->
            <div class="g-float" style="background:url(images/{$goods.watermark_img}.png) center center no-repeat;_background: none;_filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(images/{$goods.watermark_img}.png);"></div>
            <!--{/if}-->
            <div class="g-dtl">
                <a href="{$goods.url}" target="_blank"><img title="{$goods.name}" alt="{$goods.name}" src="{$goods.thumb}" class="d-img"></a>


                <a href="{$goods.url}" title="{$goods.name|escape:html}" class="d-name"><span>{$goods.name}</span><span class="n-extra">{$goods.goods_brief}</span></a><div class="d-price">
                    <strong class="p-money">
                        <sub class="m-mark">¥</sub>
                        <span class="m-count JS_async_price">    
                            {if $goods.user_price}
                            {foreach from=$goods.user_price item=user_price}                                        
                                {if $user_price.rank_id eq $user_rank}{$user_price.price}{/if}
                            {/foreach}
                            {/if} 
                        </span>
                    </strong>
                    <del class="p-del">
                        <sub class="d-mark">¥</sub>
                        {$goods.shop_price}
                    </del>                            


                    <a href="javascript:void(0);" style="float:right; line-height:20px; margin:8px 10px;">
                            销量
                            <b class="t-num JS_async_sale_num">{$goods.sales_volume}</b>
                        </a>
                </div>
                <div class="d-options">
                    <a class="list-bg o-btn o-cart" href="javascript:addToCart({$goods.id})" style="background:#ffc232;">
                        
                        <span>加入购物车</span>
                    </a>
                    <a class="list-bg o-btn o-collect" href="javascript:collect({$goods.id});"  style="background:#ffc232;">立即收藏</a>
                </div>
            </div>                
        </li>
        <!--{/if}-->
        <!--{/foreach}-->  
        </ul>
        </div>
        </div>






=============================================================================================================================================================================================================


                分割线


=============================================================================================================================================================================================================


方案2


  使用嵌套循环,吧分类列表数据,保存在3维数组里面


  php代码




    foreach($cat_list_row  as $cat_row){


        $children = get_children($cat_row['cat_id']);
        //echo $children .PHP_EOL;
        $cat_goods_list[$cat_row['cat_id']] = get_category_recommend_goods('best','', $children);
        //print_r($cat_goods_list_row);


    }


    $smarty->assign('cat_goods_list',$cat_goods_list);
    $smarty->assign('goods_cat_list',$cat_list_row);




  模板






<!--{foreach from=$goods_cat_list item=goods_cat name=foo}-->
<div class="w mt29 default_floor_show">
    <div class="floor_top clearfix">
        <div class="w960_nav Left JS_floor_nav">
            <a class="title-bg title JS_title title-{$goods_cat.sort_order}F" title="{$goods_cat.name}" target="_blank" href="{$goods_cat.url}">
                <span class="item Left">{$goods_cat.sort_order}F {$goods_cat.name}</span>
                <span class="sign Right"></span>
            </a>
            <b class="title-shadow"></b>
            <ul>
                    <!--{foreach from=$cat_goods_list item=goods_list name=gli key=k}-->
                      {$k}--{$goods_cat.cat_id}
                     {if $k eq $goods_cat.cat_id}
                         <!--{foreach from=$goods_list item=goods name=gli key=kk}-->
                            {$goods.name}{$k}
                        <!--{/foreach}-->
                     {/if}
                    <!--{/foreach}-->
            </ul>


        </div>
    </div>
</div>
<!--{/foreach}-->




=======================


注意
                <!--{foreach from=$cat_goods_list item=goods_list name=gli key=k}-->
                      {$k}--{$goods_cat.cat_id}
                     {if $k eq $goods_cat.cat_id}
                         <!--{foreach from=$goods_list item=goods name=gli key=kk}-->
                            {$goods.name}{$k}
                        <!--{/foreach}-->
                     {/if}
                    <!--{/foreach}-->
================================
首页推荐商品数量设置

ecshop后台目录修改后台路径修改

eBestMall 发表了文章 • 0 个评论 • 113 次浏览 • 2018-08-23 17:00 • 来自相关话题

自定义ECSHOP后台目录的方法,其实很简单,只改两地,如下: 将ecshop根目录下的admin目录改名,例如admin修改为 68ecshop 然后修改ecshop目录下的 /data/config.php 文件 将 define('ADMIN_PATH','admin'); 修改为 define('ADMIN_PATH','68ecshop');
  查看全部

自定义ECSHOP后台目录的方法,其实很简单,只改两地,如下: 将ecshop根目录下的admin目录改名,例如admin修改为 68ecshop 然后修改ecshop目录下的 /data/config.php 文件 将 define('ADMIN_PATH','admin'); 修改为 define('ADMIN_PATH','68ecshop');
 

ECshop增加paypal_EC流程

eBestMall 发表了文章 • 0 个评论 • 65 次浏览 • 2018-08-23 16:59 • 来自相关话题

第一步 
下载paypal_ec的SDK并放到网站根目录,SDK可以找paypal顾问要源代码或下载地址。 
第二步 
找到\languages\zh_cn\payment 目录增加paypal_ec_2.php,这里的作用是增加语言文件包

<?php

/**
 * ECSHOP PAYPAL_EC语言文件
 */

global $_LANG;

$_LANG['paypal_ec_2']                    = 'paypal_ec_2';
$_LANG['paypal_desc']                  = 'paypal_ec_2';
$_LANG['paypal_account']               = '商户帐号';
$_LANG['paypal_currency']              = '支付货币';
$_LANG['paypal_currency_range']['AUD'] = '澳元';
$_LANG['paypal_currency_range']['CAD'] = '加元';
$_LANG['paypal_currency_range']['EUR'] = '欧元';
$_LANG['paypal_currency_range']['GBP'] = '英镑';
$_LANG['paypal_currency_range']['JPY'] = '日元';
$_LANG['paypal_currency_range']['USD'] = '美元';
$_LANG['paypal_currency_range']['HKD'] = '港元';
$_LANG['paypal_button']                = '立即使用 PayPal 支付';
$_LANG['paypal_txn_id']                = 'PayPal 交易号';

?>

第三步 
核心文件增加 includes\modules\payment 增加文件 
paypal_ec_2.php 
具体内容可根据其他支付方式来写,这里不方便放出源码了有自己的一些逻辑和安全考虑。 
内容上主要是IPN返回和生成支付代码。需要注意的是支付代码里的提交地址我写的是根目录下的文件,也就是第四步里的内容。

第四步 
根目录增加 paypal_ec.php 
该文件主要用于SET操作,跳转到paypal

第五步 
增加paypal_ec.dwt放在模板目录,主要用于错误提示

第六步 
根目录增加paypal_ec_back.php 
paypal EC 回调文件,同步返回地址

第七步 
增加paypal_ec_back_cz.dwt放在模板目录,主要用于错误提示

第八步 
增加order_info中的字段,用于记录同步返回时间

ALTER TABLE ecs_order_info add COLUMN pay_async_time int(10) DEFAULT 0 
1
第九步 
后台找到 支付方式 ,点击安装 paypal_ec_2 查看全部
第一步 
下载paypal_ec的SDK并放到网站根目录,SDK可以找paypal顾问要源代码或下载地址。 
第二步 
找到\languages\zh_cn\payment 目录增加paypal_ec_2.php,这里的作用是增加语言文件包

<?php

/**
 * ECSHOP PAYPAL_EC语言文件
 */

global $_LANG;

$_LANG['paypal_ec_2']                    = 'paypal_ec_2';
$_LANG['paypal_desc']                  = 'paypal_ec_2';
$_LANG['paypal_account']               = '商户帐号';
$_LANG['paypal_currency']              = '支付货币';
$_LANG['paypal_currency_range']['AUD'] = '澳元';
$_LANG['paypal_currency_range']['CAD'] = '加元';
$_LANG['paypal_currency_range']['EUR'] = '欧元';
$_LANG['paypal_currency_range']['GBP'] = '英镑';
$_LANG['paypal_currency_range']['JPY'] = '日元';
$_LANG['paypal_currency_range']['USD'] = '美元';
$_LANG['paypal_currency_range']['HKD'] = '港元';
$_LANG['paypal_button']                = '立即使用 PayPal 支付';
$_LANG['paypal_txn_id']                = 'PayPal 交易号';

?>

第三步 
核心文件增加 includes\modules\payment 增加文件 
paypal_ec_2.php 
具体内容可根据其他支付方式来写,这里不方便放出源码了有自己的一些逻辑和安全考虑。 
内容上主要是IPN返回和生成支付代码。需要注意的是支付代码里的提交地址我写的是根目录下的文件,也就是第四步里的内容。

第四步 
根目录增加 paypal_ec.php 
该文件主要用于SET操作,跳转到paypal

第五步 
增加paypal_ec.dwt放在模板目录,主要用于错误提示

第六步 
根目录增加paypal_ec_back.php 
paypal EC 回调文件,同步返回地址

第七步 
增加paypal_ec_back_cz.dwt放在模板目录,主要用于错误提示

第八步 
增加order_info中的字段,用于记录同步返回时间

ALTER TABLE ecs_order_info add COLUMN pay_async_time int(10) DEFAULT 0 
1
第九步 
后台找到 支付方式 ,点击安装 paypal_ec_2

ECSHOP简化购物流程

eBestMall 发表了文章 • 0 个评论 • 67 次浏览 • 2018-08-23 16:57 • 来自相关话题

往往最可惜的是在购物环节上流失的顾客,如果ecshop购物的流程能够简化一些,我想不仅仅是方便了购物者

,也会提高网店的效益,下面就告诉大家解决ecshop购物流程的简方法。

我们先要进入后台,在商店设置-购物流程中把“是否允许未登录用户购物”选中“允许”,然后“是否一步

购物”选中“是”。

然后在根目录下面找到flow.php这个文件,找到代码:
ecs_header("Location: flow.php?step=login\n");
将上面的改成下面这段即可:
ecs_header("Location: flow.php?step=consignee&direct_shopping=1\n");
这是为了把用户没有登录且没有选定匿名购物,转向到登录页面 ,
现在还没有完成,我们还需要设置一下其他地方,系统设置-会员注册项设置,将所有的选项,只显示QQ和手

机,并且修改为不是必填的。这样做的目的是让顾客在注册帐号的时候感到便捷,另外评论时也可以把验证码

也去掉。

当然这是一种简化方法,还有很多不同的简化程度,例如一步购物:也就是点击购买后,直接到一个页面,填

写购买信息,以及选择快递方式,支付方法,然后确定提交就完成了的。我想减少顾客的流失,也是提高效益

的一个不错的方法。 查看全部
往往最可惜的是在购物环节上流失的顾客,如果ecshop购物的流程能够简化一些,我想不仅仅是方便了购物者

,也会提高网店的效益,下面就告诉大家解决ecshop购物流程的简方法。

我们先要进入后台,在商店设置-购物流程中把“是否允许未登录用户购物”选中“允许”,然后“是否一步

购物”选中“是”。

然后在根目录下面找到flow.php这个文件,找到代码:
ecs_header("Location: flow.php?step=login\n");
将上面的改成下面这段即可:
ecs_header("Location: flow.php?step=consignee&direct_shopping=1\n");
这是为了把用户没有登录且没有选定匿名购物,转向到登录页面 ,
现在还没有完成,我们还需要设置一下其他地方,系统设置-会员注册项设置,将所有的选项,只显示QQ和手

机,并且修改为不是必填的。这样做的目的是让顾客在注册帐号的时候感到便捷,另外评论时也可以把验证码

也去掉。

当然这是一种简化方法,还有很多不同的简化程度,例如一步购物:也就是点击购买后,直接到一个页面,填

写购买信息,以及选择快递方式,支付方法,然后确定提交就完成了的。我想减少顾客的流失,也是提高效益

的一个不错的方法。