仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4446|回复: 20
打印 上一主题 下一主题

[学习教程] PHP编程:PEAR::HTML_QuickForm与Smarty 的联合应...

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:58:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
学会了生成静态网页,现在你应该接触一下XML了,恩,XML也了解了,那么AJAX你也得接触接触吧?AJAX完了....然后...     Haohappy在《PHP & More》第三期的《PEAR::HTML_QuickForm入门》一文中说过要写QuickForm和Smarty的联合使用,一向没写,明天看到PHPE服装论坛上有伴侣在扣问,为本人的怠惰而忸捏。如今补上,但愿对人人有点匡助。 在我看来,PEAR::HTML_QuickForm是个十分优异的表单类库,大大加速了开辟速度,我如今的大多半项目城市用到。假如对PEAR::HTML_QuickForm不懂得的伴侣,建议先看这篇文章。
  本文针对的读者为有较丰厚开辟经历的PHP法式员,请求读者
<!--[if !supportLists]-->1.             <!--[endif]-->熟习PEAR及其装置和利用;
<!--[if !supportLists]-->2.             <!--[endif]-->熟习HTML_QuickForm;
<!--[if !supportLists]-->3.             <!--[endif]-->了解模板的概念,熟习Smarty模板引擎的利用。
  在《PEAR::HTML_QuickForm入门》的表单的丑化输入一节中,提到了用QuickForm自带的Form润色办法来丑化输入。很分明,这类办法显得有点费事,并且让法式员来丑化网页,有点难为咱们了。 如今法式员和设计师的协作最多见的就是经由过程模板,所以若何把QuickForm和模板引擎相联合,这就是咱们需求处理的成绩。其实QuickForm可以和多种模板引擎相联合,如ITX, Sigma, Flexy, Smarty等,每种模板都有其长处和弱点,今朝Smarty是最通用的模板引擎,所以咱们把QuickForm和Smarty的联合作为重点来研讨。
  起首,给人人看看咱们的最初后果:



  这个例子十分复杂,只要一个Form,4个Input,只是用来说解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_QuickForm与Smarty毗连的桥梁:
$renderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty );
  所谓renderer,就是用来担任显示的,这里咱们把QuickForm的renderer指定为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> </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>
</BODY>
</HTML>
  这两个复杂的文件,总共不到100行代码,就完成了咱们在文章开首的后果。包括完全的表双数据验证,处置进程。
  另:利用QuickForm,可以很便利地完成显示层和逻辑层的分别,由于处置的函数是完整自力出来的。
  例如说可以把
if ($form->validate()) {
        //假如表双数据准确,修正暗码
        $form->process('changePwd');
}
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
改装成
if ($form->validate()) {
switch ($post_vars['action']) {
           default:
           case "changPwd":
              $form->process('changePwd');
              break;        
           case "Add":
              $form->process('add');
              break;
           case "Update":
              $form->process('update');
              break;
          case "Delete":
              $form->process('delete');
              break;               
}
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
  然后把changePwd,add,update,delete四个函数自力到某个文件傍边。如许就能够依据页面提交的action来挪用分歧的操作。
  这个设法绝对对照粗陋一些,假如你要用更壮大的功效,还可以尝尝
  PEAR::HTML_QuickForm_Controller。HTML_QuickForm_Controller基于PageController设计形式,也就是用单个页面来处置经由过程GET和POST传递而来的request和 action。这是个十分成心思的设法,然而这类开辟形式不合适于老手,由于绝对对照庞杂。其作者也说:
HTML_QuickForm_Controller is not intended for PHP newbies. If you don't understand what classes are, if you have no prior experience with QuickForm, if you are a fan of copy-paste programming then this package is not for you.
The package is indeed complex, but so are the problems it is trying to solve. Try to rewrite any of the enclosed multipage form examples without using such a package and you'll see what we mean.
  这部分暂不会商,这需求人人对MVC有必定懂得,下次无机会再另写文章。我本人今朝的开辟框架就是个MVC框架,感觉很随手,显示部分就是交给Smarty+QuickForm来完成。但愿有更多人存眷和利用QuickForm,信任利用以后人人必定不会绝望的
刚开始因为习惯于ASP格式的写法,总是在这些方面出现问题,自己还总是找不到问题所在,这就提醒了自己,在写代码的时候一定要认真,不能粗心地老是少个“;”或者字母大小写不分,要不然很可能找半天都找不到错误。
海妖 该用户已被删除
沙发
发表于 2015-2-4 07:47:00 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
若相依 该用户已被删除
板凳
发表于 2015-2-7 04:19:21 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
老尸 该用户已被删除
地板
发表于 2015-2-20 13:05:18 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
深爱那片海 该用户已被删除
5#
发表于 2015-3-6 17:07:32 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
柔情似水 该用户已被删除
6#
发表于 2015-3-13 04:28:33 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
再现理想 该用户已被删除
7#
发表于 2015-3-20 12:44:58 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
兰色精灵 该用户已被删除
8#
发表于 2015-3-26 13:25:52 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
乐观 该用户已被删除
9#
发表于 2015-4-3 05:08:35 | 只看该作者
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
飘灵儿 该用户已被删除
10#
发表于 2015-5-4 02:58:09 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
小魔女 该用户已被删除
11#
发表于 2015-5-4 10:00:50 | 只看该作者
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
小女巫 该用户已被删除
12#
发表于 2015-5-11 21:30:04 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
活着的死人 该用户已被删除
13#
发表于 2015-6-12 00:17:43 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
飘飘悠悠 该用户已被删除
14#
发表于 2015-6-18 09:04:53 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
爱飞 该用户已被删除
15#
发表于 2015-6-21 18:34:53 | 只看该作者
做为1门年轻的语言,php一直很努力。
16#
发表于 2015-7-7 21:10:03 | 只看该作者
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
透明 该用户已被删除
17#
发表于 2015-7-13 07:11:11 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
冷月葬花魂 该用户已被删除
18#
发表于 2015-7-14 21:11:04 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
变相怪杰 该用户已被删除
19#
发表于 2015-10-4 05:06:36 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
小妖女 该用户已被删除
20#
发表于 2015-10-7 13:13:51 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-28 16:07

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表