我正在为客户开发Magento店面。他们使用dropshippers,因此单个邮政编码对我们没有多大帮助。我们确实设置了客户端发布的最常见的邮政编码,因此,在很多情况下,它没问题。
但是,在某些情况下,需要使用不同的原始邮政编码。在更罕见的情况下,我们将有多个原始邮政编码。如果拉链与主要拉链不同,我们将其存储在名为“原始拉链”的属性中(创意,呵呵?)
我应该在哪里进行修改?我们只使用UPS运输方式,我想要做的是,在计算运输之前,抓住购物车中可能存在的任何原产拉链(我认为我们已经有了这部分),但是,这取决于结果,我可能需要迭代运费计算并将值一起添加 - 即如果他们订购一个带有原始邮政编码的产品,而另一个产品没有原始邮政编码,则必须先计算,然后第二个,然后将它们加在一起。
如果有人能指出我们需要修改哪些php文件或类的正确方向,我将非常感激。
答案 0 :(得分:1)
首先,您需要将自定义属性添加到将在购物车中使用的属性列表中。 在stackoverflow上关注这些答案: How to add custom uploaded images to cart in magento 1.4.1.1?
然后您需要创建自定义送货方式,可以从您的方法扩展。它应该遍历从发货请求收到的物品并检查不同的拉链原点,然后分别计算它们的费率。
我希望您创建一个可扩展现有送货方法功能的模块不会有问题。
干杯!
<强>更新强> 要将属性添加到购物车项目中加载的产品,请使用以下配置:
<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;
}
答案 1 :(得分:1)
类usa/shipping_ups
处理这些请求,特别是方法setRequest
似乎有你需要的东西:
if ($request->getOrigPostcode()) {
$r->setOrigPostal($request->getOrigPostcode());
} else {
$r->setOrigPostal(Mage::getStoreConfig('shipping/origin/postcode', $this->getStore()));
}
如果您可以将orig_postcode添加到送货请求,UPS将根据该来源返回报价。
一种方法是覆盖Mage_Shipping_Model_Rate_Request
并添加一个名为getOrigPostcode
的方法。由于是一个真正的方法,这将覆盖默认的Magento getter / setter行为。请使用此方法查询请求的内容,以找出需要使用的zip。
希望有所帮助!
谢谢, 乔