ECSHOP运费配送方式仿淘宝地区运费模板功能开发

ECSHOP运费配送方式仿淘宝地区运费模板功能开发

目录:

1、Ecshop后台配送方式创建
2、商品绑定配送方式的运费模板
2.1 数据表“ecs_goods”增加一个字段,执行下面SQL语句:
2.2 后台添加/编辑 商品 调出已经安装配送方式 "admin/ goods.php ",将此shipping_list函数添加到goods.php最末处。
2.3 后台添加/编辑商品 实现绑定配送方式"admin/goods_info.htm"
3、前台商品详情调用设置好的配送方式
4、结算流程中,根据配送地址计算运费
4.1 重写“include/lib_order.php”中last_shipping_and_payment函数。多个商品,不同配送方式,调用配送方式ID,以最贵配送方式计算。买家可以找客服进行,运费改价。
5、经过上面多处增加/修改,测试一下运行效果。

淘宝网(Taobao)购物的宝贝详情页面,可以针对不同地区显示不同运费,运费由后台设定;结算时间,按重量、件数计算运费。Ecshop本身有配送方式插件,已有多家物流公司插件,例如:顺丰快递、申通快递、圆通快递等。本文介绍如何实现按地区显示运费,并且让每个商品绑定运费模板。

1、Ecshop后台配送方式创建

进入Ecshop后台"系统设置-->配送方式",将“顺丰快递”改名称为“粮食快递”,配送ID号为6。

2、商品绑定配送方式的运费模板

2.1 数据表“ecs_goods”增加一个字段,执行下面SQL语句:

ALTER TABLE  `ecs_goods` ADD `shipping_id` MEDIUMINT(9) NOT NULL DEFAULT '6';

2.2 后台添加/编辑 商品 调出已经安装配送方式 "admin/ goods.php ",将此shipping_list函数添加到goods.php最末处。

/**
 * 取得已安装的配送方式
 * @return  array   已安装的配送方式
*/
function shipping_list()
{
    $sql = 'SELECT shipping_id, shipping_name ' .
            'FROM ' . $GLOBALS['ecs']->table('shipping') .
            ' WHERE enabled = 1';
    return $GLOBALS['db']->getAll($sql);
}

在代码前“$smarty->assign('unit_list', get_unit_list());”增加调用代码

// LONGHTML 增加运费模板
$smarty->assign('shipping_list', shipping_list());
// END
$smarty->assign('unit_list', get_unit_list());

在“/* 处理商品数据 */”后面,增加POST过来的“shipping_id ”表单值进行赋值

/* 处理商品数据 */
// LONGHTML 运费模板(新增,更新)
$shipping_id = empty($_POST['shipping_id']) ? '0' : intval($_POST['shipping_id']);
// END

最后一步是“插入/更新”商品时,对“shipping_id”字段实现处理。直接替换掉下面代码

