Zen-cart自定义运费模块-China Post

中国邮政小包有挂号和平邮,这里说的是挂号国家邮政小包。这个运输方式把国家分成10个区,每个区对应不同的费率(每公斤多少钱)。 由于针对不同国家可能对应了不同费率,所有


中国邮政小包有挂号和平邮,这里说的是挂号国家邮政小包。这个运输方式把国家分成10个区,每个区对应不同的费率(每公斤多少钱)。

由于针对不同国家可能对应了不同费率,所有实现这个插件并没有那么简单,以上图片展示的只是一些基本参数,实际的国家分区费率表需要导入到数据库中,而这些Zen-cart并没有实现。

这些工作量是有点大的,比如为了能使用国家对应的中文名称包国家导入到分区表,我们首先需要扩展countries表,把每个国家的中文名对应上去。这个步骤可以写一段程序批量导入,这里跳过了。

接下来是建立分区,这里重复利用Zen-cart默认的geo_zone

要导入的表:

不过为了让每个geo_zone对应费率,需要对geo_zone进行扩展(添加cost字段)


1

ALTER TABLE `geo_zones` ADD `cost` VARCHAR( 64 ) NULL DEFAULT ‘0‘

这样分区对应的国家的对应关系就建立起来了,每个分区用cost字段记录了这个分区的费率。

那么China Post运费模块的quote方法:


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

// class methods

function quote($method = ‘‘) {

global $order,$shipping_weight,$shipping_num_boxes,$db,$currencies;

$total_weight = $shipping_weight * $shipping_num_boxes;

if($total_weight > (int)MODULE_SHIPPING_CHINA_POST_MAX_WEIGHT){

return false;

}

//package weight

$total_weight += (int)MODULE_SHIPPING_CHINA_POST_PACKAGE_WEIGHT;

$cost = $db->Execute("select gz.geo_zone_name, gz.cost, ztgz.zone_id from geo_zones gz, zones_to_geo_zones ztgz where gz.geo_zone_id = ztgz.geo_zone_id and ztgz.zone_country_id = ".(int)$order->delivery[‘country‘][‘id‘]." and ztgz.zone_id = 0 and gz.geo_zone_name like ‘ChinaPost_%‘");

if($cost->RecordCount() > 0){

$first = round((float)MODULE_SHIPPING_CHINA_POST_COST,2);

$continue = round($cost->fields[‘cost‘],2);

$rate = (float)$currencies->currencies[‘CNY‘][‘value‘];

if($rate <= 0){

$rate = 1;

}

$disc = (float)MODULE_SHIPPING_CHINA_POST_RATE;

if($disc <= 0){

$disc = 1;

}

$ttl = round($disc*($first+$continue*ceil($total_weight/10)/100)/$rate,2);

$this->quotes = array(‘id‘ => $this->code,

‘module‘ => MODULE_SHIPPING_CHINA_POST_TEXT_TITLE,

‘methods‘ => array(array(‘id‘ => $this->code,

‘title‘ => MODULE_SHIPPING_CHINA_POST_TEXT_WAY,

‘cost‘ => $ttl)));

}else{

return false;

}

if ($this->tax_class > 0) {

$this->quotes[‘tax‘] = zen_get_tax_rate($this->tax_class, $order->delivery[‘country‘][‘id‘], $order->delivery[‘zone_id‘]);

}

if (zen_not_null($this->icon)) $this->quotes[‘icon‘] = zen_image($this->icon, $this->title);

return $this->quotes;

}

主要是根据国家代码把费率给找出来,如果还有其它运输方式也采用类似的方法,那么某个国家可能对应多个geo_zone,这个时候需要过滤出符合当前运输方式的geo_zone,在导入分区表时,每个分区都采用ChinaPost_前缀,所以这里添加了like ‘ChinaPost_%’条件就可以过滤出当前的运输方式的分区,当然务必要避免同一个国家装入同一种运输方式的不同分区中(国家分区导入时需要考虑这个逻辑),否则将得到多个费率,这里总是使用返回排在第一的那条记录。

企业模板网站

时间: 2024-10-11 22:53:50

Zen-cart自定义运费模块-China Post的相关文章

