小妖女 发表于 2015-2-4 00:11:26

PHP编程:FleaPHP 的 Ajax 撑持和 WebControls

培训的第四阶段,就是应用PHP语言开发实际的程序。以结合实际的项目开发来进行学习,效果真的很好,在学习完之后就开始练习,能比较容易掌握所学的知识,这是学校的学习所没法比的。ajax|web   FleaPHP 如今具有了根基的 Ajax 撑持,示例代码以下:

起首在掌握器显示模版的举措办法中有以下代码:
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    /**
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif   * 显示登录界面
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif   */
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    function actionIndex()
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    {
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      $this->_registerFormEvent('form_login', 'submit', 'OnFormLoginSubmit',
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif                array(
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif                  'beforeRequest' => "$('loginFailed').setHTML('');",
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif                  'evalScripts' => true,
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif                  'update' => 'loginFailed'
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif                )
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      );
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      $ajax =& $this->_getAjax();
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      init_webcontrols();
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      include(TPL_DIR . '/Login.php');
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    }
_registerFormEvent() 是 FLEA_Controller_Action 的一个办法,用来注册一个表单的事务。
假如是注册控件(例如文本框)的事务,则用 _registerEvent() 办法。

两个办法的参数是一样的,第一个参数都是控件或表单的ID,第二个参数是要注册的 DOM 事务(例如 click、change、submit)。第三个参数是以后掌握器顶用于呼应该事务的举措名。第四个参数则是一些 Ajax 事务的属性。

下面代码外面为一个名为 form_login 的表单注册了一个 submit 事务,呼应该事务的举措名是 OnFormLoginSubmit。

init_webcontrols(); 是用于初始化 WebControls,由于 Login.php 模版会用到 WebControls。

所以这个掌握器还有一个办法以下:

http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    function actionOnFormLoginSubmit()
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    {
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      $username = isset($_POST['username']) ? $_POST['username'] : '';
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      $password = isset($_POST['password']) ? $_POST['password'] : '';
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      if ($username == 'dualface' && $password == '123456') {
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif            ajax_redirect(url('Welcome'));
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      } else {
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif            echo '您输出的用户名或暗码不准确';
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      }
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    }
这个办法外面,判别用户登录是不是胜利。胜利就用 ajax_redirect() 重定向阅读器,掉败则显示失足信息。要注重的是,ajax_redirect() 请求事务 Ajax 属性中的 evalScripts 必需为 true。如许才干胜利的重定向阅读器。

全部掌握器的代码:

http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gifclass Controller_Default extends FLEA_Controller_Action
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif{
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    /**
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif   * 显示登录界面
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif   */
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    function actionIndex()
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    {
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      $this->_registerFormEvent('form_login', 'submit', 'OnFormLoginSubmit',
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif                array(
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif                  'beforeRequest' => "$('loginFailed').setHTML('');",
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif                  'evalScripts' => true,
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif                  'update' => 'loginFailed'
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif                )
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      );
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      $ajax =& $this->_getAjax();
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      init_webcontrols();
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      include(TPL_DIR . '/Login.php');
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    }
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif   
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    function actionOnFormLoginSubmit()
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    {
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      $username = isset($_POST['username']) ? $_POST['username'] : '';
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      $password = isset($_POST['password']) ? $_POST['password'] : '';
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      if ($username == 'dualface' && $password == '123456') {
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif            ajax_redirect(url('Welcome'));
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      } else {
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif            echo '您输出的用户名或暗码不准确';
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      }
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    }
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif}
十分复杂,不需求修正任何使用法式设置,也不需求从出格的对象承继。并且只要在显示模版的举措办法中才需求注册事务(会载入 Ajax 的撑持文件),其他举措办法不需求载入任何与 Ajax 相干的文件,进步了功能。

客户端需求的 JavaScript 会主动生成:

