我按照这篇文章的说明禁用了Magento 1.7实例的Rss和Newsletter模块:
我刚刚在app\etc\modules\Mage_All.xml
和<active>false</active>
模块中更改为Mage_Rss
来编辑Mage_Newsletter
文件。
问题在于,当我尝试通过管理面板加载客户页面时,出现以下错误:
致命错误:在a上调用成员函数loadByCustomer() app \ code \ core \ Mage \ Newsletter \ Model \ Subscriber.php上的非对象 第267行
为什么会这样?为什么即使我禁用了这样的模块,这个代码也在执行?
谢谢!
答案 0 :(得分:3)
通过<active>
条目禁用模块后的第一步。如果使用编译器,请始终清除缓存和,重新编译,这样您就无法在禁用的模块中引用类。
通过将<active>
设置为false,但通过其他模块,模板或布局尝试调用代码,通过app / etc / modules / mod_name.xml关闭模块后,问题通常不会出现问题在已禁用的模块中。
问题出现的地方是另一个模块列出模块刚关闭其依赖项列表中的 。请务必检查所有其他模块xml文件依赖项列表,以提及要停用的模块。
此外,您还必须检查引用已禁用模块中的类的模板.phtml
文件。这可能会引发可怕的call to a non-object
类型异常错误。例如,一个提供自定义购物车属性的模块会要求您向购物车模板添加条目。关闭模块不会删除引用。
确保没有布局尝试加载任何引用此模块的内容(自定义布局local.xml)。
您也可能想要进入System Config,Advanced并关闭Newsletter模块输出,以防Magento客户帐户依赖于通过调用该条目而对要禁用的模块进行测试而不是实际检查是否模块已加载。有时,Magento程序员忘记进行适当的错误捕获,这让我在之前的循环中被抛弃了。
答案 1 :(得分:2)
我相信我可以解决问题(不确定是否产生任何副作用):
通过添加外部if子句,只需在第90行编辑文件app\code\core\Mage\Adminhtml\Block\Customer\Edit\Tabs.php
:
if (Mage::helper('core')->isModuleEnabled('Mage_Newsletter')) {
if (Mage::getSingleton('admin/session')->isAllowed('newsletter/subscriber')) {
$this->addTab('newsletter', array(
'label' => Mage::helper('customer')->__('Newsletter'),
'content' => $this->getLayout()->createBlock('adminhtml/customer_edit_tab_newsletter')->initForm()->toHtml()
));
}
}
+1,如果我保存了您的一天,如果您注意到并可能产生影响,请告诉我:D