亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 2648 | 回復(fù): 5
打印 上一主題 下一主題

FleaPHP 的 Ajax 支持和 WebControls [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2006-12-06 14:51 |只看該作者 |倒序?yàn)g覽
FleaPHP 現(xiàn)在具有了基本的 Ajax 支持,示例代碼如下:

首先在控制器顯示模版的動(dòng)作方法中有如下代碼:

  1.     /**
  2.      * 顯示登錄界面
  3.      */
  4.     function actionIndex()
  5.     {
  6.         $this->_registerFormEvent('form_login', 'submit', 'OnFormLoginSubmit',
  7.                 array(
  8.                     'beforeRequest' => "\$('loginFailed').setHTML('');",
  9.                     'evalScripts' => true,
  10.                     'update' => 'loginFailed'
  11.                 )
  12.         );
  13.         $ajax =& $this->_getAjax();

  14.         init_webcontrols();
  15.         
  16.         include(TPL_DIR . '/Login.php');
  17.     }
復(fù)制代碼


_registerFormEvent() 是 FLEA_Controller_Action 的一個(gè)方法,用來(lái)注冊(cè)一個(gè)表單的事件。
如果是注冊(cè)控件(例如文本框)的事件,則用 _registerEvent() 方法。

兩個(gè)方法的參數(shù)是一樣的,第一個(gè)參數(shù)都是控件或者表單的ID,第二個(gè)參數(shù)是要注冊(cè)的 DOM 事件(例如 click、change、submit)。第三個(gè)參數(shù)是當(dāng)前控制器中用于響應(yīng)該事件的動(dòng)作名。第四個(gè)參數(shù)則是一些 Ajax 事件的屬性。

上面代碼里面為一個(gè)名為 form_login 的表單注冊(cè)了一個(gè) submit 事件,響應(yīng)該事件的動(dòng)作名是 OnFormLoginSubmit。

init_webcontrols(); 是用于初始化 WebControls,因?yàn)?Login.php 模版會(huì)用到 WebControls。

所以這個(gè)控制器還有一個(gè)方法如下:


  1.     function actionOnFormLoginSubmit()
  2.     {
  3.         $username = isset($_POST['username']) ? $_POST['username'] : '';
  4.         $password = isset($_POST['password']) ? $_POST['password'] : '';
  5.         if ($username == 'dualface' && $password == '123456') {
  6.             ajax_redirect(url('Welcome'));
  7.         } else {
  8.             echo '您輸入的用戶名或密碼不正確';
  9.         }
  10.     }
復(fù)制代碼


這個(gè)方法里面,判斷用戶登錄是否成功。成功就用 ajax_redirect() 重定向?yàn)g覽器,失敗則顯示出錯(cuò)信息。要注意的是,ajax_redirect() 要求事件 Ajax 屬性中的 evalScripts 必須為 true。這樣才能成功的重定向?yàn)g覽器。

整個(gè)控制器的代碼:


  1. class Controller_Default extends FLEA_Controller_Action
  2. {
  3.     /**
  4.      * 顯示登錄界面
  5.      */
  6.     function actionIndex()
  7.     {
  8.         $this->_registerFormEvent('form_login', 'submit', 'OnFormLoginSubmit',
  9.                 array(
  10.                     'beforeRequest' => "\$('loginFailed').setHTML('');",
  11.                     'evalScripts' => true,
  12.                     'update' => 'loginFailed'
  13.                 )
  14.         );
  15.         $ajax =& $this->_getAjax();

  16.         init_webcontrols();
  17.         
  18.         include(TPL_DIR . '/Login.php');
  19.     }
  20.    
  21.     function actionOnFormLoginSubmit()
  22.     {
  23.         $username = isset($_POST['username']) ? $_POST['username'] : '';
  24.         $password = isset($_POST['password']) ? $_POST['password'] : '';
  25.         if ($username == 'dualface' && $password == '123456') {
  26.             ajax_redirect(url('Welcome'));
  27.         } else {
  28.             echo '您輸入的用戶名或密碼不正確';
  29.         }
  30.     }
  31. }
復(fù)制代碼


非常簡(jiǎn)單,不需要修改任何應(yīng)用程序設(shè)置,也不需要從特別的對(duì)象繼承。而且只有在顯示模版的動(dòng)作方法中才需要注冊(cè)事件(會(huì)載入 Ajax 的支持文件),其他動(dòng)作方法不需要載入任何與 Ajax 相關(guān)的文件,提高了性能。

客戶端需要的 JavaScript 會(huì)自動(dòng)生成



  1. <script language="JavaScript" type="text/javascript">
  2. if (!Object. extend) {
  3.     alert('ERROR: mootools JavaScript framework failed.');
  4. }

  5. function ajax_form_login_onsubmit()
  6. {
  7.     $('loginFailed').setHTML('');
  8.     var myajax = new Ajax(
  9.         '/__personal/magazine/www/index.php?controller=Default&action=OnFormLoginSubmit',
  10.         {
  11.             postBody: this.toQueryString(),
  12.             evalScripts: true,
  13.             update: "loginFailed"
  14.         }
  15.     );
  16.     myajax.request();

  17.     return false;
  18. }

  19. Window.onDomReady(function() {
  20.     $('form_login').addEvent('submit', ajax_form_login_onsubmit)
  21.     $('form_login').onsubmit = function() { return false; };
  22. });

  23. </script>
