2019独角兽企业重金招聘Python工程师标准>>>

淘宝网(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"

<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){$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/yihaodian/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="data:images/icon_2.jpg" align="absmiddle" /></a>:<b id="s_a_price">{foreach from=$value.shippings item=shipping}{$shipping.shipping_name}{$current_price}元 &nbsp;{/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}元 &nbsp;{/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;// ENDif (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配送方式隐藏掉

<!--{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%">&nbsp;</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

转载于:https://my.oschina.net/longhtml/blog/157761

Ecshop实现仿Taobao地区运费模板相关推荐

  1. HTML和CSS仿唯品会首页,ecshop仿唯品会2014全模板带团购品牌特卖

    ecshop仿唯品会2014全模板带团购品牌特卖,一款简洁时尚的综合通用类模板,特别适用于品牌特卖类电商.整站右侧悬浮式导航特效,头部下拉切换式商品分类树功能.首页多个大幅轮播广告图切换,热销商品功能 ...

  2. 电子商城系统运费模板设计

    最近公司要求完善我们商城的运费模板功能,使运费计算更加精确.我接到任务之后就着手分析,到目前为止已实现了一部分.现在把相关的东西记录在这里,为了方便日后自己查看,也希望能够帮助部分初学者,给他们一个个 ...

  3. php电子商务模板,关于php:电商系统设计之运费模板下

    电商大伙每天都在用,相似某猫,某狗等. 电商零碎设计看似简单又很简略,看似简略又很简单 本章适宜初中级工程师细看,大佬请随便 [腾讯云]云产品限时秒杀,爆款1核2G云服务器,首年99元 前言 在订单零 ...

  4. java运费模板设计_猿实战17——实现你未必知晓的运费模板

    猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,变身猿人找到工作不是问题.还等什么呢?关注公号,取基 ...

  5. PHP电商运费模板,拼多多运费模板怎么设置?怎么使用运费模板?

    拼多多开店后在上传产品的时候,需要我们选择运费模板.这就需要我提前设置好以后直接进行选择即可.那么,拼多多运费模板怎么设置?怎么使用运费模板?感兴趣的朋友一起来了解一下吧. 第一步:打开并登陆拼多多商 ...

  6. PHP电商运费模板,电商系统设计之运费模板(下)

    电商大伙每天都在用,类似某猫,某狗等. 电商系统设计看似复杂又很简单,看似简单又很复杂 本章适合初中级工程师细看,大佬请随意 前言 在订单系统中,运费模板是其中一个重要组成部分,看似简单的一个设置,在 ...

  7. java电商快递费收取_电商系统设计之运费模板(上)

    电商大伙每天都在用,类似某猫,某狗等. 电商系统设计看似复杂又很简单,看似简单又很复杂 本章适合初中级工程师细看,大佬请随意 前言 在订单系统中,运费模板是其中一个重要组成部分,看似简单的一个设置,在 ...

  8. java运费模板设计_电商系统设计之运费模板(下)

    电商大伙每天都在用,类似某猫,某狗等. 电商系统设计看似复杂又很简单,看似简单又很复杂 本章适合初中级工程师细看,大佬请随意 前言 在订单系统中,运费模板是其中一个重要组成部分,看似简单的一个设置,在 ...

  9. 【wordpress】Woocommerce设置配送方式及运费模板

    本文仅演示,具体配送方式和运费模板请根据情况修改. 配送类型分别为: 顺丰快递 德邦物流 到付 包邮免运费 配送区域分别为: 包邮区 偏远区域 其他区域 设置完成之后,五种不同的配送类型在不同的区域会 ...

最新文章

  1. mysql开启binlog
  2. 【Python基础】Pandas数据可视化原来也这么厉害
  3. python输入年份月份输出天数_6.2(输入年份 月份 输出该月天数)
  4. MacosX 下GCC编译指定版本的代码
  5. C/C++ 类型内存占用详解
  6. 报错,could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarExc
  7. Android 8.0学习(18)--- Android8.0运行时权限策略变化和适配方案
  8. 50-00-010-配置-kylin-2.6.0官网配置
  9. ffmpeg中的sws_scale算法性能测试
  10. python openstackclient_在Linux系统上安装和配置OpenStack Client(客户端)的方法
  11. Java零基础如何入门学习?给初学者的建议,非常全面
  12. 建模笔记1:建立数学模型
  13. GOM引擎ItemShow代码在NPC对话框中显示装备图片及属性
  14. 支架预压弹性变形值计算_支架预压计算.doc
  15. 计算机视觉常用滤波,【计算机视觉】 滤波器
  16. 1.Matlab 画图输出 EPS 格式文件中文出现乱码
  17. Python爬虫 | 爬取贝壳找房8万+二手房源,看看普通人在北京买房是有多难!
  18. android property实现路径
  19. ps快捷图标在哪个文件夹_我下载了ps图片编辑器但没有快捷图标怎么办
  20. 数据、数据库、数据库管理系统、数据库系统的概念

热门文章

  1. 软件“吞噬”世界后,我们正在进入“活产品”时代
  2. 为什么 AI 芯片时代必然到来——从TPU开始的几十倍性能之旅
  3. open AI 在DOTA 5v5 比赛中战胜职业选手
  4. 终于可以光明正大的推别人了
  5. 连肝 7 个晚上,总结了 66 条计算机网络的知识点
  6. 【原创】jquery常见的条件判断类型
  7. ES _source字段介绍——json文档,去掉的话无法更新部分文档,最重要的是无法reindex...
  8. python操作符笔记
  9. 高中数学与计算机程序
  10. C/C++结构体的区别