1

新しい配送方法を作成しようとしています。この方法により、ユーザーは特定の倉庫からアイテムを収集できます。だから、実際にはあまり関与していません。

私はいくつかのチュートリアルをオンラインでフォローし、モジュールをビルドしてインストールしました。バックエンドで動作しています。有効にして、さまざまな値を設定できます。

フロントエンドチェックアウトを使用する場合....または次のコードを使用する場合:

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 に答える