2013-07-12 4 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에는 리소스 클래스에 대한 설명이 있습니다. 뿐만 아니라이 추가로

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"); 
    } 
} 

같이 보입니다

나는이 테스트를하지 않은,하지만 난 솔루션이 이런 식 생각 ...

당신은 Mycustommodule/Helloworld/Resource/Helloworld/Collection.php에서 클래스를 만들려면 config.xml 파일에 값이있는 노드 config/global/resources/helloworld/class => Mycustommodule_Helloworld_Resource

+0

예 http://www.pixafy.com/blog/2013/04/creating-a-magento-custom-model/에서 귀하의 링크를 보았습니다. 나를. –

관련 문제