我开始学习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>
答案 0 :(得分:1)
如果您想与数据库进行交互,则必须使用资源模型,您可以使用一些通用函数,例如load
,_beforeload
,_afterLoad
,_afterSave
等。它。即使您的自定义查询也可以到此处。但是要使用资源模型,还应该声明Model
和Collection
类。在您的情况下,应该有三个文件如下:
请更新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>