通过清心醉

Magento 开发实例五(模型Model)通过Block(块)功能操作数据库

需要的可以下载来看和测试!app.tar

接开发实例四,上文作者是直接在控制器里进行SQL的写入操作,如此以来,我想在视图里显示我写入的数据是什么(即$_POST过来的数据),就不能直接引用了。

这时候,我们可以利用MagentoBlock()功能来实现:

上文说了,在Blog控制器里增加个ceshiAction的方法

 

首先嘛肯定也要写个触发入口,作者还是选择用mymodule/index/index模板里增加个表单

提交到/mymodule/blog/ceshi

#index.phtml文件里:

传递到测试表单->控制器->布局->通过Block引用->视图调用显示

<form action=”<?php echo $this->getUrl(‘mymodule/blog/ceshi’); ?>” method=”post”>

<p>名字::<input type=”text” name=”name” /></p>

<p>电话::<input type=”text” name=”phone” /></p>

<input type=”submit” name=”添加” />

</form>

 

然后我们来写下blog控制器的ceshiAction方法

function ceshiAction() #引用Block

{

#首先我们在index.phtml视图里增加另外一个表单,把值传到这里来

#首先我们调用布局

$this->loadLayout();

$this->renderLayout();

#我们要注意布局里的写法. 跟踪到local.xml文件

}

 

local.xml布局里我们写多个新的节点

<mymodule_blog_ceshi>

<reference name=”root”>

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

</reference>

</mymodule_blog_ceshi>

 

在这里可能注意到了一个type=”mymodule/ceshi” ,这是一个URI

根据Block块的功能,我们需要在config.xml里定义

<blocks>

<mymodule>>

<class>Mage_Mymodule_Block</class>

</mymodule>

</blocks>

Model的定义一样,这里到时会定义到一个类

App/code/local/Mage/Mymodule/Block里创建个Ceshi.php文件

也许你会问,为什么要定义Ceshi.php文件,系统是怎么知道该类文件的存在。

type=”mymodule/ceshi”的完整URI是:/mage/mymodule/block/ceshi.php

所以class里那么写就好了。

Ceshi.php文件里这么写::

class Mage_Mymodule_Block_Ceshi extends Mage_Core_Block_Template

{

#和模型/控制器一样的,命名规则注意下,这里我是继承Mage_Core_Block_里的Template

#其实还有很多种,方式不同,看需求来继承使用。

}

 

定义好了Block()之后,我们来弄多个template=”mymodule/ceshi.phtml”视图模板

内容先不加。

 

正式开始走流程了:

<form action=”<?php echo $this->getUrl(‘mymodule/blog/ceshi’); ?>” method=”post”>

这里我们表单会把数据提交到ceshiAction()的方法中

我们在方法里直接调用了布局,根本未进行任何操作。但是因为布局local.xml里我们有定义type=”mymodule/ceshi”,而且config.xml里又有类定义

所以这时候其实就会跑到

Mage/Mymodule/Block/Ceshi.php文件里

class Mage_Mymodule_Block_Ceshi extends Mage_Core_Block_Template

{

/*

class Mage_Page_Block_Html extends Mage_Core_Block_Template

#块类的定义必须继承Mage_Core_Block

#同时注意类名的写法

#项目名_模块(插件)_Block_目录/文件

*/

protected $data;

 

function __construct()

{

$this->data=$this->getRequest()->getPost(); #获取POST过来的数据

#echo $this->data[‘name’].”</br>”.$this->data[‘phone’];

$blog=Mage::getModel(‘mymodule/blog’); #实例模型

$blog->setName($this->data[‘name’]); #name字段的值

$blog->setPhone($this->data[‘phone’]); #phone字段的值

$blog->save(); #如果写入成功

return $this->data; #返回的值包括这里的全部方法,都可以直接给模板调用哦

}

}

 

作者使用构造方法来实现,其实在这里可以进行判断如果数据写入失败和成功又如何调用,为走流程,更深的得慢慢研究就先放着了。

到这里,布局文件type=”mymodule/ceshi”里的流程我们走完了,接下来就是要看视图了

template=”mymodule/ceshi.phtml”

<?php

echo “您写入的用户名为:”.$this->data[‘name’].”</br>”.”您写入的电话号码为:”.$this->data[‘phone’];

?>

 

搞定,一个简单的Block()操作完成

 

具体是:

触发控制器->

控制器如果有执行布局->

触发布局type里的Block(快功能)->

系统实例化Block块类->

调用Block块里面的类方法(需要在视图里调用方法,所以作者直接用构造方法)->

类方法里进行SQL写入->

视图输出

关于作者

清心醉 administrator

发表评论

请输入验证码: