您的位置:首页 > 其它

vim编辑器--使用详解

2016-02-29 14:46 381 查看
PEAR::HTML_QuickForm与Smarty的结合应用[/b]Haohappy2005-12-28http://blog.csdn.net/Haohappy2004Haohappy在《PHP&More》第三期的《PEAR::HTML_QuickForm入门》一文中说过要写QuickForm和Smarty的结合应用,一直没写,今天看到PHPE论坛上有朋友在询问,为自己的懒惰而惭愧。现在补上,希望对大家有点帮助。在我看来,PEAR::HTML_QuickForm是个非常优秀的表单类库,大大加快了开发速度,我现在的大多数项目都会用到。如果对PEAR::HTML_QuickForm不了解的朋友,建议先看这篇文章。本文针对的读者为有较丰富开发经验的PHP程序员,要求读者<!--[if!supportLists]-->1.<!--[endif]-->熟悉PEAR及其安装和使用;<!--[if!supportLists]-->2.<!--[endif]-->熟悉HTML_QuickForm;<!--[if!supportLists]-->3.<!--[endif]-->理解模板的概念,熟悉Smarty模板引擎的使用。在《PEAR::HTML_QuickForm入门》的表单的美化输出一节中,提到了用QuickForm自带的Form修饰方法来美化输出。很明显,这种方法显得有点麻烦,而且让程序员来美化网页,有点难为我们了。现在程序员和设计师的合作最常见的就是通过模板,所以如何把QuickForm和模板引擎相结合,这就是我们需要解决的问题。其实QuickForm可以和多种模板引擎相结合,如ITX,Sigma,Flexy,Smarty等,每种模板都有其优点和缺点,目前Smarty是最通用的模板引擎,所以我们把QuickForm和Smarty的结合作为重点来研究。首先,给大家看看我们的最后效果:这个例子非常简单,只有一个Form,4个Input,只是用来讲解QuickForm的使用。在实际开发中,我们经常遇到几十个Input的情况。实际上,表单越复杂,就越显出我们传统的处理方式的低效,就越显出QuickForm的强大。这一点,也许大家以后会体会到。好,开始我们的QuickForm+Smarty之旅。changPwd.php
<?
require_once(
"includes/config.inc.php"
);
//
构建
Smarty
对象
$smarty
=new
Smarty_App
;
$smarty
->
assign
(
'CSSDIR'
,
'./templates/admin'
);
$smarty
->
assign
(
'title'
,
'::HaohappyTest
网站管理系统
::'
);
//
构建登录表单
$form
=new
HTML_QuickForm
(
'frmChgPwd'
,
'post'
);
//
增加表单元素
$form
->
addElement
(
'password'
,
'adminPwd'
,
''
,
'class=NameAndPwd'
);
$form
->
addElement
(
'password'
,
'newPwd'
,
''
,
'class=NameAndPwd'
);
$form
->
addElement
(
'password'
,
'newPwd2'
,
''
,
'class=NameAndPwd'
);
$form
->
addElement
(
'submit'
,
'btnSubmit'
,
'
修改密码
'
,
'class=btnSubmit'
);
//
增加验证规则
会自动生成
javascript
变量,存入
javascript
验证函数
$form
->
addRule
(
'adminPwd'
,
'
密码不能为空!
'
,
'required'
,
''
,
'client'
);
$form
->
addRule
(
'newPwd'
,
'
新密码不能为空!
'
,
'required'
,
''
,
'client'
);
$form
->
addRule
(
'newPwd2'
,
'
新密码不能为空!
'
,
'required'
,
''
,
'client'
);
$form
->
addRule
(array(
'newPwd'
,
'newPwd2'
),
"
两次输入的密码不同!!
"
,
'compare'
,
''
,
'client'
);
if(
$form
->
validate
()){
//
如果表单数据正确,修改密码
$form
->
process
(
'changePwd'
);
}
else{
//
否则显示表单
//
建立
renderer
对象
$renderer
=&new
HTML_QuickForm_Renderer_ArraySmarty
(
$smarty
);
//buildtheHTMLfortheform
生成表单的
HTML
代码
$form
->
accept
(
$renderer
);
//assignarraywithformdata
分配表单数据到数组中
$smarty
->
assign
(
'form_data'
,
$renderer
->
toArray
());
$smarty
->
catching
=
false
;
//
调试
//echo"<pre>";var_dump($renderer->toArray());echo"</pre>";
$smarty
->
display
(
"changePwd.tpl"
);
}
//
修改密码
function
changePwd
(){}
?>
在代码中,我们用
$form->addElement()
增添了
4
个表单元素,用
$form->addRule()
增加了
4
条验证规则。怎么样,是不是很快捷方便?
以验证两个密码是否相同的验证规则为例,如果我们自己写验证规则,虽然快,但是代码就会显得臃肿和凌乱,由
QuickForm
来负责数据验证,开发速度大大提高,而且代码显得很简洁漂亮。仅用了一行代码:
$form
->
addRule
(array(
'newPwd'
,
'newPwd2'
),
"
两次输入的密码不同!!
"
,
'compare'
,
''
,
'client'
);
关于QuickForm的好处,请参看《PEAR::HTML_QuickForm入门》,在此不再重复。
下面这行代码就是我们将[/b]
HTML_QuickForm[/b]
与[/b]
Smarty[/b]
连接的桥梁:[/b]
$renderer
=&new
HTML_QuickForm_Renderer_ArraySmarty
(
$smarty
);
所谓renderer,就是用来负责显示的,这里我们把QuickForm的renderer指定为Smarty,我们就可以使用强大的Smarty模板引擎来格式化QuickForm的输出了。其它:
changePwd
()
是这个文件的核心操作函数,用来修改密码。
$form
->
process
(
'changePwd'
);[/b]
//
这行代码用来调用
changePwd()
//echo"<pre>";var_dump($renderer->toArray());echo"</pre>";
这一行用来调试,我们随时可以把
$renderer
中的所有变量打印出来,看看程序是否执行正确。
再看我们的模板,也很简单:[/b]
[/b]
[/b]
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<TITLE>changePwd.tpl</TITLE>
<<placew:st="on">META</place>NAME="Generator"CONTENT="EditPlus">
<<placew:st="on">META</place>NAME="Author"CONTENT="Haohappy">
<<placew:st="on">META</place>NAME="Keywords"CONTENT="">
<<placew:st="on">META</place>NAME="Description"CONTENT="">
<linkhref="{$CSSDIR}/style.css"rel="stylesheet"type="text/css">
{if$form_data.javascript}
{$form_data.javascript}
{/if}
</HEAD>
<BODY>
<p> </p>
<p> </p>
<p> </p>
<form{$form_data.attributes}>
<tablewidth="300"border="0"align="center"cellpadding="3"cellspacing="3"bgcolor="#F6F6F6"style="font-size:9pt"class="AddTable">
<trbgcolor="#FFFFFF">
<tdwidth="47%"colspan="2"><divalign="center">
修改管理员密码
</div></tr>
<tr>
<tr>
<tdwidth="47%"><divalign="center">
现有管理员密码
</div></td>
<tdwidth="53%">{$form_data.adminPwd.html}</td>
</tr>
<tr>
<td><divalign="center">
新密码
</div></td>
<td>{$form_data.newPwd.html}</td>
</tr>
<tr>
<td><divalign="center">
再次输入新密码
</div></td>
<td>{$form_data.newPwd2.html}</td>
</tr>
<tr>
<tdcolspan="2"><divalign="center">
{$form_data.btnSubmit.html}
</div></td>
</tr>
</table>
</form>
</BODY>
</HTML>
这两个简单的文件,总共不到[/b]100[/b]行代码,就完成了我们在文章开头的效果。包含完整的表单数据验证,处理过程。[/b]另:使用QuickForm,可以很方便地实现显示层和逻辑层的分离,因为处理的函数是完全独立出来的。例如说可以把
if(
$form
->
validate
()){
//
如果表单数据正确,修改密码
$form
->
process
(
'changePwd'
);
}
<!--[if!supportLineBreakNewLine]--><!--[endif]-->改装成
if(
$form
->
validate
()){
switch($post_vars['action']){
default:
case"changPwd":
$form
->
process
(
'changePwd'
);
break;
case"Add":
$form
->
process
(
'add'
);
break;
case"Update":
$form
->
process
(
'update'
);
break;
case"Delete":
$form
->
process
(
'delete'
);
break;
}
<!--[if!supportLineBreakNewLine]--><!--[endif]-->然后把changePwd,add,update,delete四个函数独立到某个文件当中。这样就可以根据页面提交的action来调用不同的操作。这个想法相对比较简陋一些,如果你要用更强大的功能,还可以试试PEAR::HTML_QuickForm_Controller。HTML_QuickForm_Controller基于PageController设计模式,也就是用单个页面来处理通过GET和POST传递而来的request和action。这是个非常有意思的想法,但是这种开发模式不适合于新手,因为相对比较复杂。其作者也说:HTML_QuickForm_ControllerisnotintendedforPHPnewbies.Ifyoudon'tunderstandwhatclassesare,ifyouhavenopriorexperiencewithQuickForm,ifyouareafanofcopy-pasteprogrammingthenthispackageisnotforyou.Thepackageisindeedcomplex,butsoaretheproblemsitistryingtosolve.Trytorewriteanyoftheenclosedmultipageformexampleswithoutusingsuchapackageandyou'llseewhatwemean.这部份暂不讨论,这需要大家对MVC有一定了解,下次有机会再另写文章。我自己目前的开发框架就是个MVC框架,觉得很顺手,显示部份就是
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: