ecshop微信商城
  官方微博: 騰訊  
首頁 > ECSHOP教程 > ECSHOP二次開發 > ECSHOP二次開發教程 > ECSHOP運費配送方式仿淘寶地區運費模板功能開發

ECSHOP運費配送方式仿淘寶地區運費模板功能開發

ECSHOP教程 / ecshop 教程網(www.nrkidn.live) 2015-09-14

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, 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', ";        /* 如果有上傳圖片,需要更新數據庫 */



2.3 后臺添加/編輯商品 實現綁定配送方式"admin/goods_info.htm"

          運費模板          {$lang.select_please}
        {foreach from=$shipping_list item=shipping}                {$shipping.shipping_name}              {/foreach} {$lang.require_field}

在品牌下面,增加綁定運費模板。效果如下:

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)
 { $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  加在需要顯示運費的地方

 
  {foreach from=$regions key=key item=value}
 {if $key == 0} 至 {$current_region}: {foreach from=$value.shippings item=shipping}
 {$shipping.shipping_name}{$current_price}元  
 {/foreach}   {/if}
 {/foreach}  {foreach from=$regions item=value} {$value.region_name} {/foreach}


前臺顯示最終效果圖,默認廣東省

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



/* 檢查收貨人信息是否完整 */
   if (!check_consignee_info($consignee, $flow_type))
   {       /* 如果不完整則轉向到收貨人信息填寫界面 */
       ecs_header("Location: flow.php?step=consignee\n");       exit;
   }   $_POST['how_oos'] = isset($_POST['how_oos']) ? intval($_POST['how_oos']) : 0;   $_POST['card_message'] = isset($_POST['card_message']) ? htmlspecialchars($_POST['card_message']) : '';   $_POST['inv_type'] = !empty($_POST['inv_type']) ? htmlspecialchars($_POST['inv_type']) : '';   $_POST['inv_payee'] = isset($_POST['inv_payee']) ? htmlspecialchars($_POST['inv_payee']) : '';   $_POST['inv_content'] = isset($_POST['inv_content']) ? htmlspecialchars($_POST['inv_content']) : '';   $_POST['postscript'] = isset($_POST['postscript']) ? htmlspecialchars($_POST['postscript']) : '';// LONGHTML 最大值的運費模板 $arr = last_shipping_and_payment();$_SESSION['flow_order']['shipping_id'] = $arr['shipping_id'];// END


將themes/default/flow.dwt配送方式隱藏掉

        {$lang.shipping_method}                                             {$lang.name}              {$lang.describe}              {$lang.fee}              {$lang.free_money}              {$lang.insure_fee}                        
                                                      {$shipping.shipping_name}              {$shipping.shipping_desc}              {$shipping.format_shipping_fee}              {$shipping.free_money}              {if $shipping.insure neq 0}{$shipping.insure_formated}{else}{$lang.not_support_insure}{/if}                        
             
                                                          {$lang.need_insure}


5、經過上面多處增加/修改,測試一下運行效果。

廣東  首重10KG 7元,續重0.7元/KG 



轉載請注明:ECshop119模板屋-ECshop教程網(全國最專業的ECSHOP插件制作商-專業ECSHOP二次開發)

幫助目錄

在線反饋

加ECSHOP模板屋微信語音幫助。

ecshop微信群

與網友交流ECSHOP開發修改。

加入QQ群交流