繁体   English   中英

在magento中创建模块时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM