Pregunta

Quiero ser capaz de cambiar lo que se utiliza el método de envío en base a los elementos que están en el carro. ¿Dónde está el mejor lugar para "verificación" esto y agarrar el método de envío ¿verdad?

La forma en que funciona es que habrá un método de envío estándar que se utiliza, y luego, si hay ciertos elementos en el carro de otro método anulará ese otro método.

creo que podría hacerlo por la piratería en torno a los módulos individuales para transporte, pero me gustaría hacer esto de la manera "correcta".

¿Fue útil?

Solución 2

intentarlo una y otra como lo hice para poner en práctica una anulación de costumbre, sólo fue capaz de encontrar el éxito al copiar el archivo completo a Tablerates.php locales / Mago / envío / modelo / portador / Tablerates.php

isActive () todavía no era "el camino" en ese punto. Tenía que introducir algún código en los collectRates () de este modo:

       // 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

Esta se colocó justo al inicio de la función de collectRates.

Otros consejos

métodos de envío han construido en el método de Mage_Shipping_Model_Carrier_Abstract que todos ellos se extienden:

 public function isActive();

extender los métodos de envío y añadir su lógica para ese método y no se olvide de llamar a los padres :: isActive (); primero

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top