Ранее я написал много модулей, но по какой-то причине мой модуль доставки не будет отменять метод доставки 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; } }
Есть способ, но это не очевидно и потребовало, чтобы я просматривал источник доставки:
Если вы посмотрите на 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).