标签:
淘宝网(Taobao)购物的宝贝详情页面,可以针对不同地区显示不同运费,运费由后台设定;结算时间,按重量、件数计算运费。Ecshop本身有配送方式插件,已有多家物流公司插件,例如:顺丰快递、申通快递、圆通快递等。本文介绍如何实现按地区显示运费,并且让每个商品绑定运费模板。
进入Ecshop后台"系统设置-->配送方式",将“顺丰快递”改名称为“粮食快递”,配送ID号为6。
| 
 1 
 | 
 ALTER TABLE  `ecs_goods` ADD `shipping_id` MEDIUMINT(9) NOT NULL DEFAULT ‘6‘; 
 | 
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
 | 
 /** 
 * 取得已安装的配送方式 
 * @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());”增加调用代码
| 
 1 
2 
3 
4 
 | 
 // LONGHTML 增加运费模板 
$smarty->assign(‘shipping_list‘, shipping_list()); 
// END 
$smarty->assign(‘unit_list‘, get_unit_list()); 
 | 
在“/* 处理商品数据 */”后面,增加POST过来的“shipping_id ”表单值进行赋值
| 
 1 
2 
3 
4 
5 
 | 
 /* 处理商品数据 */ 
// LONGHTML 运费模板(新增,更新) 
$shipping_id = empty($_POST[‘shipping_id‘]) ? ‘0‘ : intval($_POST[‘shipping_id‘]); 
// END 
 | 
最后一步是“插入/更新”商品时,对“shipping_id”字段实现处理。直接替换掉下面代码
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
 | 
 /* 入库 */ 
    if ($is_insert) 
    { 
        if ($code == ‘‘) 
        { 
            $sql = "INSERT INTO " . $ecs->table(‘goods‘) . " (goods_name, goods_name_style, goods_sn, " . 
                    "cat_id, brand_id, shop_price, logi_cost, market_price, is_promote, promote_price, " . 
                    "promote_start_date, promote_end_date, goods_img, index_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, province, city, virtual_buy,shipping_id)" . 
                "VALUES (‘$_POST[goods_name]‘, ‘$goods_name_style‘, ‘$goods_sn‘, ‘$catgory_id‘, " . 
                    "‘$brand_id‘, ‘$shop_price‘, ‘$logi_cost‘, ‘$market_price‘, ‘$is_promote‘,‘$promote_price‘, ". 
                    "‘$promote_start_date‘, ‘$promote_end_date‘, ‘$goods_img‘, ‘$index_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‘, ‘$goods_provincestr‘, ‘$goods_citystr‘, ‘$virtual_buy‘, ‘$shipping_id‘ )"; 
        } 
        else 
        { 
            $sql = "INSERT INTO " . $ecs->table(‘goods‘) . " (goods_name, goods_name_style, goods_sn, " . 
                    "cat_id, brand_id, shop_price, logi_cost, market_price, is_promote, promote_price, " . 
                    "promote_start_date, promote_end_date, goods_img, index_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, province, city, virtual_buy,shipping_id)" . 
                "VALUES (‘$_POST[goods_name]‘, ‘$goods_name_style‘, ‘$goods_sn‘, ‘$catgory_id‘, " . 
                    "‘$brand_id‘, ‘$shop_price‘, ‘$logi_cost‘, ‘$market_price‘, ‘$is_promote‘,‘$promote_price‘, ". 
                    "‘$promote_start_date‘, ‘$promote_end_date‘, ‘$goods_img‘, ‘$index_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‘, ‘$goods_provincestr‘, ‘$goods_citystr‘, ‘$virtual_buy‘, ‘$shipping_id‘)"; 
        } 
    } 
    else 
    { 
        /* 如果有上传图片,删除原来的商品图 */ 
        $sql = "SELECT goods_thumb, goods_img, index_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‘]); 
        } 
        if ($index_img && $row[‘index_img‘] && !goods_parse_url($row[‘index_img‘])) 
        { 
            @unlink(ROOT_PATH . $row[‘index_img‘]); 
        } 
        $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‘, " . 
                "logi_cost = ‘$logi_cost‘, " . 
                "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‘, " . 
                "promote_end_date = ‘$promote_end_date‘, "; 
        /* 如果有上传图片,需要更新数据库 */ 
 | 
| 
 1 
2 
3 
4 
5 
6 
7 
8 
 | 
 <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> 
 | 
以主题default为例,增加新文件:
1、chrome.js (themes/default/js)
2、icon_2.jpg (themes/default/images)相关文件下载
goods.php页面商品显示部分加入调用代码
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
 | 
 /***** 商品页按地区显示运费 ***********************************************************************/ 
 $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) 
 { 
 $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 加在需要显示运费的地方,根据自己需要调整。
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
 | 
  <!--{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}--> 
 | 
前台显示最终效果图,默认广东省
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
 | 
 /** 
 * 获得上一次用户采用的支付和配送方式 
 * 
 * @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步骤,调用商品绑定的配送方式
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
 | 
    /* 对是否允许修改购物车赋值 */ 
   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配送方式隐藏掉
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
 | 
 <!--{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}--> 
 | 
广东 首重10KG 7元,续重0.7元/KG
原文地址:http://blog.uuecs.com/archives/ecshop-achieve-imitation-taobao-freight-by-region.html
标签:
原文地址:http://www.cnblogs.com/zhicheng/p/4630005.html