Zen Cart默认提供两种核心运费模块:Table Rate(按重量/价格阶梯)和Zone Rates(按地区分区),覆盖大部分场景需求。
Table Rate模块设置
设置0.5:10,1:15,2:20
,当订单总重为1.2kg时,系统自动匹配1kg档位收费15美元。
输入格式为重量阈值:费用
(如0.5:20,1:30
表示0.5kg以下20美元,0.5-1kg为30美元)。
支持按商品总重量或总价计算(需在模块配置中选择Basis
为Weight
或Price
)。
路径:后台 → Modules → Shipping → Table Rate
配置逻辑:
案例:
Zone Rates模块设置
地区1(US、CA):500:13.5,1000:17.5
地区2(EU国家):500:15.3,1000:19.8
用户下单至美国时,系统根据商品重量自动匹配对应费率。
进入Locations/Taxes → Zones Definitions
,创建分区(如地区1
包含US、CA)。
在Zones to Geo Zones
中关联国家与分区。
在Zone Rates模块中,为每个分区设置运费阶梯(如地区1:500:13.5,1000:17.5
表示500g以下13.5美元)。
路径:后台 → Modules → Shipping → Zone Rates
操作步骤:
案例:
定义地理分区:
配置运费规则:
满额免运费设置
启用Free Shipping
模块,设置Free Shipping For Orders Over
为50美元。
确保Shipping
模块优先级低于Free Shipping
(通过Sort Order
调整)。
路径:后台 → Modules → Order Total → Shipping
关键配置:
效果:订单总额≥50美元时,自动免除运费。
多地区差异化运费
在Zones Definitions
中创建Free Zone
,添加免运费国家(如US、UK)。
在Zone Rates中为00(其他地区)
设置高费率(如99999:50
表示任意重量50美元)。
场景:对偏远地区(如非洲国家)设置更高运费或免运费白名单。
操作:
特殊物流方式集成
案例:香港邮政小包(挂号费+续重费)。
实现方法:
自定义模块,在quote
方法中计算费用:
php
$first = 13; // 挂号费 $continue = 108; // 每公斤费用 $total_weight = $shipping_weight * $shipping_num_boxes; $ttl = $first + $continue * ceil($total_weight);
将模块上传至includes/modules/shipping/
并启用。
包装材料重量补偿
Maximum Package Weight
:设为10kg(超过则分箱)。
Package Tare Weight
:设为10:1
(商品重量每10%增加1g包装材料)。
路径:后台 → Configuration → Shipping/Packaging
设置项:
运费估算预览
功能:在购物车页面显示“运费估算”按钮。
设置:在Configuration → Shipping/Packaging
中启用Display Package Tare Weight
。
货币与税率同步
更新汇率(如1美元=7.2人民币)。
在Tax Classes
中关联商品类目与税率(如电子产品13%)。
路径:后台 → Localization → Currencies/Taxes
操作:
问题:运费未按分区显示。
检查Zones to Geo Zones
是否正确关联国家与分区。
确认订单地址中的国家代码与分区定义一致。
排查:
问题:满额免运费不生效。
检查Order Total
模块顺序(Free Shipping
需在Shipping
之后)。
确认订单总额计算是否包含税费(在Configuration → My Store
中设置Display Prices with Tax
)。
排查:
问题:自定义模块报错。
检查quote
方法是否返回标准数组格式(含id
、module
、methods
)。
在模块顶部声明全局变量:
php
global $order, $shipping_weight, $shipping_num_boxes, $db, $currencies;
解决:
分区命名规范:使用地区1_EMS
、地区2_DHL
等前缀,便于后续扩展。
费率测试:通过模拟订单(不同国家、重量)验证运费计算准确性。
备份习惯:修改运费规则前备份数据库(phpMyAdmin
导出)。
文档记录:维护运费规则表(Excel),标注版本号与更新日期。