http://www.pushad.com/XrssFile/2006-12/7/2006127225942102.gifhttp://www.pushad.com/XrssFile/2006-12/7/2006127225942125.gif<script language="JavaScript" type="text/javascript">...
http://www.pushad.com/XrssFile/2006-12/7/2006127225942705.gifhttp://www.pushad.com/XrssFile/2006-12/7/2006127225942287.gifif (!Object. extend) ...{
http://www.pushad.com/XrssFile/2006-12/7/2006127225942830.gif    alert('ERROR: mootools JavaScript framework failed.');
http://www.pushad.com/XrssFile/2006-12/7/2006127225943824.gif}
http://www.pushad.com/XrssFile/2006-12/7/2006127225942830.gif
http://www.pushad.com/XrssFile/2006-12/7/2006127225942830.giffunction ajax_form_login_onsubmit()
http://www.pushad.com/XrssFile/2006-12/7/2006127225942705.gifhttp://www.pushad.com/XrssFile/2006-12/7/2006127225942287.gif...{
http://www.pushad.com/XrssFile/2006-12/7/2006127225942830.gif    $('loginFailed').setHTML('');
http://www.pushad.com/XrssFile/2006-12/7/2006127225942830.gif    var myajax = new Ajax(
http://www.pushad.com/XrssFile/2006-12/7/2006127225942830.gif      '/__personal/magazine/www/index.php?controller=Default&action=OnFormLoginSubmit',
http://www.pushad.com/XrssFile/2006-12/7/2006127225942705.gifhttp://www.pushad.com/XrssFile/2006-12/7/2006127225942287.gif      ...{
http://www.pushad.com/XrssFile/2006-12/7/2006127225942830.gif            postBody: this.toQueryString(),
http://www.pushad.com/XrssFile/2006-12/7/2006127225942830.gif            evalScripts: true,
http://www.pushad.com/XrssFile/2006-12/7/2006127225942830.gif            update: "loginFailed"
http://www.pushad.com/XrssFile/2006-12/7/2006127225943824.gif      }
http://www.pushad.com/XrssFile/2006-12/7/2006127225942830.gif    );
http://www.pushad.com/XrssFile/2006-12/7/2006127225942830.gif    myajax.request();
http://www.pushad.com/XrssFile/2006-12/7/2006127225942830.gif
http://www.pushad.com/XrssFile/2006-12/7/2006127225942830.gif    return false;
http://www.pushad.com/XrssFile/2006-12/7/2006127225943824.gif}
http://www.pushad.com/XrssFile/2006-12/7/2006127225942830.gif
http://www.pushad.com/XrssFile/2006-12/7/2006127225942705.gifhttp://www.pushad.com/XrssFile/2006-12/7/2006127225942287.gifWindow.onDomReady(function() ...{
http://www.pushad.com/XrssFile/2006-12/7/2006127225942830.gif    $('form_login').addEvent('submit', ajax_form_login_onsubmit)
http://www.pushad.com/XrssFile/2006-12/7/2006127225942705.gifhttp://www.pushad.com/XrssFile/2006-12/7/2006127225942287.gif    $('form_login').onsubmit = function() ...{ return false; };
http://www.pushad.com/XrssFile/2006-12/7/2006127225943824.gif});
http://www.pushad.com/XrssFile/2006-12/7/2006127225943384.gif
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif</script>
后面是办事真个代码,如今来看看客户真个代码。

客户端次要是模版,个中必需载入 mootools.js 文件:

http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif<script language="JavaScript" type="text/javascript" src="scripts/mootools.js"></script>
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif<?php $ajax->dumpJs(); ?>
mootools.js 文件在 FLEA/Ajax 目次中,需求复制到使用法式的 scripts 目次中。

后面咱们为名为 form_login 的表单注册了事务,所以咱们的页面外面必需有一个名为 form_login 的表单,否则是不会准确履行的。

http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif<form name="form_login" id="form_login">
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif................
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif</form>
表单中增添一个提交按钮,点击后,咱们在办事端注册的事务就会履行。

就这么复杂?YES

除注册事务、载入 JS 外,其他任务都由 FleaPHP 完成。

===============================================

FleaPHP 之前版本中有一个 FLEA/Helper/Html.php 文件,个中有很多生成页面控件(文本框、列表框)的办法。

不外这些办法固然很轻易利用,然而不敷天真,所以如今 FleaPHP 中供应了全新的 WebControls 组件。这个组件自带一组控件,还可以随便扩大。要利用这个组件,事后挪用一下 init_webcontrols() 全局函数就能够了。

然后就能够用上面的代码创立各类控件:

