通过清心醉

Magento 开发实例六(模型Model)通过Block(块)功能提取所有数据

需要学习的下载看:app.tar

回顾上文的具体流程:

URL触发控制器-> 控制器如果有执行布局-> 触发布局type里的Block(块功能)-> 系统实例化Block块类-> 调用Block块里面的类方法(需要在视图里调用方法,所以作者直接用构造方法)-> 类方法里进行SQL写入-> 视图输出

 

如果要进行所有数据返回到数据集,Magento提供了getCollection()的方法,因此我们需要配置getCollection()的配置项来配置模型集合。

 

作者的是以blog做为表,在每个模型配置/实例化类中都有指定mymodule/blog

 

每个模型都有一个“protected属性“_resourceCollectionName,该值是从父类“Mage_Core_Model_Abstract继承来的。这个属性的值是这个模型对应的模型集合的URI

protected ‘_resourceCollectionName’ => string ‘mymodule/blog_collection’

 

更多具体的我们可以:

$data1=Mage::getModel(‘mymodule/blog’);

var_dump($data); #打印数组就可以看到protected ‘_resourceCollectionName’ =>

 

在默认情况下,这个值是模型的URI加上“_collectionMagento把模型集合也看做是一种资源(Resrouce),所以运用资源模型的命名规则,模型集合的全名是

我们追踪config.xml,看看我们的配置

<global><models><mymodule_resource> 在资源配置里,我们可以看到我们定于的资源类<class>Mage_Mymodule_Model_Resource

 

Mage_Mymodule_Model_Resource_Blog_Collection

#因为我们是在Blog模型资源下

然后我们要创建如下文件

class Mage_Mymodule_Model_Resource_Blog_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract{

protected function _construct()

{

$this->_init(‘mymodule/blog’);

}

}

 

在这说下,如果是继承,可以查看核心代码的目录

 

好了,同样,我们在mymodule/index/index视图里增加个调用表单,用于输出blog表里的全部数据,增加个触发URL

<a href=<?php echo $this->getUrl(‘mymodule/blog/blogsql’); ?>查看全部的blog数据</a>

 

这时候,Blog执行控制器我们需要写多个blogsql的代码:

function blogsqlAction()

{

$this->loadLayout();

$this->renderLayout();

}

直接引用布局,我们来增加布局配置:local.xml

<mymodule_blog_blogsql>

<reference name=”root”>

<block type=”mymodule/blogsql” name=”root” output=”toHtml” template=”mymodule/blogsql.phtml”/>

</reference>

</mymodule_blog_blogsql>

 

Block()里增加个Blogsql的方法:

 

class Mage_Mymodule_Block_Blogsql extends Mage_Core_Block_Template

{

protected $data;

function __construct()

{

$this->data=Mage::getModel(‘mymodule/blog’)->getCollection(); #实例模型全部资源

return $this->data; #返回的模型的值,给视图直接调用

}

}

 

 

 

已经实现了我们需要的,然后我们在视图里操作输出吧:

 

 

 

Blogsql.phtml文件里:

 

 

 

blogsql的视图:</br>

 

<?php

 

$o=0;

 

foreach($this->data as $blog)

 

{

 

echo “编号:”.$o++.”名字:”.$blog->getName().”-电话“.$blog->getPhone().”</br>”;

 

}

?>

 如果我们需要之需要获取全部数据集中的name

可以用:$this->data=Mage::getModel(‘mymodule/blog’)->getCollection()->addAttributeToSelect(‘name’);

 

 

关于作者

清心醉 administrator

发表评论

请输入验证码: