【问题标题】:setCustomerid() Fatal error Magento 1.9.2.1setCustomerid() 致命错误 Magento 1.9.2.1
【发布时间】:2016-03-16 02:09:08
【问题描述】:

我一直有这个问题: 如果没有致命错误(启用调试),客户将无法注册、登录和注销。

致命错误:在第 169 行的 ../public_html/app/code/core/Mage/Reports/Model/Product/Index/Abstract.php 中的非对象上调用成员函数 setCustomerId()

这是第 161 - 180 行的代码 sn-p:

 /**
 * Calculate count of product index items cache
 *
 * @return Mage_Reports_Model_Product_Index_Abstract
 */
public function calculate()
{
    $collection = $this->getCollection()
        ->setCustomerId($this->getCustomerId())
        ->addIndexFilter();


    Mage::getSingleton('catalog/product_visibility')
        ->addVisibleInSiteFilterToCollection($collection);

    $count = $collection->getSize();
    $this->_getSession()->setData($this->_countCacheKey, $count);
    return $this;
}

感谢类似问题的回答,我做了什么:

  • Cookie 设置。
  • 禁用(所有)模块,一一禁用。通过xml,管理后端和删除。还检查是否有任何更新(没有)。
  • 刷新缓存、删除缓存、禁用缓存(会话相同)
  • 将 Var 目录、媒体、下载器以及最终所有文件夹和文件设置为 777。
  • 再次设置所有正确的权限,感谢 magento-cleanup.php。
  • 检查了错误的基本 url 上的数据库,安全和不安全。
  • 是否重写了完整的 app 目录,从干净的 magento 安装上传。
  • 检查了服务器设置,没有安全模式(有一个 basedir 打开目录)

我也被重定向到后端的 404 页面。正确登录后,使用 NoRoute URL。我确实看到并且可以使用后端中的所有内容,包括导航菜单。

我确实使用模板和插件/模块的一些自定义。核心文件中没有编码。不确定需要什么信息,所以请询问我是否需要提及。

经过 8 小时的挣扎,我完全迷失了方向。希望你能帮到我。

【问题讨论】:

    标签: magento customer


    【解决方案1】:

    从调用集合的调试来看,你有:

    a) factory 和 xml 的问题(很可能是某些扩展的 config.xml)。在这种情况下,您应该调试 core/config 模型的方法 _getResourceModelFactoryClassName。

    https://www.gyazo.com/e7c8ebb26326ce2f1a3c7c26b43812ea

    或

    b) 缺少以下类:Mage_Reports_Model_Resource_Product_Index_Compared_Collection

    https://www.gyazo.com/9c59119fe4b97889cb81d2e8980b55fa

    您可以在模型的 getModelInstance 方法中检查。请考虑这样一个事实,即通过 echo/var_dump 进行调试时,您将无法获得良好的结果,因为这些方法通常被不同的模型在任何地方调用。

    我宁愿建议您从检查以下类的存在开始: Mage_Reports_Model_Resource_Product_Index_Compared_Collection (app/code/core/mage/reports/model/resource/product/index/compared/collection.php)。

    接下来,我将检查 (Mage_Reports) 扩展中是否存在模型重写 + 检查所有最近安装的扩展/在这些模块的 config.xml 文件中实施的更改。

    希望对您有所帮助。

    【讨论】:

    • 谢谢,确实有效:) 问题:重新声明了类。问题解决了。
    【解决方案2】:

    只需调试并检查此方法返回的内容:

    1) get_class($this)
    
    2) get_class($this->getCollection())
    

    在您的情况下,错误意味着以下内容:当前模型没有设置资源模型。代码正在尝试访问集合,但不能这样做,因为没有所需的资源模型、资源模型的名称或与此名称对应的类。

    【讨论】:

    • echo get_class ($this) = Mage_Reports_Model_Product_Index_Compared。回声 get_class ($this->getCollection()) = 空。 var_dump: bool(false) 也是如此。下一步该做什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 2012-12-17
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多