【问题标题】:Undefined class constant 'CHECK_USE_CHECKOUT'未定义的类常量“CHECK_USE_CHECKOUT”
【发布时间】:2015-10-23 17:06:12
【问题描述】:

我将 magento 从版本 1.9.1.1 升级到 1.9.2.1。结帐过程总是失败并重定向回您的购物车页面。这是我在 Apache 的错误日志中发现的错误:

PHP Fatal error:  Undefined class constant 'CHECK_USE_CHECKOUT' in
/var/www/app/code/local/Lotusbreath/OneStepCheckout/Model/Type/Onepage.php 
on line 108, referer: http://www.websitename.com/onestepcheckout/

我认为结账扩展有问题,所以我将它替换为原始的Magento结账模板,出现同样的错误:

PHP Fatal error:  Undefined class constant 'CHECK_USE_CHECKOUT' in 
/var/www/app/code/core/Mage/Checkout/Model/Type/Onepage.php on line 653,
referer: http://www.website.com/checkout/onepage/

我检查了两个 PHP 文件中的 CHECK_USE_CHECKOUT,确实,它没有在那里定义。问题是,这在此之前可以正常工作。我不确定这个更新是否破坏了某些东西,或者它是我最近应用的补丁修复。我尝试恢复补丁,但也没有用。

这是 PHP 文件 Onepage.php 中的 sn-p,其中包含 CHECK_USE 内容:

$data['checks'] = Mage_Payment_Model_Method_Abstract::CHECK_USE_CHECKOUT
        | Mage_Payment_Model_Method_Abstract::CHECK_USE_FOR_COUNTRY
        | Mage_Payment_Model_Method_Abstract::CHECK_USE_FOR_CURRENCY
        | Mage_Payment_Model_Method_Abstract::CHECK_ORDER_TOTAL_MIN_MAX
        | Mage_Payment_Model_Method_Abstract::CHECK_ZERO_TOTAL;

这是付款失败并重定向回购物车页面的原因吗?如果是这样,我将如何解决这个问题?

【问题讨论】:

  • 你确定这个补丁适合你的版本吗?因为显然这个类没有那个常量docs.magentocommerce.com/Mage_Payment/…
  • 嗨,是的,我下载了与我拥有的 magento 版本相对应的补丁。后来,我下载并安装了已经包含最新补丁的magento 1.9.2.1。
  • CHECK_USE_CHECKOUT 常量是Mage_Payment_Model_Method_Abstract 的一部分。当它试图检查它时抛出错误。确保 Mage/Payment/Model/Method/Abstract.php 已就位并与您下载和提取的版本匹配。
  • 嗨,道格拉斯,感谢您的回复。是的,文件已到位。这已经解决了。我将在答案中发布我如何解决它。感谢您光临!

标签: php magento magento-1.9


【解决方案1】:

您的核心文件有可能被修改。

在升级过程中,核心文件将被覆盖,这可能会导致某些代码(由于非标准编码而添加)被删除。

因此,如果您确实有备份,请搜索丢失的定义和包含该备份的文件。

@看看你的输入。 将文件放在本地将导致核心文件覆盖。 这不是 Magenton 标准方法,开发人员应该扩展该类并修改或添加一些特定功能。

我建议你应该确保本地 Mage 文件夹中的所有文件都应该被某个扩展模块删除。

【讨论】:

  • 我知道本地文件会覆盖核心。添加本地文件的不是我。我认为这是一个扩展。不管怎样,现在一切都很好。所以,我认为这已经解决了 :) 感谢 cmets。
  • 我知道很少有模块供应商这样做不是标准的东西。这会破坏以后的事情。所以在选择模块时确保这个标准到位。傻瓜知道你解决了它。
【解决方案2】:

错误消息引用了这个类 Mage_Payment_Model_Method_Abstract。我在位于以下位置的核心文件中检查了它:app/code/core/Mage/Payment/Model/Method/Abstract.php。该文件在 Mage_Payment_Model_Method_Abstract 类中具有以下 sn-p:

/**
 * Bit masks to specify different payment method checks.
 * @see Mage_Payment_Model_Method_Abstract::isApplicableToQuote
 */
const CHECK_USE_FOR_COUNTRY       = 1;
const CHECK_USE_FOR_CURRENCY      = 2;
const CHECK_USE_CHECKOUT          = 4;
const CHECK_USE_FOR_MULTISHIPPING = 8;
const CHECK_USE_INTERNAL          = 16;
const CHECK_ORDER_TOTAL_MIN_MAX   = 32;
const CHECK_RECURRING_PROFILES    = 64;
const CHECK_ZERO_TOTAL            = 128;

现在,本地池中还有另一个 Abstract.php 文件:app/code/local/Mage/Payment/Model/Method/Abstract.php。注意路径中的(核心)和(局部)差异。

本地池中的这个文件没有上面显示的 sn-p。该文件还有一些其他差异。所以,我所做的是,我在本地池中备份了 Abstract.php 文件。然后将抽象文件从核心复制到本地池。一切又开始工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 2018-09-04
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    相关资源
    最近更新 更多