Smarty+QUICKFORM小小演示


Posted in PHP onFebruary 25, 2007

由于公司需要quickform结合SMARTY的开发模式,最近几天恶补了下,跟大家分享下心得吧,quickform是一个PEAR类库,可以快速生成表单控件及验证表单的JS代码,大家可能觉得这个用手写JS和HTML生成不是很快吗,用那个不是更麻烦,的确,少量的表单控件是显示不出quickform的优势的,但是如果有大量的表单控件,例如OA的后台,quickform的优势就显示出来了,利用quickform有代码清晰,易于维护等特点,非常适合大中型项目的开发,更方便的是可以在smarty中轻松使用它,^_^废话少说,来看看代码,不过大家之前最好了解下PEAR的安装,参照:http://hi.baidu.com/wanghaozi/blog/item/81cfb7003f973687e850cd3e.html。
    由于公司用的quickform是自己改进过的,因此代码和大家网上看到的会有些差别,涉及版权在这里就不便说明,简要展示下核心代码,大家就当了解下吧,有兴趣的朋友可以看看这篇HAOHAPPY的文章:http://www.phpe.net/articles/418.shtml
    [php]
<?php

/*
*作者:辉老大
*页面:path.cfg.php
*功能:系统路径设置
*版权所有:随便copy^_^
*/

$global['path']['conf']     = $global['path']['root'] . 'conf/';//定义系统配置文件路径
$global['path']['lib']      = $global['path']['root'] . 'lib/';//定义系统库文件路径

?>
    [/php]
[php]
<?php

/*
*作者:辉老大
*页面:smarty.cfg.php
*功能:smarty基本配置
*版权所有:随便copy^_^
*/

//定义模板路径
$global['smarty']['template_dir']       = $global['path']['root'] . 'lib/smarty/templates';
//定义模板编译目录
$global['smarty']['compile_dir']        = $global['path']['root'] . 'lib/smarty/templates_c';
//定义smarty配置文件夹路径
$global['smarty']['config_dir']         = $global['path']['conf'] . 'lib/smarty/configs';
$global['smarty']['cache_dir']             = $global['path']['root'] . 'lib/smarty/cache';

//$global['smarty']['compile_check']         = true;
//设置smarty报错禁用
$global['smarty']['debugging']             = false;
//关闭缓存
$global['smarty']['caching']             = false;
//$global['smarty']['cache_lifetime']     = 6000;

//定义左右边界符
$global['smarty']['left_delimiter']     = '<{';
$global['smarty']['right_delimiter']     = '}>';

?>
[/php]
[php]
<?php

/*
*作者:辉老大
*页面:common.cfg.php
*功能:全局配置
*版权所有:随便copy^_^
*/

$global['path']['root'] = dirname(__FILE__) . '/';//设置根目录
require($global['path']['conf'] . 'conf/path.cfg.php');

require($global['path']['conf'] . 'smarty.cfg.php');
//包含smarty类库
require($global['path']['lib']  . 'smarty/libs/Smarty.class.php');

//smarty配置
$tpl = new Smarty();
$tpl->template_dir         = $global['smarty']['template_dir'];
$tpl->compile_dir          = $global['smarty']['compile_dir'];
$tpl->config_dir           = $global['smarty']['config_dir'];

$tpl->debugging         = $global['smarty']['debugging'];
$tpl->caching             = $global['smarty']['caching'];
$tpl->cache_lifetime     = $global['smarty']['cache_lifetime'];

$tpl->left_delimiter     = $global['smarty']['left_delimiter'];
$tpl->right_delimiter     = $global['smarty']['right_delimiter'];
unset($global['smarty']);

ini_set('include_path', ini_get('include_path') .
    PATH_SEPARATOR . $global['path']['lib'] . 'pear/');//载入pear库文件
?>
[/php]
[php]
<?php

/*
*作者:辉老大
*页面:index.php
*功能:UI
*版权所有:随便copy^_^
*/

require_once('common.inc.php');//载入全局配置

//包含quickform类库
require($global['path']['lib'] . 'pear/HTML/QuickForm.php');

$form = new HTML_QuickForm('changepwdform');//生成quickform实例,参数为表单名

/*
*开始添加表单元素
*参数依次为:表单元素类型,名称,(按钮标签文字),样式
*/
$form->addElement('password','adminPwd','','style="width:120px"');
$form->addElement('password','newPwd','','style="width:120px"');
$form->addElement('password','newPwd2','','style="width:120px"');
$form->addElement('submit','btnSubmit','修改密码','style="width:100px"');

