[英]error in creating module in magento
我第一次尝试在magento中创建自定义模块,但出现一些错误。 我在这里提到了我所有的模块代码,它给了我错误“致命错误:在/ var / www / magentotest / app / code / local / Mycustommodule / Helloworld / Block中的非对象上调用成员函数setOrder() /Monblock.php”
pls help me.
(A) directory structure
===============================================================
1. in app/code/local
Mycustommodule/Helloworld/etc/config.xml
Mycustommodule/Helloworld/controllers/IndexController.php
Mycustommodule/Helloworld/Model/Helloworld.php
Mycustommodule/Helloworld/Model/Mysql4/Helloworld.php
Mycustommodule/Helloworld/Model/Mysql4/Helloworld/Collection.php
Mycustommodule/Helloworld/Block/Monblock.php
2. in design
app/design/frontend/default/default/template/helloworld/view.phtml
app/design/frontend/default/default/layout/helloworld.xml
3. my table is
id_mycustommodule_helloworld nom prenom telephone
1 abc s1 435355353
2 fgh s2 55555
===================================================================
(B) now my code
===============================================================
1. config.xml
**************
<?xml version="1.0" ?>
<config>
<modules>
<Mycustommodule_Helloworld>
<version>0.0.1</version>
</Mycustommodule_Helloworld>
</modules>
<frontend>
<routers>
<helloworld>
<use>standard</use>
<args>
<module>Mycustommodule_Helloworld</module>
<frontName>helloworld</frontName>
</args>
</helloworld>
</routers>
<!-- This node contains module layout configuration -->
<layout>
<updates>
<!-- module alias -->
<helloworld>
<!-- File for loading -->
<file>helloworld.xml</file>
</helloworld>
</updates>
</layout>
</frontend>
<global>
<models>
<helloworld>
<class>Mycustommodule_Helloworld_Model</class>
<resourceModel>helloworld_mysql4</resourceModel>
</helloworld>
<helloworld_mysql4>
<class>Mycustommodule_Helloworld_Model_Mysql4</class>
<entities>
<helloworld>
<table>mycustommodule_helloworld</table>
</helloworld>
</entities>
</helloworld_mysql4>
</models>
<resources>
<helloworld_setup>
<setup>
<module>Mycustommodule_Helloworld</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</helloworld_setup>
<helloworld_write>
<connection>
<use>core_write</use>
</connection>
</helloworld_write>
<helloworld_read>
<connection>
<use>core_read</use>
</connection>
</helloworld_read>
</resources>
<blocks>
<helloworld>
<class>Mycustommodule_Helloworld_Block</class>
</helloworld>
</blocks>
</global>
</config>
2. IndexController.php
***********************
<?php
class Mycustommodule_Helloworld_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$this->loadLayout();
$this->renderLayout();
}
public function methodAction()
{
echo "block called";
}
}
?>
3. Mycustommodule/Helloworld/Model/Helloworld.php
**************************************************
<?php
class Mycustommodule_Helloworld_Model_Helloworld extends Mage_Core_Model_Abstract
{
public function _construct()
{
parent::_construct();
$this->_init('helloworld/helloworld');
}
}
?>
4. Mycustommodule/Helloworld/Model/Mysql4/Helloworld.php
**************************************************
<?php
class Mycustommodule_Helloworld_Model_Mysql4_Helloworld extends Mage_Core_Model_Mysql4_Abstract
{
public function _construct()
{
$this->_init('helloworld/helloworld', 'id_MyCustomModule_helloworld');
}
}
?>
5. Mycustommodule/Helloworld/Model/Mysql4/Helloworld/Collection.php
********************************************************************
<?php
class Mycustommodule_Helloworld_Model_Mysql4_Helloworld_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
public function _construct()
{
parent::_construct();
$this->_init('helloworld/helloworld');
}
}
?>
6. Mycustommodule/Helloworld/Block/Monblock.php
********************************************************************
<?php
class Mycustommodule_Helloworld_Block_Monblock extends Mage_Core_Block_Template
{
public function methodblock()
{
$retour='';
$collection = Mage::getModel('helloworld/helloworld')->getCollection()
->setOrder('id_mycustommodule_helloworld','asc');
foreach($collection as $data)
{
$retour .= $data->getData('nom').' '.$data->getData('prenom')
.' '.$data->getData('telephone').'<br />';
}
Mage::getSingleton('adminhtml/session')->addSuccess('Cool Ca marche !!');
return $retour;
}
}
?>
7. app/design/frontend/default/default/template/helloworld/view.phtml
********************************************************************
<p>Hello World!</p>
<?php
echo $this->methodblock();
?>
8. app/design/frontend/default/default/layout/helloworld.xml
****************************************************************
<?xml version="1.0" ?>
<layout version="0.1.0">
<helloworld_index_index>
<reference name="content">
<block type="helloworld/monblock" name="helloworld" template="helloworld/view.phtml"></block>
</reference>
</helloworld_index_index>
</layout>
问题在于此行:
$collection = Mage::getModel('helloworld/helloworld')->getCollection()
->setOrder('id_mycustommodule_helloworld','asc');
getCollection()
不返回集合,这很可能是因为没有资源类与新模块关联。
本文对资源类进行了很好的解释。
我没有测试过,但是我认为解决方案是这样的...
您想要在Mycustommodule/Helloworld/Resource/Helloworld/Collection.php
中创建一个类似于以下内容的类
class Mycustomermodule_HelloWorld_Resource_Helloworld_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract {
// not the same as PHP's __construct()
function _construct() {
$this->_init("helloworld/helloworld", "id_MyCustomModule_helloworld");
}
}
以及将此带有值的节点添加到config.xml文件config/global/resources/helloworld/class => Mycustommodule_Helloworld_Resource
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.