Переопределение метода доставки – Что мне не хватает

Ранее я написал много модулей, но по какой-то причине мой модуль доставки не будет отменять метод доставки Magneto. Это разрешено? Что мне здесь не хватает? Имя модуля отображается на вкладке «Дополнительно» в области конфигурации, поэтому оно загружается, но ничего не происходит. Любые намеки?

Код

и т.д. / модули / Ssi_Shipping.xml

<?xml version="1.0"?> <config> <modules> <Ssi_Shipping> <active>true</active> <codepool>local</codepool> </Ssi_Shipping> </modules> </config> 

местный / сси / Доставка / etc.xml

 <?xml version="1.0"?> <config> <modules> <Ssi_Shipping> <version>0.1.0</version> </Ssi_Shipping> </modules> <global> <models> <shipping> <rewrite> <carrier_tablerate>Ssi_Shipping_Model_Carrier_Tablerate</carrier_tablerate> </rewrite> </shipping> </models> </global> </config> 

местный / сси / Доставка / Модель / Carrier / Tablerate.php

 <?php class Ssi_Shipping_Model_Carrier_Tablerate extends Mage_Shipping_Model_Carrier_Tablerate { public function isActive() { Mage::log("here! Ssi_Shipping_Model_Carrier_Tablerate"); // check to see if it's disabled if (parent::isActive() == false) return false; // check in the shopping cart foreach( Mage::getSingleton('checkout/session')->getQuote()->getItemsCollection() as $item ){ if ($item->getDeliveryFlag() == "test") return true; } // if nothing is found then disable this option. return false; } } 

Related of "Переопределение метода доставки – Что мне не хватает"

Есть способ, но это не очевидно и потребовало, чтобы я просматривал источник доставки:

Если вы посмотрите на Mage_Shipping_Model_Config , вы обнаружите, что код, используемый как параметр для Mage :: getModel (), берется из конфигурации магазина. Этот код НЕ является стандартным кодом, таким как «shipping / carrier_tablerate», поэтому он не помогает переопределять, как обычно.

Теперь вам нужно сначала узнать, что это за код. Например, я хотел переопределить несущую матрицы, поэтому я протестировал ее так:

 $carrierConfig = Mage::getStoreConfig('carriers/matrixrate') var_dump($carrierConfig['model']); 

Да, вы можете поместить этот код в любом месте на странице, но полезно иметь отдельный файл для таких вещей, которые можно запустить из командной строки (начиная с Mage :: app () для инициализации Magento)

В моем случае код был matrixrate_shipping / carrier_matrixrate, поэтому мне пришлось изменить свой файл config.xml следующим образом:

 <global> <models> <matrixrate_shipping> <rewrite> <carrier_matrixrate>my_class_name</carrier_matrixrate> </rewrite> </matrixrate_shipping> </models> 

вместо

 <global> <models> <matrixrate> <rewrite> <carrier_matrixrate>my_class_name</carrier_matrixrate> </rewrite> </matrixrate> </models> 

Удачи!

Сначала проверьте, что модель переопределяется вообще. Попробуй это:

 var_dump(get_class(Mage::getModel("shipping/carrier_tablerate"))); 

Проработав немного, я обнаружил, что единственный способ переопределить контроллер доставки – сделать дубликат файла (и структуры каталогов) в локальной папке кода. Тогда я мог бы в основном настроить код.

Не уверен, почему Magento, похоже, не позволяет стандартное переопределение этих функций доставки, но, по крайней мере, есть работа.

это было какое-то время, но у меня была такая же проблема в последние дни. Я хотел переопределить freeshipping и flatrate методы доставки, и в дополнение к ответу fab я должен был добавить следующий код в etc / config.xml. В моем случае исходные значения находятся в app / code / core / Mage / Shipping / etc / config.xml.

 <?xml version="1.0"?> <config> ... <default> <carriers> <flatrate> <model>your_module/shipping_carrier_flatrate</model> </flatrate> <freeshipping> <model>your_module/shipping_carrier_freeshipping</model> </freeshipping> </carriers> </default> </config> по <?xml version="1.0"?> <config> ... <default> <carriers> <flatrate> <model>your_module/shipping_carrier_flatrate</model> </flatrate> <freeshipping> <model>your_module/shipping_carrier_freeshipping</model> </freeshipping> </carriers> </default> </config> по <?xml version="1.0"?> <config> ... <default> <carriers> <flatrate> <model>your_module/shipping_carrier_flatrate</model> </flatrate> <freeshipping> <model>your_module/shipping_carrier_freeshipping</model> </freeshipping> </carriers> </default> </config> 

Примерами моделей являются примеры. Вы должны заменить их своими правильными путями.

Если кто-то еще сталкивается с этой проблемой и пришел сюда для решения, похоже, что OP использовал codepool в файле модуля, где он должен быть codePool (обратите внимание на капитал P).