How to remove shipping using observer for checkout in magento?

Refresh

December 2018

Views

2.7k time

2

My Problem:

I want to use observer before checkout onepage page begins, in that, based on products in the cart, I want to disable shipping if it doesn't match certain conditions.

I am using [controller_action_predispatch_checkout_onepage_index] event observer, this basically call before checkout page starts loading...I am able to get all products and quote info but didn't found any method to disable shipping.

What I am looking for,

from the observer, is it possible to disable shipping by calling certain magento methods or any other solutions?

Overriding collectRates()

After getting few replies, I am trying to override collectRates() method using code given below

$method = Mage::getModel('shipping/rate_result_method');

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

        $method->setMethod('flatrate');
        $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);

Although, I dont want to enable flatrate shipping method either. I just want to disable shipping, or optionally return with reply something like

  • Free shipping $0.00

User can select that to continue to next step. Please help me from here.. What should I use in $method->setCarrier('??????'); or what changes I do need to do in above code?

3 answers

0

Наконец у меня есть метод переопределение доставки, его два шага кода , но вы можете уменьшить его на один шаг , если вы хотите. Вот мой два шага решения. Прежде чем мы начнем наш класс груза необходимо расширить и внедрить

extends Mage_Shipping_Model_Carrier_Abstract
    implements Mage_Shipping_Model_Carrier_Interface

Теперь мы создаем защищенный метод

protected function _createMethod($request, $method_code, $title, $price, $cost)
{
    $method = Mage::getModel('shipping/rate_result_method');

    $method->setCarrier('australiapost'); // in my case its australia post, it can be any other whatever you are using
    $method->setCarrierTitle($this->getConfigData('title'));

    $method->setMethod($method_code);
    $method->setMethodTitle($title);

    $method->setPrice($this->getFinalPriceWithHandlingFee($price));
    $method->setCost($cost);

    return $method;
}

Теперь просто используйте код ниже , чтобы создать новый метод с бесплатной доставкой и обводной существующей доставкой калькулятором, этот код будет идти внутри collectRates (запрос Mage_Shipping_Model_Rate_Request $) метод

   // PROCESS WILL RETURN FREE SHIPPING
   if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) {
            $shippingPrice = '0.00';
         }

    $shipping_method = 'Free Shipping';
    $method = $this->_createMethod($request, $shipping_method, 'Shipping Disabled', '0.00', '0.00');


         $result->append($method);

         return $result;

Делая это, вы можете получить результат, как показано ниже в кассе и пользователь может легко нажать продолжить к следующему шагу.

  • Доставка Disabled $ 0,00
0

Наконец у меня есть метод переопределение доставки, его два шага кода , но вы можете уменьшить его на один шаг , если вы хотите. Вот мой два шага решения. Прежде чем мы начнем наш класс груза необходимо расширить и внедрить

extends Mage_Shipping_Model_Carrier_Abstract
    implements Mage_Shipping_Model_Carrier_Interface

Теперь мы создаем защищенный метод

protected function _createMethod($request, $method_code, $title, $price, $cost)
{
    $method = Mage::getModel('shipping/rate_result_method');

    $method->setCarrier('australiapost'); // in my case its australia post, it can be any other whatever you are using
    $method->setCarrierTitle($this->getConfigData('title'));

    $method->setMethod($method_code);
    $method->setMethodTitle($title);

    $method->setPrice($this->getFinalPriceWithHandlingFee($price));
    $method->setCost($cost);

    return $method;
}

Теперь просто используйте код ниже , чтобы создать новый метод с бесплатной доставкой и обводной существующей доставкой калькулятором, этот код будет идти внутри collectRates (запрос Mage_Shipping_Model_Rate_Request $) метод

   // PROCESS WILL RETURN FREE SHIPPING
   if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) {
            $shippingPrice = '0.00';
         }

    $shipping_method = 'Free Shipping';
    $method = $this->_createMethod($request, $shipping_method, 'Shipping Disabled', '0.00', '0.00');


         $result->append($method);

         return $result;

Делая это, вы можете получить результат, как показано ниже в кассе и пользователь может легко нажать продолжить к следующему шагу.

  • Доставка Disabled $ 0,00
1

Я думаю, что это могло бы быть лучше либо переопределить или подкласс отдельных моделей Carrier.

Все перевозчики реализовать метод «Mage_Shipping_Model_Carrier_Abstract :: collectRates ()» для возврата результатов. Можно получить информацию о текущей котировке, чтобы изменить возвращенные цены / параметры внутри этого метода.

Тем не менее, если есть способ сделать это с наблюдателем, вероятно, было бы чище / легче.