热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

当前位置 :| 主页>Linux教程>编程开发>PHP>

PEAR::HTML_QuickForm与Smarty 的结合应用

来源: 作者: 时间:2008-05-28 Tag: 点击:

PEAR::HTML_QuickFormSmarty 的结合应用
Haohappy 2005-12-28
http://blog.csdn.net/Haohappy2004

Haohappy在《PHP & More》第三期的PEAR::HTML_QuickForm入门一文中说过要写QuickFormSmarty的结合应用,一直没写,今天看到PHPE论坛上有朋友在询问,为自己的懒惰而惭愧。现在补上,希望对大家有点帮助。 在我看来,PEAR::HTML_QuickForm是个非常优秀的表单类库,大大加快了开发速度,我现在的大多数项目都会用到。如果对PEAR::HTML_QuickForm不了解的朋友,建议先看这篇文章。

本文针对的读者为有较丰富开发经验的PHP程序员,要求读者

1.             熟悉PEAR及其安装和使用;

2.             熟悉HTML_QuickForm

3.             理解模板的概念,熟悉Smarty模板引擎的使用。

PEAR::HTML_QuickForm入门》的表单的美化输出一节中,提到了用QuickForm自带的Form修饰方法来美化输出。很明显,这种方法显得有点麻烦,而且让程序员来美化网页,有点难为我们了。 现在程序员和设计师的合作最常见的就是通过模板,所以如何把QuickForm和模板引擎相结合,这就是我们需要解决的问题。其实QuickForm可以和多种模板引擎相结合,如ITX, Sigma, Flexy, Smarty等,每种模板都有其优点和缺点,目前Smarty是最通用的模板引擎,所以我们把QuickForm和Smarty的结合作为重点来研究。

首先,给大家看看我们的最后效果:

这个例子非常简单,只有一个Form4Input,只是用来讲解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_QuickFormSmarty连接的桥梁:

$renderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty ); 

所谓renderer,就是用来负责显示的,这里我们把QuickFormrenderer指定为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>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<form {$form_data.attributes} >

<table width="300"  border="0" align="center" cellpadding="3" cellspacing="3" bgcolor="#F6F6F6" style="font-size:9pt" class="AddTable">

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册