我之前写了很多模块,但是由于某种原因,我的运输模块不会覆盖现有的Magneto运输方法。可以吗?我在这里想念什么?模块名称显示在配置区域的“高级”选项卡中,因此正在加载该模块,但没有任何 react 。有什么提示吗?

代码

等/模块/Ssi_Shipping.xml

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

本地/Ssi/Shipping/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>

本地/Ssi/运输/模型/运营商/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>

祝你好运!

关于php - 覆盖送货方式-我缺少什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4474502/

10-13 07:32
查看更多