Php 覆盖装运方法-我缺少什么

Php 覆盖装运方法-我缺少什么,php,magento,magento-1.4,shipping,Php,Magento,Magento 1.4,Shipping,我以前写过很多模块,但出于某种原因,我的运输模块不会覆盖现有的磁电机运输方法。允许吗?我错过了什么?模块名称显示在配置区域的advanced选项卡中,因此正在加载模块,但什么也没有发生。有什么提示吗 代码 etc/modules/Ssi_Shipping.xml <?xml version="1.0"?> <config> <modules> <Ssi_Shipping> <active>

我以前写过很多模块,但出于某种原因,我的运输模块不会覆盖现有的磁电机运输方法。允许吗?我错过了什么?模块名称显示在配置区域的advanced选项卡中,因此正在加载模块,但什么也没有发生。有什么提示吗

代码

etc/modules/Ssi_Shipping.xml

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

真的
地方的
local/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>

0.1.0
Ssi_装运_型号_承运人_表费率
local/Ssi/Shipping/Model/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;

        }


    }

首先检查模型是否被覆盖。试试这个:

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

在仔细研究了这一点之后,我发现覆盖shipping controller的唯一方法是在local code文件夹中复制文件(和目录结构)。然后我基本上可以调整代码


不知道为什么Magento似乎不允许标准覆盖这些运输功能,但至少有一个解决办法

有一种方法,但并不明显,需要我浏览配送模块来源:

如果查看Mage\u Shipping\u Model\u Config,您会发现用作Mage::getModel()参数的代码取自存储配置。此代码不是“shipping/carrier_tablerate”之类的标准代码,因此它不会像往常一样帮助覆盖

现在你必须先找出这段代码是什么。例如,我想覆盖matrixrate载波,因此我对其进行了如下测试:

$carrierConfig = Mage::getStoreConfig('carriers/matrixrate')
var_dump($carrierConfig['model']);
<global>
    <models>
        <matrixrate_shipping>
            <rewrite>
                <carrier_matrixrate>my_class_name</carrier_matrixrate>
            </rewrite>
        </matrixrate_shipping>
    </models>
是的,您可以将此代码临时放置在页面上的任何位置,但是为这些内容创建一个单独的文件非常有用,可以从命令行运行(从Mage::app()开始初始化Magento)

在我的例子中,代码是matrixrate\u shipping/carrier\u matrixrate,因此我不得不像这样更改config.xml:

$carrierConfig = Mage::getStoreConfig('carriers/matrixrate')
var_dump($carrierConfig['model']);
<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>

我的姓

祝你好运

已经有一段时间了,但最近几天我也遇到了同样的问题。我想覆盖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>

...
您的\u模块/装运\u承运人\u统一费率
您的\模块/装运\承运人\自由装运

模型值是示例。您必须用正确的路径替换它们。

如果其他任何人面临此问题并来这里寻求解决方案,则OP似乎在模块文件中使用了
codepool
,它应该位于
codepool
(注意大写字母p)。

我将把它放在哪里?在页面上的任何地方?我保存了一个初始化框架的文件,但给了我一个“草稿板”(index.php文件的一个几乎克隆的版本)。为了快速,您应该能够将其放入模板中,例如,这样就可以了。请记住以后删除它。我强烈不建议这样做。有一个干净的方法可以覆盖承运商,请看我的答案。你能分享一下里面的内容吗?承运商?同班同学,谢谢你,这让我头疼了一段时间