php 覆盖发运方法-我遗漏了什么

y53ybaqx  于 2023-01-12  发布在  PHP
关注(0)|答案(5)|浏览(133)

我以前写过很多模块,但是由于某种原因,我的运输模块不能覆盖现有的磁电机运输方法。这是允许的吗?我错过了什么?模块名称显示在配置区域的高级选项卡中,所以它正在加载,但是什么也没有发生。有什么提示吗?
代码
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>

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;
      }
  }
m1m5dgzv

m1m5dgzv1#

有一个方法,但它不明显,并要求我浏览航运模块的源代码:
如果你查看** 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>

祝你好运!

4c8rllxm

4c8rllxm2#

首先检查模型是否被覆盖。尝试以下操作:

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

oknwwptz3#

在对这个问题进行了一些研究之后,我发现覆盖运输控制器的唯一方法是在本地代码文件夹中复制文件(和目录结构),然后我基本上可以调整代码。
不知道为什么Magento似乎不允许这些航运功能的标准覆盖,但至少有一个工作。

yjghlzjz

yjghlzjz4#

这是一段时间,但我有同样的问题在过去的几天。我想覆盖免费送货和统一运费的方法,除了fab的答案,我不得不添加以下代码在etc/config.xml。在我的情况下,原始值位于 Mage 。

<?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>

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

yzuktlbb

yzuktlbb5#

如果其他人也面临这个问题,并来到这里寻求解决方案,看起来OP在模块文件中使用了codepool,而它应该是codePool(注意大写的P)。

相关问题