由于公司需要 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]
- /*
- * 作者: 辉老大
- * 页面: path.cfg.php
- * 功能: 系统路径设置
- * 版权所有: 随便 copy^_^
- */
- $global['path']['conf'] = $global['path']['root'] . 'conf/';// 定义系统配置文件路径
- $global['path']['lib'] = $global['path']['root'] . 'lib/';// 定义系统库文件路径
- ?>
- [/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]
- /*
- * 作者: 辉老大
- * 页面: 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]
- /*
- * 作者: 辉老大
- * 页面: 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]
模板代码:
代码如下:
<{if $form_data.javascrīpt}>
<{$form_data.javascrīpt}>
- <{/if}>>
- bgcolor="#F6F6F6" style="font-size:9pt" class="AddTable">
修改管理员密码 | |
现有管理员密码 | <{$form_data.adminPwd.html}> |
新密码 | <{$form_data.newPwd.html}> |
再次输入新密码 | <{$form_data.newPwd2.html}> |
|
这里大家也许觉得奇怪, 为什么路径要定义这么复杂, 而且使用绝对路径呢? 这个是最近适应公司项目的需要, 呵呵! 其实这样有利于部署大的项目这个帖子相信没接触过 quickform 或 smarty 的新手一定看的一头雾水, 当然, 我在这也只是简单介绍下, 希望大家有兴趣的可以继续深入研究, 最后看看效果:
看判断两次输入密码是否一样就这一句:
- [php]
- $form->addRule(array('newPwd','newPwd2'),"两次输入的密码不一致!",'compare','','client');
- [/php]
代码看起来是不是简洁清楚啊, 呵呵, 接下来还会应用到再结合 XAJAX 的应用, 我会继续和大家分享学习心得, 嘿嘿!
来源: https://www.php1.cn/detail/php-804447a798.html