我为Magento创建了一个自定义横幅模块,并且我在我的Vagrant / VirtualBox设置上本地测试了它,运行了一个精确的32实例,一切都运行良好。
当我将代码从GitHub拉到登台服务器时,扩展程序无效,我收到以下错误:
PHP致命错误:在第7行的/var/colourbox/app/code/local/AffinityCloud/ACBanners/Block/Slider.php中的非对象上调用成员函数getCollection(),参考文献:{{3 }}
这是在查看主页时,所以我不确定为什么它引用http://colourbox.affinitycloud.co.uk/tub-storage.html作为引用,因为这是一个类别页面。
我已清除缓存(无论如何已禁用)并重新编制索引。 Stil没有快乐。我还尝试使用小写字符重命名模型类,第一个字符大写但没有结果。
我已将模块代码添加到下面的GitHub,以便您可以看到代码:
http://colourbox.affinitycloud.co.uk/tub-storage.html
为什么会在本地而不是在登台服务器上运行的任何想法?它似乎无法找到模型类,但对Slider.php类进行罚款没有问题。
我不知道该怎么做。
注意:为了简洁起见,我想补充说我已经注销并重新登录管理员,同时还删除了模块表和core_resource中的引用无效。它可以很好地创建表,但我仍然遇到相同的问题,并且模块在高级配置中显示为已启用。
答案 0 :(得分:1)
问题是区分大小写 在Windows系统上,文件名不区分大小写。在Unix上,它们区分大小写。
因此,在配置模块和命名文件的方式中,在调用Mage::getModel('acbanners/acbanners')
时,magento自动加载器会查找文件
AffinityCloud/ACBanners/Model/Acbanners.php
但您文件的真实姓名为AffinityCloud/ACBanners/Model/ACBanners.php
因此找不到该文件且未加载该类,Mage::getModel(...)
返回null。
这里有2个选项。
最干净,最快。将Model
文件夹中的所有类重命名为以大写字母开头,其余类应为小写。上例中的Acbanners.php
。您可能需要对Block
和Helper
中的文件执行相同操作。
长版。如果您想保留文件名,则需要将Mage::getModel('acbanners/acbanners')
更改为Mage::getModel('acbanners/aCBanners')
或Mage::getModel('acbanners/ACBanners')
。但我想这将需要大量的重构。你也可能需要这个块和助手。