Fatal error: Uncaught Error: Call to a member function getMetaTitle()

Magento 网站运行一段时间之后出现了一些个莫名其妙的bug,例如:

Fatal error: Uncaught Error: Call to a member function getMetaTitle() in /app/code/core/Mage/Catalog/Block/Product/View.php:56

Fatal error: Uncaught Error: Call to a member function getId()  in Mage::registry('current_category')->getId() 等等。一般会出现在产品列表页或者产品详情页。这个问题会导致网站不稳定搜录不稳定,严重的就是网站页面报错打不开了。

项目赶测试不足就会这样,而且这个bug还是随机出现让人很头大,一直以为是数据库的问题其实不然。

首先我们来想办法定位它因为在电脑上很难再现这个问题,找个在线的seo sitecheck网站或者google page speed分析你怀疑有问题的页面。如果分析结果报错了一般会显示报错的截屏图的,图里面就是你页面报错的地方(不是每次都会出现)。然而找到地方并没有卵用。因为你用的就是原生的方法,数据库也是正常的难道是人品问题?那么问题在哪呢?

答案是你的整页缓存--FPC.因为BUG出现是随机的而且不是每次有,这正好对应了FPC的缓存机制。第一次肯定是没问题的。数据拿到了因为没有缓存。第二次第三次就不好说了。因为缓存建立了,你的这些方法可能不再执行。所以拿出来就是NULL。

既然怀疑是FPC的坑,那么我们去它的官网上找找。果不其然,BUG兄再此大言不惭

这时你心里一万个草泥马在问“为什么不加入默认设置”?谁知道作者怎么想的呢,一点也不人性化啊。既然这样我们就来试试:

打开app\code\local\Mirasvit\Fpc\etc\cache.xml 在containers节点下加入以下代码,当然你有其他的自定义模块就得看清楚你的模块type了,意识就是告诉FPC 在产品页调用的Mage::registry('current_product'),Mage::registry('current_category'),Mage::registry('product')不要加入缓存。

<catalog_category_default>
            <block>page/html_head</block>
            <name>catalog category view</name>
            <container>Mirasvit_Fpc_Model_Container_Base</container>
            <depends></depends>
            <in_register>current_category</in_register>
            <in_app>0</in_app>
        </catalog_category_default>

        <catalog_product_view>
            <block>catalog/product_view</block>
            <name>catalog product view</name>
            <container>Mirasvit_Fpc_Model_Container_Base</container>
            <depends></depends>
            <in_register>product,current_product</in_register>
            <in_app>0</in_app>
        </catalog_product_view>

 然后刷新下缓存,问题没有了。没事还是要多看看文档啊。

PS:以上整页缓存插件是mirasvit_fpc Magento 1.x 对号入座。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值