Magento Mage :: getModel('core / email_template')返回一个空对象

时间:2014-08-14 11:02:23

标签: php magento

我的Magento 1.9.0.1网站出现问题,其中Mage :: getModel('core / email_template')返回一个空对象,这意味着一切都无法正常工作(例如创建订单,订单所在被发送给客户,添加评论等...)。

例如,我经常看到以下错误:

Fatal error: Call to a member function addBcc() on a non-object in /home/website/public_html/app/code/core/Mage/Core/Model/Email/Template/Mailer.php on line 69

做一些侦探工作,我发现:

$emailTemplate = Mage::getModel('core/email_template');

返回false,因此给出了上述错误。

它可能是导致问题的插件吗? Mage::getModel('core/email_template')是否以某种方式从其他地方加载模型,而不是预期的/home/website/public_html/app/code/core/Mage/Core/Model/Email/Template.php

提前致谢!

3 个答案:

答案 0 :(得分:1)

Mage::getModel('core/email_template')不应该返回false,所以它可能确实被其他模块覆盖了 要找出哪个模块负责,请在config.xml文件中查找此代码段:

<global>
    <models>
        <core>
            <rewrite>
                <email_template>Namespace_Module_Model_Email_Template</email_template>
            </rewrite>
        </core>
    </models>
</global>

请注意,Namespace_Module_Model_Email_Template会有所不同,Namespace将成为模块的名称空间,Module将成为模块的名称以及Model之后的名称可以是完全不同的。此外,我在代码段中放置的标签之间可能还有其他一些标签 找到它的最简单方法是在<email_template>文件中查找字符串config.xml

一旦你发现哪个模块负责,你/我们将不得不调查覆盖核心模块的类来解决问题。

答案 1 :(得分:0)

我刚刚遇到了与我正在处理的事情完全相同的错误。问题(对我而言)是我的Namespace_Module_Model_Email_Template文件存在,但是该类没有用相同的名称声明(它是AnotherNamespace_Module_Model_Email_Template行)。奇怪的是,即使您禁用了模块,它也不适合您,但可能会打开它们并确保声明的类名与<email_template>部分中的任何内容相匹配。

答案 2 :(得分:0)

我会一步一步地调试你的问题:

  • 在更改代码时使用版本控制(例如,Git) 如果您需要,可以轻松撤消更改。

  • 清除Magento缓存,删除/ var / cache /

    中的所有内容
  • 清除浏览器缓存。

  • 开启日志记录:使用“管理员”面板,转到
    系统&gt;配置&gt;开发人员&gt;日志设置,然后选择“是” 启用选项。将在var / log中创建两个文件 文件夹(注意:我认为你已经开启了日志记录,但我不是 确定你做了......只是提到这个以防万一你没有。)

  • 安装PHP IDE,然后安装Xdebug调试器并确认 $ emailTemplate是false。考虑到我们正在谈论的问题 /app/code/core/Mage/Core/Model/Email/Template/Mailer.php(第69行)
    它调用了定义为
    的addBcc() /app/code/core/Mage/Core/Model/Email/Template.php(第538行)。

  • 禁用模块:阅读https://magento.stackexchange.com/a/429/13421
    它说“禁用本地模块”。我会禁用AW_Customsmtp 首先检查是否出现错误。如果没有,请启用它,禁用
    Moogento_Pickpack并再次检查。如果未出现错误,请禁用 两者并再次检查。