需要的可以下载来看和测试!app.tar
接开发实例四,上文作者是直接在控制器里进行SQL的写入操作,如此以来,我想在视图里显示我写入的数据是什么(即$_POST过来的数据),就不能直接引用了。
这时候,我们可以利用Magento的Block(块)功能来实现:
上文说了,在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写入->
视图输出
关于作者