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 相关文章推荐
综合图片计数器
Oct 09 PHP
如何在PHP中使用Oracle数据库(2)
Oct 09 PHP
THINKPHP+JS实现缩放图片式截图的实现
Mar 07 PHP
深入php var_dump()函数的详解
Jun 05 PHP
php实现每天自动变换随机问候语的方法
May 12 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
PHP抓取及分析网页的方法详解
Apr 26 PHP
PHP框架Laravel插件Pagination实现自定义分页
Apr 22 PHP
PHP实现的文件上传类与用法详解
Jul 05 PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 PHP
thinkphp框架使用JWTtoken的方法详解
Oct 10 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
Dec 12 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
php adodb连接mssql解决乱码问题
2009/06/12 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
2014/04/01 PHP
php基于GD库画五星红旗的方法
2015/02/24 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
javascript与CSS复习(三)
2010/06/29 Javascript
jquery 操作DOM案例代码分享
2012/04/05 Javascript
原生js做的手风琴效果的导航菜单
2013/11/08 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
解决vue一个页面中复用同一个echarts组件的问题
2020/07/19 Javascript
vue3使用vue-count-to组件的实现
2020/12/25 Vue.js
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
说一说Python logging
2016/04/15 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
python实现文件分片上传的接口自动化
2020/11/19 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
荟萃全球保健品:维他购
2018/05/09 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
一份软件工程师的面试试题
2016/02/01 面试题
护士专业推荐信
2013/11/02 职场文书
室内设计专业学生的自我评价分享
2013/11/27 职场文书
法学专业毕业生自荐信范文
2013/12/18 职场文书
先进班级集体事迹材料
2014/01/30 职场文书
教师新年寄语
2014/04/03 职场文书
《卖木雕的少年》教学反思
2014/04/11 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
《穷人》教学反思
2016/02/19 职场文书
创业计划书之校园跑腿公司
2019/09/24 职场文书
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python
如何利用js在两个html窗口间通信
2021/04/27 Javascript
Python 视频画质增强
2022/04/28 Python