Php 覆盖装运方法-我缺少什么
我以前写过很多模块,但出于某种原因,我的运输模块不会覆盖现有的磁电机运输方法。允许吗?我错过了什么?模块名称显示在配置区域的advanced选项卡中,因此正在加载模块,但什么也没有发生。有什么提示吗 代码 etc/modules/Ssi_Shipping.xmlPhp 覆盖装运方法-我缺少什么,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>
<?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文件的一个几乎克隆的版本)。为了快速,您应该能够将其放入模板中,例如,这样就可以了。请记住以后删除它。我强烈不建议这样做。有一个干净的方法可以覆盖承运商,请看我的答案。你能分享一下里面的内容吗?承运商?同班同学,谢谢你,这让我头疼了一段时间