Переключить методы доставки на основе продуктов - PullRequest
0 голосов
/ 17 декабря 2010

Я хочу, чтобы можно было выбрать способ доставки, основываясь на товарах в корзине. Где лучшее место, чтобы «проверить» это и выбрать правильный способ доставки?

Способ, которым он будет работать, заключается в том, что будет использоваться стандартный метод доставки, а затем, если в корзине есть определенные товары, другой метод переопределит этот другой метод.

Я думаю, что я мог бы сделать это, взломав отдельные модули доставки, но я бы хотел сделать это "правильным" способом.

Ответы [ 2 ]

3 голосов
/ 17 декабря 2010

методы доставки имеют встроенный метод в Mage_Shipping_Model_Carrier_Abstract, который все они расширяют:

 public function isActive();

расширяют ваши методы доставки и добавляют вашу логику в этот метод, и не забудьте вызвать parent :: isActive ();первый

0 голосов
/ 22 декабря 2010

Попробуй и попробуй, как я сделал для реализации пользовательского переопределения, я смог добиться успеха только когда скопировал весь файл Tablerates.php в локальный / Mage / Shipping / Model / Carrier / Tablerates.php

isActive () до сих пор не был «путём» на тот момент.Мне пришлось ввести некоторый код в функцию collectRates (), например, так:

       // check the store 
        if (Mage::app()->getStore()->getId() == 2){

            // check for free shipping
            $packageValue = $request->getPackageValueWithDiscount();
            $freeShipping = ($request->getFreeShipping()) || ($packageValue >=  Mage::getStoreConfig("carriers/freeshipping/free_shipping_subtotal", $this->getStore()));
            if($freeShipping)
                return false;

            $foundFlag = false;
            foreach ($request->getAllItems() as $item) {
                $org_product = Mage::getModel('catalog/product')->load($item->getProductId());
                if($org_product->getDeliveryFlag() == "workstationmats")
                {
                    $foundFlag = true;
                }   
            }

            if ($foundFlag == false)
                return false;
        }
        // end shpping mod

Это было помещено прямо в начале функции collectRates.

...