http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif<?php webcontrol('textbox', 'username',
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    array(
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      'class' => 'textbox',
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      'size' => 28,
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      'maxlength' => 22,
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    )
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif); ?>
这段代码生成上面的 XHTML 代码(不撑持 HTML):

http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif<input type="text" name="username" id="username" value="" class="textbox" size="28" maxlength="22" />
与之前的 html_textbox() 比拟,新的 webcontrols() 函数更天真,可觉得控件指定恣意数目的属性。

看一个略微庞杂点的例子:

http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif<?php webcontrol('radiogroup', 'myoption',
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    array(
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      'items' => array(
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif            '选项 1' => 1,
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif            '选项 2' => 2,
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif            '选项 3' => 3,
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif            '选项 4' => 4
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      ),
http://www.alixixi.com/XrssFile/2006-12/7/200612722, 5942625.gif      'selected' => 2,
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      'class' => 'blue_options',
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    )
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif); ?>
生成的 XHTML 代码以下:

http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif<input type="radio" name="myoption" id="myoption_0" value="1" class="blue_options" /><label for="myoption_0" >选项 1</label><br />
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif<input type="radio" name="myoption" id="myoption_1" value="2" class="blue_options" /><label for="myoption_1" >选项 2</label><br />
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif<input type="radio" name="myoption" id="myoption_2" value="3" checked="checked" class="blue_options" /><label for="myoption_2" >选项 3</label><br />
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif<input type="radio" name="myoption" id="myoption_3" value="4" class="blue_options" /><label for="myoption_3" >选项 4</label>
实践后果:

http://www.pushad.com/XrssFile/2006-12/7/2006127225943313.png

假设是从数据库掏出的数据,那末用 array_hashmap() 转换一下纪录集,就能够做为 items 属性来显示一个单选按钮组。

另外一个例子,显示一个多选框:
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif<?php webcontrol('checkbox', 'keep_password',
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    array(
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif      'caption' => '记住我的暗码',
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif    )
http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif); ?>
生成的 XHTML 代码以下:

http://www.pushad.com/XrssFile/2006-12/7/2006127225942625.gif<input type="checkbox" name="keep_username" id="keep_username" value="1" /><label for="keep_username" >在此盘算机上保存我的登录信息</label>
实践后果:

http://www.pushad.com/XrssFile/2006-12/7/2006127225947830.png

==================================

Ajax 撑持和 WebControls 将在 FleaPHP 1.0.70 版本中宣布。

今朝的开辟进度请参考:http://www.qeeyuan.com:8090/browse/FLEA?report=com.atlassian.jira.plugin.system.project:roadmap-panel

多个成员之间重复做相同的工作,很容易因为交流沟通的时候没有进行一致性的文档要求而出现不明错误,严重影响开发进度,导致在预定时间内无法完成该项目或者完成的项目跟原先计划所要实现的项目功能不符合。

再见西城 发表于 2015-2-7 03:47:09

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

仓酷云 发表于 2015-2-20 07:27:51

说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。

飘灵儿 发表于 2015-2-22 07:00:45

Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81

若天明 发表于 2015-3-6 23:21:14

兴趣是最好的老师,百度是最好的词典。

老尸 发表于 2015-3-8 15:27:42

建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。

只想知道 发表于 2015-3-16 03:05:20

再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。

谁可相欹 发表于 2015-3-22 19:09:36

对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。

若相依 发表于 2015-3-22 19:09:36

有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。

飘飘悠悠 发表于 2015-3-24 23:26:44

做为1门年轻的语言,php一直很努力。

小魔女 发表于 2015-3-26 11:13:24

当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,

柔情似水 发表于 2015-3-27 04:10:46

先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。

冷月葬花魂 发表于 2015-3-31 13:48:40

这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己

精灵巫婆 发表于 2015-4-1 04:08:08

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

简单生活 发表于 2015-4-7 16:25:37

找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。

活着的死人 发表于 2015-4-10 04:53:43

对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。

小女巫 发表于 2015-5-1 15:09:13

,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。

灵魂腐蚀 发表于 2015-5-2 22:05:29

要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。

再现理想 发表于 2015-6-11 02:42:47

当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,

admin 发表于 2015-7-1 21:09:07

本文当是我的笔记啦,遇到的问题随时填充
页: [1]
查看完整版本: PHP编程:FleaPHP 的 Ajax 撑持和 WebControls