什么是magento的资源

时间:2014-07-07 05:58:39

标签: php magento

我开始学习Magento。我创建了自定义模块。我在该操作中有控制器获取数据数组。但是当我试图在Block文件中获得相同的collecion。我没有收藏。
我是否需要创建资源文件夹以获取Block中的数据?我已经在Model中创建了Mysql4文件夹。资源的真正用途是什么?如何创建资源?
我的命名空间是公司,我的模块名称是网络 这是我的阻止文件名 - Web.php

<?php
class Company_Web_Block_Webdata extends Mage_Core_Block_Template
{
     public function getCategoryData()
     {
         return Mage::getModel('web/web')->getCollection()->getData();
     }
}


?>

我的config.xml

    <?xml version="1.0" ?>
<config>
    <modules>
        <Company_Web>
            <version>1.6.0.0.2</version>
        </Company_Web>
    </modules>
    <frontend>
        <routers>
            <web>
                <use>standard</use>
                <args>
                    <module>Company_Web</module>
                    <frontName>web</frontName>
                </args>
            </web>
        </routers>
        <layout>
            <updates>
                <web>
                    <file>web.xml</file>
                </web>
            </updates>
        </layout>
    </frontend>

    <global>
         <models> 
                <!--<web>
                       <class>Company_Web_Model</class>
                       <resourceModel>web_mysql4</resourceModel>        
               </web>
               <web_mysql4>
                   <class>Company_Web_Model_Mysql4</class>
                   <entities>
                       <web>
                           <table>category</table>
                       </web>
                   </entities>                
               </web_mysql4>-->
                <web>
                   <class>Company_Web_Model</class>
                   <resourceModel>web_resource</resourceModel>        
                </web>
                <web_resource>
                    <class>Company_Web_Model_Resource</class>
                    <entities>
                        <web>
                            <table>category</table>
                        </web>
                    </entities>                
                </web_resource>
         </models>
         <resources> 
             <web_setup>
                 <setup>
                     <module>Company_Web</module>  
                 </setup>
                 <connection>
                    <use>core_setup</use>
                </connection>
             </web_setup>
             <web_setup>
                <connection>
                    <use>core_write</use>
                </connection>
            </web_setup>
            <web_setup>
                <connection>
                    <use>core_read</use>
                </connection>
            </web_setup>
         </resources>
         <blocks> 
             <company_web>
                 <class>Company_Web_Block</class>
             </company_web>
         </blocks>
         <!--
         <helpers> 
             <company_web>
                 <class>Company_Web_Helper</class>
             </company_web>
         </helpers>-->
    </global>
</config>

Web.php文件在资源文件夹中。

 <?php
class Company_Web_Model_Resource_Web extends Mage_Core_Model_Resource_Db_Abstract
{
        protected function _construct()
        {
                $this->_init('web/web', 'id');
        }
} 


?>

Collection.php文件Resource / Web / collection.php

<?php
class Company_Web_Model_Resource_Web_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
{
        protected function _construct()
        {
                $this->_init('web/web');
        } 
}

?>

IndexController.php

<?php
class Company_Web_IndexController extends Mage_Core_Controller_Front_Action
{
    public function indexAction()
    {    
        $this->loadLayout();     
        $this->renderLayout();
    }

    public function addcategoryAction()
    {
        if ($this->getRequest()->isPost()) 
        {
            $data = $this->getRequest()->getParams();
            $catName = $data['catName'];
            $status = $data['status'];
            $data = array('name'=>$catName,'status'=>$status);
            $model = Mage::getModel('web/web')->setData($data);
            try {
                $insertId = $model->save()->getId();
                $this->_redirect('web/index/category');
            } catch (Exception $e){
             echo $e->getMessage();   
            }

        }
        $this->loadLayout();     
        $this->renderLayout();
    }

    public function categoryAction()
    {
        $this->loadLayout();
        $this->renderLayout();
    }

}

?>

布局/ web.xml中

<?xml version="1.0" ?>
<layout version="0.1.0">
    <web_index_index>
        <reference name="content">
            <block type="core/template" name="web" template="web/web.phtml"></block>
        </reference>
    </web_index_index>

    <web_index_addcategory>
        <reference name="content">
            <block type="core/template" name="web" template="web/addcategory.phtml"></block>
        </reference>
    </web_index_addcategory>

    <web_index_category>
        <reference name="content">
            <block type="core/template" name="category" template="web/category.phtml" />
        </reference>
    </web_index_category>
</layout>

1 个答案:

答案 0 :(得分:1)

如果您想与数据库进行交互,则必须使用资源模型,您可以使用一些通用函数,例如load_beforeload_afterLoad_afterSave等。它。即使您的自定义查询也可以到此处。但是要使用资源模型,还应该声明ModelCollection类。在您的情况下,应该有三个文件如下:

  • 模型文件:Web / Model / Web.php
  • 资源文件:Web / Model / Resource / Web.php
  • 收集文件:Web / Model / Resource / Web / Collection.php

请更新models标记的config.xml,如下所示:

<models> 
            <web>
                   <class>Company_Web_Model</class>
                   <resourceModel>web_resource</resourceModel>        
           </web>
           <web_resource>
               <class>Company_Web_Model_Resource</class>
               <entities>
                   <web>
                       <table>category</table>
                   </web>
               </entities>                
           </web_resource>
     </models>

请将您的布局文件更新为:

<web_index_category>
    <reference name="content">
        <block type="web/webdata" name="category" template="web/category.phtml" />
    </reference>
</web_index_category>