|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
学会了生成静态网页,现在你应该接触一下XML了,恩,XML也了解了,那么AJAX你也得接触接触吧?AJAX完了....然后... Haohappy在《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',':: Haohappy Test网站办理体系 ::');
//构建登录表单
$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 );
// build the HTML for the form 生成表单的HTML代码
$form->accept($renderer);
//assign array with form data 分派表双数据到数组中
$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入门》,在此不再反复。
上面这行代码就是咱们将HTML_QuickForm与Smarty毗连的桥梁:
$renderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty );
所谓renderer,就是用来担任显示的,这里咱们把QuickForm的renderer指定为Smarty,咱们就能够利用壮大的Smarty模板引擎来格局化QuickForm的输入了。
其它:
changePwd()是这个文件的中心操作函数,用来修正暗码。
$form->process('changePwd'); //这行代码用来挪用changePwd()
//echo "<pre>";var_dump($renderer->toArray());echo "</pre>";
这一行用来调试,咱们随时可以把$renderer中的一切变量打印出来,看看法式是不是履行准确。
再看咱们的模板,也很复杂:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> changePwd.tpl </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="Haohappy">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<link href="{$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} >
<table width="300" border="0" align="center" cellpadding="3" cellspacing="3" bgcolor="#F6F6F6" style="font-size:9pt" class="AddTable">
<tr bgcolor="#FFFFFF">
<td width="47%" colspan="2"><div align="center">修正办理员暗码</div></tr>
<tr>
<tr>
<td width="47%"><div align="center">现有办理员暗码
</div></td>
<td width="53%">{$form_data.adminPwd.html}</td>
</tr>
<tr>
<td><div align="center">新暗码
</div></td>
<td>{$form_data.newPwd.html}</td>
</tr>
<tr>
<td><div align="center">再次输出新暗码
</div></td>
<td>{$form_data.newPwd2.html}</td>
</tr>
<tr>
<td colspan="2"><div align="center">
{$form_data.btnSubmit.html}
</div></td>
</tr>
</table>
</form>
</BODY>
</HTML>
这两个复杂的文件,总共不到100行代码,就完成了咱们在文章开首的后果。包括完全的表双数据验证,处置进程。
另:利用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_Controller is not intended for PHP newbies. If you don't understand what classes are, if you have no prior experience with QuickForm, if you are a fan of copy-paste programming then this package is not for you.
The package is indeed complex, but so are the problems it is trying to solve. Try to rewrite any of the enclosed multipage form examples without using such a package and you'll see what we mean.
这部分暂不会商,这需求人人对MVC有必定懂得,下次无机会再另写文章。我本人今朝的开辟框架就是个MVC框架,感觉很随手,显示部分就是交给Smarty+QuickForm来完成。但愿有更多人存眷和利用QuickForm,信任利用以后人人必定不会绝望的
刚开始因为习惯于ASP格式的写法,总是在这些方面出现问题,自己还总是找不到问题所在,这就提醒了自己,在写代码的时候一定要认真,不能粗心地老是少个“;”或者字母大小写不分,要不然很可能找半天都找不到错误。 |
|