/* 入库 */
    if ($is_insert)
    {
        if ($code == '')
        {
            $sql = "INSERT INTO " . $ecs->table('goods') . " (goods_name, goods_name_style, goods_sn, " .
                    "cat_id, brand_id, shop_price, market_price, is_promote, promote_price, " .
                    "promote_start_date, promote_end_date, goods_img,  goods_thumb, original_img, keywords, goods_brief, " .
                    "seller_note, goods_weight, goods_number, warn_number, integral, give_integral, is_best, is_new, is_hot, " .
                    "is_on_sale, is_alone_sale, is_shipping, goods_desc, add_time, last_update, goods_type, rank_integral, suppliers_id, shipping_id)" .//注意这里增加了一个字段 shipping_id
                "VALUES ('$_POST[goods_name]', '$goods_name_style', '$goods_sn', '$catgory_id', " .
                    "'$brand_id', '$shop_price',  '$market_price', '$is_promote','$promote_price', ".
                    "'$promote_start_date', '$promote_end_date', '$goods_img', '$goods_thumb', '$original_img', ".
                    "'$_POST[keywords]', '$_POST[goods_brief]', '$_POST[seller_note]', '$goods_weight', '$goods_number',".
                    " '$warn_number', '$_POST[integral]', '$give_integral', '$is_best', '$is_new', '$is_hot', '$is_on_sale', '$is_alone_sale', $is_shipping, ".
                    " '$_POST[goods_desc]', '" . gmtime() . "', '". gmtime() ."', '$goods_type', '$rank_integral', '$suppliers_id',  '$shipping_id' )";//注意这里增加了字段 shiping_id  by uuecs.com
        }
        else
        {
            $sql = "INSERT INTO " . $ecs->table('goods') . " (goods_name, goods_name_style, goods_sn, " .
                    "cat_id, brand_id, shop_price,  market_price, is_promote, promote_price, " .
                    "promote_start_date, promote_end_date, goods_img, goods_thumb, original_img, keywords, goods_brief, " .
                    "seller_note, goods_weight, goods_number, warn_number, integral, give_integral, is_best, is_new, is_hot, is_real, " .
                    "is_on_sale, is_alone_sale, is_shipping, goods_desc, add_time, last_update, goods_type, extension_code, rank_integral,shipping_id)" .//注意这里增加了一个字段 shipping_id
                "VALUES ('$_POST[goods_name]', '$goods_name_style', '$goods_sn', '$catgory_id', " .
                    "'$brand_id', '$shop_price', '$market_price', '$is_promote','$promote_price', ".
                    "'$promote_start_date', '$promote_end_date', '$goods_img', '$goods_thumb', '$original_img', ".
                    "'$_POST[keywords]', '$_POST[goods_brief]', '$_POST[seller_note]', '$goods_weight', '$goods_number',".
                    " '$warn_number', '$_POST[integral]', '$give_integral', '$is_best', '$is_new', '$is_hot', 0, '$is_on_sale', '$is_alone_sale', $is_shipping, ".
                    " '$_POST[goods_desc]', '" . gmtime() . "', '". gmtime() ."', '$goods_type', '$code', '$rank_integral', '$shipping_id')";//注意这里增加了一个字段 shipping_id
        }
    }
    else
    {
        /* 如果有上传图片,删除原来的商品图 */
        $sql = "SELECT goods_thumb, goods_img, original_img " .
                    " FROM " . $ecs->table('goods') .
                    " WHERE goods_id = '$_REQUEST[goods_id]'";
        $row = $db->getRow($sql);
        if ($proc_thumb && $goods_img && $row['goods_img'] && !goods_parse_url($row['goods_img']))
        {
            @unlink(ROOT_PATH . $row['goods_img']);
            @unlink(ROOT_PATH . $row['original_img']);
        }
        if ($proc_thumb && $goods_thumb && $row['goods_thumb'] && !goods_parse_url($row['goods_thumb']))
        {
            @unlink(ROOT_PATH . $row['goods_thumb']);
        }
        $sql = "UPDATE " . $ecs->table('goods') . " SET " .
                "goods_name = '$_POST[goods_name]', " .
                "goods_name_style = '$goods_name_style', " .
                "goods_sn = '$goods_sn', " .
                "cat_id = '$catgory_id', " .
                "brand_id = '$brand_id', " .
                "shop_price = '$shop_price', " .
                "market_price = '$market_price', " .
                "is_promote = '$is_promote', " .
                "promote_price = '$promote_price', " .
                "promote_start_date = '$promote_start_date', " .
                "suppliers_id = '$suppliers_id', " .
             //   "province = '$goods_provincestr', " .
              //  "city = '$goods_citystr', " .
               // "virtual_buy = '$virtual_buy', " .
                "shipping_id = '$shipping_id', " .//注意这里新增的ecshop119.com
                "promote_end_date = '$promote_end_date', ";
        /* 如果有上传图片,需要更新数据库 */

2.3 后台添加/编辑商品 实现绑定配送方式"admin/goods_info.htm"

<tr>
          <td class="label">运费模板</td>
          <td><select name="shipping_id" ><option value="0">{$lang.select_please}
{foreach from=$shipping_list item=shipping}
                <option value="{$shipping.shipping_id}" {if $shipping.shipping_id eq $goods.shipping_id}selected{/if}>{$shipping.shipping_name}</option>
              {/foreach}
 </select>{$lang.require_field}</td>
        </tr>

在品牌下面,增加绑定运费模板。效果如下:

3、前台商品详情调用设置好的配送方式

以主题default为例,增加新文件:
          1、chrome.js (themes/default/js)
          2、icon_2.jpg (themes/default/images)

goods.php页面商品显示部分加入调用代码

/***** 商品页按地区显示运费 ***********************************************************************/
 $shippings = array();
 $res = $db->GetAll("SELECT shipping_name, shipping_id FROM ecs_shipping WHERE shipping_id=".$goods['shipping_id']);
 foreach ($res as $value)
 {
 $areas = array();
 $res1 = $db->GetAll("SELECT * FROM ecs_shipping_area WHERE shipping_id = $value[shipping_id]");
 foreach ($res1 as $area)
 {
 $configure = unserialize($area['configure']);
 if (is_array($configure))
 {
 foreach ($configure as $c)
 {
 if ($c['name'] == 'base_fee')
 {
 $price = $c['value'];
 }
 }
 }
 $sql = "SELECT a.region_id, r.region_name ".
 "FROM ".$ecs->table('area_region')." AS a, ".$ecs->table('region'). " AS r ".
 "WHERE r.region_id=a.region_id AND a.shipping_area_id='$area[shipping_area_id]'";
 $res2 = $db->query($sql);
 while ($arr = $db->fetchRow($res2))
 {
 $value['areas'][$arr['region_name']] = $price;
 }
 }
 $shippings[] = $value;
 }
 $res = $db->GetAll("SELECT region_id,region_name FROM ecs_region WHERE parent_id = 1");
 if($goods['shipping_id'] == 6) //默认快递ID
 {
 $current_region = '广东';   //默认显示广东省
 $smarty->assign('current_region',   $current_region);
 $smarty->assign('current_price',   '7'); //默认价格
 }
 foreach ($res as $value)
 {
 $row = array();
 foreach ($shippings as $a => $shipping)
 {
 if ($shipping['areas'])
 {
 foreach ($shipping['areas'] as $key => $price)
 {
 if ($key == $value['region_name'])
 {
 $row[$a]['shipping_price'] = $price;
 }
 }
 }
 if ($row[$a]['shipping_price'] > 0)
 {
 $row[$a]['shipping_name'] = $shipping['shipping_name'];
 $value['shippings'] = $row;
 }
 }
 if ($value['shippings']) $regions[] = $value;
 }
 $smarty->assign('regions',              $regions);
 /****************************************************************************/

goods.dwt  加在需要显示运费的地方

<!--{if $regions}-->
 <script src="themes/default/js/chrome.js" type="text/javascript"></script>
 {foreach from=$regions key=key item=value}
 {if $key == 0}
 <p id="chromemenu">至 <a rel="dropmenu1" href="javascript:;"><b id="s_a_name">{$current_region}</b><img style="margin:0 2px 0 2px;" src="images/icon_2.jpg" align="absmiddle" /></a>:<b id="s_a_price">
 {foreach from=$value.shippings item=shipping}
 {$shipping.shipping_name}{$current_price}元
 {/foreach}
 </b>
 </p>
 {/if}
 {/foreach}
 <div id="dropmenu1" class="dropmenudiv">
 {foreach from=$regions item=value}
 <a href="javascript:;" onclick="show_shipping('{$value.region_name}','{foreach from=$value.shippings item=shipping}{$shipping.shipping_name}{$shipping.shipping_price}元  {/foreach}')">{$value.region_name}</a>
 {/foreach}
 </div>
 <script>
 function show_shipping(name,price)
 {
 document.getElementById("s_a_name").innerHTML = name;
 document.getElementById("s_a_price").innerHTML = price;
 }
 cssdropdown.startchrome("chromemenu");
 </script>
 <style>
 #chromemenu b { font-weight:normal}
 .dropmenudiv {position:absolute;top: 0;z-index:100;width:200px;visibility: hidden; background:#fdffee; padding:8px; border:solid #ffbf69 2px; line-height:25px;}
 .dropmenudiv a { margin:0 5px 0 5px;}
 </style>
 <!--{/if}-->

前台显示最终效果图,默认广东省

4、结算流程中,根据配送地址计算运费

4.1 重写“include/lib_order.php”中last_shipping_and_payment函数。多个商品,不同配送方式,调用配送方式ID,以最贵配送方式计算。买家可以找客服进行,运费改价。

/**
 * 获得上一次用户采用的支付和配送方式
 *
 * @access  public
 * @return  void
 */
function last_shipping_and_payment()
{
    $sql = "SELECT shipping_id, pay_id " .
            " FROM " . $GLOBALS['ecs']->table('order_info') .
            " WHERE user_id = '$_SESSION[user_id]' " .
            " ORDER BY order_id DESC LIMIT 1";
    $row = $GLOBALS['db']->getRow($sql);
/* LONGHTML 获得购物车中商品 运费模板最大值 */
$sql = "SELECT DISTINCT max(g.shipping_id) as  shipping_id " .
            " FROM " . $GLOBALS['ecs']->table('cart') ." AS c ".
            " LEFT JOIN " . $GLOBALS['ecs']->table('goods') . " AS g ON c.goods_id = g.goods_id" .
            " WHERE c.`session_id` =  '" . SESS_ID . "'".
" AND c.`extension_code` !=  'package_buy' ";
    $shipping_id = $GLOBALS['db']->getOne($sql);
$row['shipping_id'] = $shipping_id;
// END
    if (empty($row))
    {
        /* 如果获得是一个空数组,则返回默认值 */
        $row = array('shipping_id' => 0, 'pay_id' => 0);
    }
    return $row;
}

4.2  flow.php购物流程checkout,done步骤,调用商品绑定的配送方式

/* 对是否允许修改购物车赋值 */
   if ($flow_type != CART_GENERAL_GOODS || $_CFG['one_step_buy'] == '1')
   {
       $smarty->assign('allow_edit_cart', 0);
   }
   else
   {
       $smarty->assign('allow_edit_cart', 1);
   }
// LONGHTML 最大值的运费模板
$arr = last_shipping_and_payment();
$_SESSION['flow_order']['shipping_id'] = $arr['shipping_id'];
$smarty->assign('select_shipping_id', $arr['shipping_id']);
// END

将themes/default/flow.dwt配送方式隐藏掉

<!--{if $total.real_goods_count neq 0}-->
    <div class="" style="display:none;">
    <h5><span>{$lang.shipping_method}</span></h5>
    <table width="984" align="center" border="0" cellpadding="5" cellspacing="1" bgcolor="#dddddd" id="shippingTable">
            <tr align="center">
              <th align="center" bgcolor="#ffffff" width="5%"> </th>
              <th align="center" bgcolor="#ffffff" width="25%">{$lang.name}</th>
              <th align="center" bgcolor="#ffffff">{$lang.describe}</th>
              <th align="center" bgcolor="#ffffff" width="15%">{$lang.fee}</th>
              <th align="center" bgcolor="#ffffff" width="15%">{$lang.free_money}</th>
              <th align="center" bgcolor="#ffffff" width="15%">{$lang.insure_fee}</th>
            </tr>
            <!-- {foreach from=$shipping_list item=shipping} 循环配送方式 -->
            <tr align="center">
              <td align="center" bgcolor="#ffffff" valign="top"><input name="shipping" id="shipping_se" type="radio" value="{$shipping.shipping_id}" {if ($order.shipping_id eq $shipping.shipping_id) or true}checked="true"{/if} supportCod="{$shipping.support_cod}" insure="{$shipping.insure}" onclick="selectShipping(this)" />
              </td>
              <td align="center" bgcolor="#ffffff" valign="top"><strong>{$shipping.shipping_name}</strong></td>
              <td align="center" bgcolor="#ffffff" valign="top">{$shipping.shipping_desc}</td>
              <td bgcolor="#ffffff" align="center" valign="top">{$shipping.format_shipping_fee}</td>
              <td bgcolor="#ffffff" align="center" valign="top">{$shipping.free_money}</td>
              <td bgcolor="#ffffff" align="center" valign="top">{if $shipping.insure neq 0}{$shipping.insure_formated}{else}{$lang.not_support_insure}{/if}</td>
            </tr>
            <!-- {/foreach} 循环配送方式 -->
<!-- LONGHTML --><script>selectShipping02({$select_shipping_id});</script> <!-- END -->
            <tr align="center">
              <td colspan="6" bgcolor="#ffffff" align="center"><label for="ECS_NEEDINSURE">
                <input name="need_insure" id="ECS_NEEDINSURE" type="checkbox"  onclick="selectInsure(this.checked)" value="1" {if $order.need_insure}checked="true"{/if} {if $insure_disabled}disabled="true"{/if}  />
                {$lang.need_insure} </label></td>
            </tr>
          </table>
    </div>
    <div class="blank"></div>
        <!--{else}-->
        <input name = "shipping" type="radio" value = "-1" checked="checked"  style="display:none"/>
        <!--{/if}-->

5、经过上面多处增加/修改,测试一下运行效果。

广东  首重10KG 7元,续重0.7元/KG

文章转载:http://www.gehut.cn/

(0)

相关推荐

  • 如何修改Ecshop的配送方式续重的重量单位为500克

    在Ecshop 中,大多的快递公司的首重都是500克,但在Echsop中像中通.圆通.申通的快递插件都是1kg作为首重的,在后台是无法更改首重的单位的,所以如果要修改,必须要修改源代码. Ecshop ...

  • ecshop商品页仿淘宝运费查询功能

    [ecshop 仿淘宝 运费]方法:此方法没有调用数据库里那个,而是用JS实现的. [ecshop 仿淘宝 运费]步骤: 1.goods.php(红色为增加的代码) 大概33行: $goods_id ...

  • ECSHOP配送方式配送区域设置使用说明

    各位ECSHOP网店系统用户大家好,欢迎来到ECSHOP教程网图文教程,今天为大家详细解说一下ECSHOP配送方式. ECSHOP教程网ECSHOP视频教程也再不断的完善与跟进,期待大家的关注!希望在 ...

  • ecshop商品属性仿淘宝选择功能

    经常网友问商品的颜色尺 寸等属性选择,ecshop默认的是下拉菜单和点选两种形式,样式特别不耐看,淘宝选择那种方形的框选已经是主流,像shopex的属性选择就是仿淘宝那 种框选特别美观!下面分享一下e ...

  • ECSHOP商品属性库存关联仿淘宝商品详细页

    效果如下: 实现方法,修改goods.dwt如下: {$value.label} 在显示详细信息合适的地方加 (库存:{$goods.goods_number} {$goods.measure_uni ...

  • ECSHOP配送方式增加默认指定配送区域地区

    ecshop 收货人信息中,默认配送区域是这样的: 现在我们把它改为指定配送,比如指定为江苏省苏州市 修改根目录下folw.php文件 找到这句代码 $smarty->assign('consi ...

  • 给Ecshop商城的支付方式或配送方式设置默认值

    经常有朋友问起这个问题.给派送方式或支付方式设置一个默认值,比方说设置成一个信誉比较好的快递公司. 下面以2.7.2版为例进行讲解,其他版本估计也使用.有兴趣的朋友可以在老版本上测试下. 例如将配送方 ...

  • ecshop配送方式出错lib_common.php on line 959

    ecshop只带的配送方式BUG 只要不是正式商业版的ECSHOP都会出现 配送方式配置出错.提示 Warning: number_format() expects parameter 1 to be ...

  • 让ecshop默认选择第默认的配送方式

    下面以2.7.3版为例进行讲解,其他版本估计也使用. 方法一: 例如将配送方式默认为"申通快递",支付方式默认为"支付宝",申通快递的ID 为 14,支付宝的I ...