Zen Cart、Joy-Cart、Magento、ShopEX、ECshop电子商务系统比较

1.Zen Cart 优点:历史较久,系统经过长时间充分的测试,比较成熟:免费开源便于功能二次开发:基础功能强大:安装插件简单,修改文件很少,甚至不用修改文件:应用非常广泛,插件.模块更新快,其中多为免费:访问速度快,安装SEO插件后(基础版没有这个功能) 对SEO非常友好,便于搜索引擎优化:模板和后台分离,便于界面设计的独特性:具备多语言和多模版功能,即一个模版可以用于一种语言,也可以同时用于其它语言,或每种语言使用其唯一的模板,这样就不会出现因语言不同,文字长短不同而造成的界面混乱了:购物流

Zen Cart 常用SQL命令

网店日常维护过程中,难免要跟各种批量操作打交道, 虽然大多数操作可以通过批量上传 (easy populate) 和 快速更新 模块来完成, 但在应用便捷性和一些功能性的调整上, 总有一定的局限性; 网站的全部数据均存放在数据库中, 有什么变更 直接操作数据库无疑是最便捷的方式, 既然要动数据库, SQL语句是肯定离不开了, 日常跟网站打交道, 要接触熟悉各种代码, 这里又多了一种代码, 有点儿让人头大, 因此也就了本文, 下面为日常应用中可能涉及到的常用的批量操作SQL语句, 可多条同时执行

django 自定义分页模块

django 自定义分页模块 from django.shortcuts import render, HttpResponse, redirect from django.utils.safestring import mark_safe class Page(object): def __init__(self, current_page): self.current_page = int(current_page) @property def start(self): return (se

Zen Cart 138 在PHP5.3环境下出现的Fatal error: Cannot redeclare date_diff()

Zen Cart 138 在PHP5.3环境下出现的Fatal error: Cannot redeclare date_diff() in includes/functions/functions_general.php错误的解决方法 原因是在这个文件中已存在函数:date_diff()了,此时,我们需要做到与旧版本的PHP兼容,将Zen Cart中的date_diff()函数进行修改,解决方法如下: if(function_exists('date_diff') && phpversi

修正zen cart商品评论显示太短的问题

找到includes\modules\pages\product_reviews\header_php.php $reviews_query_raw = “SELECT r.reviews_id, left(rd.reviews_text, 100) as reviews_text, r.reviews_rating, r.date_added, r.customers_name FROM ” . TABLE_REVIEWS . ” r, ” . TABLE_REVIEWS_DESCRIPTIO

自定义事件模块引擎

define(function () { /** * Event listener (singleton) */ // TODO: replace usage of the event listener for the EventBus var events = { 'listeners': [], /** * Find a single listener by its object * @param {Object} object * @return {Number} index -1 whe

批量删除Zen Cart 无图片商品

<?php /** * * @ 批量删除Zen Cart 无图片商品 * @ 使用方法: 将本文件上传到网站根目录下运行 http://你的域名/zcdelpro.php * @ $status = 'delete'; //删除没有图片的产品 * @ $status = 'hide'; //下架没有图片的产品 * @ $status = 'default'; //列出没有图片的产品 * @ 作者QQ: 553008667 * */ $status = 'default'; $no_img_id

演练:创建和注册自定义 HTTP 模块

本演练演示自定义 HTTP 模块的基本功能. 对于每个请求,都需要调用 HTTP 模块以响应 BeginRequest 和 EndRequest 事件. 因此,该模块在处理请求之前和之后运行. 如果 ASP.NET 应用程序是在 IIS 6.0 下运行,则可以使用 HTTP 模块自定义针对 ASP.NET 所提供的资源的请求. 这些资源包括 ASP.NET Web 页(.aspx 文件).Web 服务(.asmx 文件).ASP.NET 处理程序(.ashx 文件)和您已经映射到 ASP.NET

Zen Cart屏蔽中文语言浏览器

在根目录下的index.php前面加上以下这段代码即可: if(preg_match("/zh-cn/is",$_SERVER['HTTP_ACCEPT_LANGUAGE'])){ header("HTTP/1.1 404 Not Found"); header("Status: 404 Not Found"); echo "<script>window.location.href='nddbc.html';</scr