2013-07-12 46 views
1

我想在第一時間在magento中創建自定義模塊,但是我有一些錯誤。 我在這裏提到了我所有的模塊代碼,它給了我錯誤 「致命錯誤:調用/ var/www/magentotest/app/code/local/Mycustommodule/Helloworld中的非對象的成員函數setOrder /Block/Monblock.php」在創建magento模塊時出錯

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> 

回答

1

問題是這一行:

$collection = Mage::getModel('helloworld/helloworld')->getCollection() 
          ->setOrder('id_mycustommodule_helloworld','asc'); 

getCollection()不返回集合,很可能是因爲有一個與你的新模塊相關聯的資源類。

This article有一個很好的解釋關於資源類的解釋。

我沒有測試過這一點,但我認爲解決的辦法是這樣的......

你想在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

+0

是的我已經看到您的鏈接http://www.pixafy.com/blog/2013/04/creating-a-magento-custom-model/它的工作原理我。 –