如何解决Magento结帐中的多个原始邮政编码
| 我正在为客户做Magento店面。他们使用dropshippers,所以一个邮政编码对我们没有多大帮助。我们确实将其设置为客户端从中寄出的最常见的邮政编码,因此在很多情况下都可以。 但是,在某些情况下,需要使用不同的原始邮政编码。在极少数情况下,我们将有多个原始邮政编码。如果存在与主要拉链不同的zip,我们会将其存储在一个名为“'origin zip \”的属性中(创意,是吗?) 我应该在哪里进行修改?我们只使用UPS运送方式,我想做的是在计算运送之前,先抓取购物车中可能有的任何原始拉链(我想我们已经准备好了这部分),但是,根据结果,我可能需要遍历运输计算并将这些值加在一起-例如,如果他们订购的一种产品带有原始邮政编码,而另一种产品没有原始邮政编码,则必须计算出首先,然后是第二个,然后将它们加在一起。 如果有人可以指出需要修改的PHP文件或类的正确方向,我将不胜感激。解决方法
首先,您需要将自定义属性添加到将在购物车中使用的属性列表。
在stackoverflow上遵循以下答案:
如何在magento 1.4.1.1中将自定义上传的图像添加到购物车?
然后,您需要创建自定义的送货方式,可能是您自己的一种。它应该浏览从装运请求中收到的物品,并检查不同的zip来源,然后分别计算它们的价格。
希望对您来说,创建扩展现有运输方法功能的模块不会有问题。
干杯!
更新
要将属性添加到购物车项目中加载的产品,请使用以下配置:
<config>
<global>
<sales>
<quote>
<item>
<product_attributes>
<origin_zip />
</product_attributes>
</item>
</quote>
</sales>
</global>
</config>
然后在运输方法模型中使用如下所示的内容(以USPS为例):
public function collectRates(Mage_Shipping_Model_Rate_Request $request)
{
if (!$this->getConfigFlag(\'active\')) {
return false;
}
$defaultOriginZip = Mage::getStoreConfig(\'shipping/origin/postcode\',$this->getStore());
$requestDataByOriginZip = array();
// Walking through quote items
foreach ($request->getAllItems() as $quoteItem) {
// If virtual or not shippable separately,it should be skipped
if ($quoteItem->isVirtual() || $quoteItem->isDummy(true)) {
continue;
}
// Retrieving origin zip code
if ($quoteItem->getProduct()->getOriginZip()) {
$zipCodeForCalculation = $quoteItem->getProduct()->getOriginZip();
} else {
$zipCodeForCalculation = $defaultOriginZip;
}
if (!isset($requestDataByOriginZip[$zipCodeForCalculation])) {
// Default values initialization for this zip code
$requestDataByOriginZip[$zipCodeForCalculation] = array(
\'orig_postcode\' => $zipCodeForCalculation,\'package_weight\' => 0,\'package_value\' => 0,// etc...
);
}
$requestDataByOriginZip[$zipCodeForCalculation][\'package_weight\'] += $quoteItem->getRowWeight();
$requestDataByOriginZip[$zipCodeForCalculation][\'package_value\'] += $quoteItem->getBaseRowTotal();
// Etc...
}
$results = array();
foreach ($requestDataByOriginZip as $requestData) {
$requestByZip = clone $request; // Cloning to prevent changing logic in other shipment methods.
$requestByZip->addData($requestData);
$this->setRequest($requestByZip);
// Returns rate result for current request
$results[] = $this->_getQuotes();
}
$yourMergedResult = Mage::getModel(\'shipping/rate_result\');
foreach ($results as $result) {
// Logic for merging the rate prices....
}
return $yourMergedResult;
}
,类usa/shipping_ups
是处理这些请求的类,特别是方法setRequest
似乎满足您的需求:
if ($request->getOrigPostcode()) {
$r->setOrigPostal($request->getOrigPostcode());
} else {
$r->setOrigPostal(Mage::getStoreConfig(\'shipping/origin/postcode\',$this->getStore()));
}
如果您可以将orig_postcode添加到运输请求中,则UPS将基于该来源返回报价。
一种解决方法是重写ѭ5并添加一个称为getOrigPostcode
的方法。由于是一个真实的方法,它将覆盖默认的Magento getter / setter行为。让此方法查询请求的内容以找出需要使用的zip。
希望有帮助!
谢谢,
乔
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。