復(fù)制代碼



前面是服務(wù)端的代碼,現(xiàn)在來(lái)看看客戶端的代碼。

客戶端主要是模版,其中必須載入 mootools.js 文件:


  1. <script language="JavaScript" type="text/javascript" src="scripts/mootools.js"></script>
  2. <?php $ajax->dumpJs(); ?>
復(fù)制代碼


mootools.js 文件在 FLEA/Ajax 目錄中,需要復(fù)制到應(yīng)用程序的 scripts 目錄中。

前面我們?yōu)槊麨?form_login 的表單注冊(cè)了事件,所以我們的頁(yè)面里面必須有一個(gè)名為 form_login 的表單,不然是不會(huì)正確執(zhí)行的。


  1. <form name="form_login" id="form_login">
  2. ................
  3. </form>
復(fù)制代碼


表單中增加一個(gè)提交按鈕,點(diǎn)擊后,我們?cè)诜⻊?wù)端注冊(cè)的事件就會(huì)執(zhí)行。

就這么簡(jiǎn)單?YES

除了注冊(cè)事件、載入 JS 外,其他工作都由 FleaPHP 完成。

FleaPHP 以前版本中有一個(gè) FLEA/Helper/Html.php 文件,其中有許多生成頁(yè)面控件(文本框、列表框)的方法。

不過(guò)這些方法雖然很容易使用,但是不夠靈活,所以現(xiàn)在 FleaPHP 中提供了全新的 WebControls 組件。這個(gè)組件自帶一組控件,還可以隨意擴(kuò)展。要使用這個(gè)組件,預(yù)先調(diào)用一下 init_webcontrols() 全局函數(shù)就可以了。

然后就可以用下面的代碼創(chuàng)建各種控件:


  1. <?php webcontrol('textbox', 'username',
  2.     array(
  3.         'class' => 'textbox',
  4.         'size' => 28,
  5.         'maxlength' => 22,
  6.     )
  7. ); ?>
復(fù)制代碼


這段代碼生成下面的 XHTML 代碼(不支持 HTML):


  1. <input type="text" name="username" id="username" value="" class="textbox" size="28" maxlength="22" />
復(fù)制代碼


與以前的 html_textbox() 相比,新的 webcontrols() 函數(shù)更靈活,可以為控件指定任意數(shù)量的屬性。

看一個(gè)稍微復(fù)雜點(diǎn)的例子:


  1. <?php webcontrol('radiogroup', 'myoption',
  2.     array(
  3.         'items' => array(
  4.             '選項(xiàng) 1' => 1,
  5.             '選項(xiàng) 2' => 2,
  6.             '選項(xiàng) 3' => 3,
  7.             '選項(xiàng) 4' => 4
  8.         ),
  9.         'selected' => 2,
  10.         'class' => 'blue_options',
  11.     )
  12. ); ?>
復(fù)制代碼


生成的 XHTML 代碼如下:


  1. <input type="radio" name="myoption" id="myoption_0" value="1" class="blue_options" /><label for="myoption_0" >選項(xiàng) 1</label><br />
  2. <input type="radio" name="myoption" id="myoption_1" value="2" class="blue_options" /><label for="myoption_1" >選項(xiàng) 2</label><br />
  3. <input type="radio" name="myoption" id="myoption_2" value="3" checked="checked" class="blue_options" /><label for="myoption_2" >選項(xiàng) 3</label><br />
  4. <input type="radio" name="myoption" id="myoption_3" value="4" class="blue_options" /><label for="myoption_3" >選項(xiàng) 4</label>
復(fù)制代碼


實(shí)際效果:


假如是從數(shù)據(jù)庫(kù)取出的數(shù)據(jù),那么用 array_hashmap() 轉(zhuǎn)換一下記錄集,就可以做為 items 屬性來(lái)顯示一個(gè)單選按鈕組。

另一個(gè)例子,顯示一個(gè)多選框:

  1. <?php webcontrol('checkbox', 'keep_password',
  2.     array(
  3.         'caption' => '記住我的密碼',
  4.     )
  5. ); ?>
復(fù)制代碼


生成的 XHTML 代碼如下:


  1. <input type="checkbox" name="keep_username" id="keep_username" value="1" /><label for="keep_username" >在此計(jì)算機(jī)上保留我的登錄信息</label>
復(fù)制代碼


實(shí)際效果:


[ 本帖最后由 dualface 于 2006-12-6 14:52 編輯 ]

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2006-12-06 15:11 |只看該作者
扒了猛頂


-----------------------------------freeagle-鬼鬼

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2006-12-09 17:11 |只看該作者
不錯(cuò),呵呵。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2006-12-09 17:57 |只看該作者
原帖由 guishoudaoge 于 2006-12-6 15:11 發(fā)表
扒了猛頂


-----------------------------------freeagle-鬼鬼


流氓

PS:-----后面的東西是什么意思?

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2006-12-10 00:07 |只看該作者
用XAJAX比較多。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2006-12-10 11:44 |只看該作者
感覺(jué)和xajax很象啊
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP