0

productmatrix_Standard条件を満たせば発送方法から通常発送を外したいです。以下をオーバーライドする必要があると思います。

/**
 * One page checkout status
 *
 * @category   Mage
 * @category   Mage
 * @package    Mage_Checkout
 * @author      Magento Core Team <core@magentocommerce.com>
 */
class Mage_Checkout_Block_Onepage_Shipping_Method_Available extends Mage_Checkout_Block_Onepage_Abstract
{
    protected $_rates;
    protected $_address;

    public function getShippingRates()
    {

        if (empty($this->_rates)) {
            $this->getAddress()->collectShippingRates()->save();

            $groups = $this->getAddress()->getGroupedAllShippingRates();
            /*
            if (!empty($groups)) {
                $ratesFilter = new Varien_Filter_Object_Grid();
                $ratesFilter->addFilter(Mage::app()->getStore()->getPriceFilter(), 'price');

                foreach ($groups as $code => $groupItems) {
                    $groups[$code] = $ratesFilter->filter($groupItems);
                }
            }
            */

            return $this->_rates = $groups;
        }

        return $this->_rates;
    }
}

このコレクションから既存の配送方法を削除するにはどうすればよいですか? または、productmatrix_Standardオプションをスキップして、コレクションを空にして手動で再構築するにはどうすればよいですか?

4

2 に答える 2

2

function collectRates()代わりに、出荷モデルで" " をオーバーライドする必要があります。
たとえば、内部 /app/code/core/Mage/Shipping/Model/Carrier/Flatrate.php または /app/code/Mage/Usa/Model/Shipping/Carrier/Ups.php

住所とカートに関するすべての詳細は、collectRates()各キャリアで実行されているときに利用できます。これにより、特定のレートを除外したり、レートを変更したりするのに理想的です。names/price.

于 2013-02-11T18:08:57.177 に答える
1

私はで終わった

<?php

    public function getShippingRates() {

        if (empty($this->_rates)) {

            $this->getAddress()->collectShippingRates()->save();

            $groups = $this->getAddress()->getGroupedAllShippingRates();

            if ($this->someCondition()) {

                $badMethods = array('productmatrix_Standard');

                // Loop through groups (productmatrix)
                // pass by reference for unset later
                foreach ($groups as $code => &$groupItems) {

                    // Lopp through methods (standards, 2day)
                    foreach($groupItems as $key => $item) {

                        // Check for bad shipping methods
                        if (in_array($item->getCode(), $badMethods)) {

                            // Remove the method from the shipping groups
                            unset($groupItems[$key]);
                        }
                    }
                }
            }

            $this->_rates = $groups;
        }

        return $this->_rates;
    }
于 2013-02-11T18:25:11.620 に答える