1

我正在尝试创建一种新的运输方式。此方法允许用户从特定仓库收集物品。所以真的没有太多参与。

我在网上关注了几个 tuts,并构建并安装了我的模块。它在后端工作,我可以启用它并设置各种值。

当我使用前端结帐时....甚至使用以下代码:

Mage::getSingleton('shipping/config')->getAllCarriers();

我没有得到新的运输方式名称输出。

我在前端结帐时收到的消息是:

抱歉,此订单目前没有可用的报价。

即使我启用了其他运输方式。


我有另一个正在使用的扩展(关于位于多个仓库的库存)。作为此扩展的一部分,它列出了可用的运输选项...以便我可以将特定选项分配给特定仓库。我的新运输方式未在运输选项列表中列出。


我似乎拥有所需的一切。我的另一个扩展程序没有采用该方法……所以必须遗漏一些东西。此外,鉴于我在前端没有运输选项......令人困惑。已经有一段时间了...调试:(

非常感谢任何帮助。

4

1 回答 1

0

我正在创建一种复杂的运输方式......而不是免费运输方式的副本。原来我实际上需要一份免费送货方式的副本,所以让我的生活更轻松......这比我想象的要容易。

不想发布我的所有代码(您还需要一个 config.xml 和 system.xml 文件),但这是我的运营商模型逻辑文件:

class Myco_Clickcollectshipping_Model_Carrier_Mymethod extends Mage_Shipping_Model_Carrier_Abstract {

protected $_code = 'mymethod ';

public function collectRates(Mage_Shipping_Model_Rate_Request $request)
{

    if (!$this->getConfigFlag('active')) {
        return false;
    }

    $freeBoxes = 0;
    if ($request->getAllItems()) {
        foreach ($request->getAllItems() as $item) {
            if ($item->getFreeShipping() && !$item->getProduct()->isVirtual()) {
                $freeBoxes+=$item->getQty();
            }
        }
    }

    $this->setFreeBoxes($freeBoxes);

    $result = Mage::getModel('shipping/rate_result');
    if ($this->getConfigData('type') == 'O') { // per order
        $shippingPrice = $this->getConfigData('price');
    } elseif ($this->getConfigData('type') == 'I') { // per item
        $shippingPrice = ($request->getPackageQty() * $this->getConfigData('price')) - ($this->getFreeBoxes() * $this->getConfigData('price'));
    } else {
        $shippingPrice = false;
    }

    $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice);

    if ($shippingPrice !== false) {
        $method = Mage::getModel('shipping/rate_result_method');

        $method->setCarrier('mymethod ');
        $method->setCarrierTitle($this->getConfigData('title'));

        $method->setMethod('mymethod ');
        $method->setMethodTitle($this->getConfigData('name'));

        if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) {
            $shippingPrice = '0.00';
        }

        $method->setPrice($shippingPrice);
        $method->setCost($shippingPrice);

        $result->append($method);

    }

    return $result;
}

public function getAllowedMethods()
{
    return array('mymethod ' => $this->getConfigData('name'));
}
}
于 2012-05-31T21:36:04.900 回答