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访问查询mysql数据的三种方法
Oct 09 PHP
PHP写MySQL数据 实现代码
Jun 15 PHP
PHP的explode和implode的使用说明
Jul 17 PHP
解析PHP正则提取或替换img标记属性
Jun 26 PHP
php用正则表达式匹配URL的简单方法
Nov 12 PHP
php定时计划任务与fsockopen持续进程实例
May 23 PHP
php微信公众开发之获取周边酒店信息的方法
Dec 22 PHP
PHP会话处理的10个函数
Aug 11 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
Aug 18 PHP
PHP实现路由映射到指定控制器
Aug 13 PHP
php基于dom实现读取图书xml格式数据的方法
Feb 03 PHP
laravel5.1 ajax post 传值_token示例
Oct 24 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
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
Views rows style模板重写代码
2011/05/16 PHP
那些年一起学习的PHP(三)
2012/03/22 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
PHP网站自动化配置的实现方法(必看)
2017/05/27 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
在JavaScript中遭遇级联表达式陷阱
2007/03/08 Javascript
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
node.js不得不说的12点内容
2014/07/14 Javascript
DOM 高级编程
2015/05/06 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
2015/11/13 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
使用webpack搭建vue项目实现脚手架功能
2019/03/15 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
Python实现的tab文件操作类分享
2014/11/20 Python
Python实现加载及解析properties配置文件的方法
2018/03/29 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
什么是网络协议
2016/04/07 面试题
大学生怎样进行自我评价
2013/12/07 职场文书
大学生毕业的自我评价分享
2014/01/02 职场文书
社区平安建设汇报材料
2014/08/14 职场文书
知识就是力量演讲稿
2014/09/13 职场文书
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
人事任命通知书
2015/04/21 职场文书
硕士毕业答辩开场白
2015/05/27 职场文书
小学教师见习总结
2015/06/23 职场文书
GPU服务器的多用户配置方法
2022/07/07 Servers