我正在研究magento的自定义管理模块,并尝试同时学习magento方法=)。我目前正在使用CE 1.6版本。
我已经阅读了几篇教程和文章并设法设置了一个自定义数据库表,我认为我管理了make collection类。 (我应该说我是Zend Framework / Magento的新手和初学者熟练的程序员)。至少下面的代码得到了正确的结果:
$department_collection = Mage::getModel('custom/systemconfig')->getCollection()
->addFilter('name','departments');
当我用$department_collection->getData()
var_dump时,我得到一个包含来自我的数据库的过滤行的数组。
现在,当我尝试这样做时:
foreach ($department_collection as $department) {
$department->delete();
}
我从Magento得到一个例外:
-Warning:include(Mage \ Upperfield \ Model \ Systemconfig.php)[function.include]:无法打开流:D:\ wamp \ www \ magento \ lib \ Varien \ Autoload中没有此类文件或目录。第93行的PHP
问题是,我想我的目录结构设置错误,但只是不明白它是什么。跟踪并没有多大帮助,因为它是串联的,只显示相关的信息。
我的目录结构如下所示:
+app
+code
+local
+Namespace
+Module
+Model
+Mysql4
+Systemconfig
Collection.php
Systemconfig.php
Systemconfig.php
我已经加载了我的模型:
//file: ../Mysql4/Systemconfig.php
class Namespace_Module_Model_Mysql4_Systemconfig extends Mage_Core_Model_Mysql4_Abstract{
protected function _construct()
{
$this->_init('module/systemconfig', 'systemconfig_id');
}
}
// file: ../Mysql4/Systemconfig/Collection.php
class Namespace_Module_Model_Mysql4_Systemconfig_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract {
protected function _construct()
{
$this->_init('namespace/systemconfig');
}
}
我的config.xml目前看起来像这样(摘录):
<models>
<module>
<class>Namespace_Module_Model</class>
<resourceModel>module_mysql4</resourceModel>
</module>
<module_mysql4>
<class>Namespace_Module_Model_Mysql4</class>
<entities>
<systemconfig>
<table>module_systemconfig</table>
</systemconfig>
</entities>
</module_mysql4>
我的猜测是: 我用错误的结构设置了集合类,或者 我很想念如何使用集合对象。
那里有什么可以向我解释这里发生了什么? 感谢任何帮助。
祝你好运 ADDE
答案 0 :(得分:2)
您得到的错误来自不正确的xml定义或类命名/文件结构 - 这应该是相同的。当Autoloader读取你的config.xml并查看你在config.xml中告诉它的位置时,它没有找到它正在寻找的文件。
关于集合及其父模型的一些信息,如果它有帮助:
如果您直接使用集合,则应使用:
$_collection = Mage::getResourceModel('namespace/model_collection');
如果你正在使用一个获取集合数据的模型,并修改数据(例如总结,添加额外数据,删除等等),你应该像这样调用模型:
$_collection = Mage::getModel('namespace/model')->getCollection();
无论哪种方式,在config.xml中,您需要定义您正在使用资源模型以及应该使用哪些表(如果您有自定义表)。您永远不必编写新的集合来与默认的Magento表交互,因为已经有可以调用或扩展的集合(不推荐,您应该使用Observers)。
以下是config.xml中正确的集合定义的示例:
<models>
<modulename>
<resourceModel>modulename_mysql4</resourceModel>
</modulename>
<modulename_mysql4>
<class>Namespace_ModuleName_Model_Mysql4</class>
<entities>
<modulename>
<table>modulename_custom</table>
</modulename>
</entities>
</modulename_mysql4>
</models>
<resources>
<modulename_setup>
<setup>
<module>Namespace_ModuleName</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</modulename_setup>
<modulename_write>
<connection>
<use>core_write</use>
</connection>
</modulename_write>
<modulename_read>
<connection>
<use>core_read</use>
</connection>
</modulename_read>
</resources>
在这个文件中,我写的内联定义和节点必须这样写,你不能有一个返回,它必须是同一行。这是Magento自动加载器工作方式的一个小缺点。
希望这有帮助!
答案 1 :(得分:1)