//增加验证规则,自动生成JS
$form->addRule('adminPwd','密码不能为空!','required','','client');
$form->addRule('newPwd','新密码不能为空!','required','','client');
$form->addRule('newPwd2','请再次输入新密码!','required','client');
$form->addRule(array('newPwd','newPwd2'),"两次输入的密码不一致!",'compare','','client');
$form->;//禁止提交表单

//分配表单数据到数组中
$tpl->assign('form_data',$form->toArray());

//显示模板
$tpl->display('index.tpl');

?>
[/php]
模板代码:

<HTML> 
<HEAD> 
<TITLE>quickform+smarty</TITLE> 
<{if $form_data.javascrīpt}> 
    <{$form_data.javascrīpt}> 
<{/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> 
<scrīpt type="text/javascrīpt" src="response.js"></scrīpt> 
</BODY> 
</HTML>

这里大家也许觉得奇怪,为什么路径要定义这么复杂,而且使用绝对路径呢?这个是最近适应公司项目的需要,呵呵!其实这样有利于部署大的项目。这个帖子相信没接触过quickform或smarty的新手一定看的一头雾水,当然,我在这也只是简单介绍下,希望大家有兴趣的可以继续深入研究,最后看看效果:

看判断两次输入密码是否一样就这一句:
[php]
$form->addRule(array('newPwd','newPwd2'),"两次输入的密码不一致!",'compare','','client');
[/php]
代码看起来是不是简洁清楚啊,呵呵,接下来还会应用到再结合XAJAX的应用,我会继续和大家分享学习心得,嘿嘿!

PHP 相关文章推荐
PHP插入排序实现代码
Apr 04 PHP
CI框架中zip类应用示例
Jun 17 PHP
php数组添加元素方法小结
Dec 20 PHP
php替换字符串中间字符为省略号的方法
May 04 PHP
ThinkPHP实现递归无级分类――代码少
Jul 29 PHP
大家在抢红包,程序员在研究红包算法
Aug 31 PHP
详解php比较操作符的安全问题
Dec 03 PHP
从性能方面考虑PHP下载远程文件的3种方法
Dec 29 PHP
Zend Framework动作助手Redirector用法实例详解
Mar 05 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 PHP
微信支付之JSAPI公众号支付详解
May 15 PHP
php与阿里云短信接口接入操作案例分析
May 27 PHP
php简单封装了一些常用JS操作
Feb 25 #PHP
实现了一个PHP5的getter/setter基类的代码
Feb 25 #PHP
php公用函数列表[正则]
Feb 22 #PHP
发布一个用PHP fsockopen写的HTTP下载的类
Feb 22 #PHP
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
Feb 22 #PHP
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 #PHP
珊瑚虫IP库浅析
Feb 15 #PHP
You might like
关于PHPDocument 代码注释规范的总结
2013/06/25 PHP
php验证是否是md5编码的简单代码
2014/04/01 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
Javascript实例教程(19) 使用HoTMetal(5)
2006/12/23 Javascript
JavaScript 拾漏补遗
2009/12/27 Javascript
js常用排序实现代码
2010/12/28 Javascript
jQuery的ready方法详解
2014/11/27 Javascript
JavaScript常用基础知识强化学习
2015/12/09 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
html判断当前页面是否在iframe中的实例
2016/11/30 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
js轮播图无缝滚动效果
2017/06/17 Javascript
Element输入框带历史查询记录的实现示例
2019/01/15 Javascript
nodejs实现的http、https 请求封装操作示例
2020/02/06 NodeJs
angula中使用iframe点击后不执行变更检测的问题
2020/05/10 Javascript
[00:58]他们到底在电话里听到了什么?
2017/11/21 DOTA
python定时器使用示例分享
2014/02/16 Python
用Python编写web API的教程
2015/04/30 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
详解python中Numpy的属性与创建矩阵
2018/09/10 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
python实现简单图片物体标注工具
2019/03/18 Python
Django 反向生成url实例详解
2019/07/30 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
Django通过json格式收集主机信息
2020/05/29 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
python学习笔记之多进程
2020/08/06 Python
django有哪些好处和优点
2020/09/01 Python
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
捐资助学倡议书
2014/04/15 职场文书
民间借贷借条范本
2015/05/25 职场文书
对学校的意见和建议
2015/06/04 职场文书
Node.js实现断点续传
2021/06/23 Javascript