Переопределение способа доставки - что мне не хватает - PullRequest
5 голосов
/ 17 декабря 2010

Я написал много модулей раньше, но по какой-то причине мой модуль доставки не переопределит существующий метод доставки 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;

        }


    }

Ответы [ 5 ]

12 голосов
/ 16 мая 2011

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

Если вы посмотрите на 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>

Удачи!

1 голос
/ 18 декабря 2010

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

var_dump(get_class(Mage::getModel("shipping/carrier_tablerate")));
0 голосов
/ 11 июня 2015

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

0 голосов
/ 10 апреля 2013

это было давно, но у меня была та же проблема в последние дни. Я хотел переопределить методы бесплатной доставки и фиксированной доставки, и в дополнение к ответу 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>

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

0 голосов
/ 10 января 2011

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

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

...