TShopping

標題: Facebook API Example - 客製化 Quiz 測驗教學筆記 [打印本頁]

作者: woff    時間: 2012-4-2 16:05
標題: Facebook API Example - 客製化 Quiz 測驗教學筆記
雖然已經有一些制式的製作方式:
等等的,皆可以透過 Quiz 關鍵字在 Facebook 查詢到許多跟測驗相關的應用。大部分是已經製作好流程的,只要填寫一下問題、結果,就可以很快地完成一張測驗表。然而,有時候要推服務時,可能會用到許多 Javascript API ,往往那些 Quiz 製造機只適合用來填寫文字跟圖片,這時候就還是得靠人工方式了!沒錯,就是要寫程式!此例以 PHP 跟 Javascript 為範例實作。
製作一個 Quiz 的流程,主要可以分成四部份:
整體上可以簡化到兩步,就是顯示問題收集答案跟顯示結果,但這樣會使得最後一頁要做的事很多,我做了一兩個制式的測試,發現還有每一個問題就要換一個頁面,這種理由多半是要顯示廣告用的,使得每到一頁就多了一次廣告流量。我覺得分成四部份應該還滿恰當的,再細分下去有點不妥,除非是介面的設計或是問題太多。
在實作上,依上述分類可以分成 3 個頁面,第一個頁面負責顯示問題跟收集答案;第二個頁面則是提供使用者便利地點選朋友寄送邀請函;第三個就是顯示結果,以及留言的顯示,至於第四部分則可在第三頁搭配 Javascript 來提供發送,故可以少一個頁面。
流程:
常見問題:
參考資訊:
簡單的 FBML 範例程式,需填寫 API Key 、Template ID 等設定:
  1. <?php
  2. // Copyright 2007 Facebook Corp. All Rights Reserved.
  3. //
  4. // Application: TEST
  5. // File: 'index.php'
  6. // This is a sample skeleton for your application.
  7. //

  8. require_once 'facebook.php';

  9. $appapikey = 'your_app_api_key';
  10. $appsecret = 'your_app_secret';
  11. $facebook = new Facebook($appapikey, $appsecret);
  12. $user_id = $facebook->require_login();
  13. $template_id = 0123456789;

  14. $status = isset( $_REQUEST['status'] ) ? intval( $_REQUEST['status'] ) : 0 ;
  15. switch( $status )
  16. {
  17. case 1:
  18. ?>
  19. <p style="width:100%;text-align:center;">
  20. ...等待結果運算...<br /><br /><a href="?status=2">觀看結果</a><br />
  21. </p>
  22. <fb:fbml>
  23. <fb:request-form action="?status=2" method="POST" invite="true" type="MyQuizName" content="快來挑戰!<?php echo htmlentities("<fb:req-choice url=\"http://apps.facebook.com/your_app_name/\" label=\"Authorize My Application\"") ?>" >
  24. <fb:multi-friend-selector showborder="false" actiontext="邀請朋友參加此測試">
  25. </fb:request-form>
  26. </fb:fbml>
  27. <?php
  28. break;
  29. case 2:
  30. ?>
  31. <script>
  32. function do_post()
  33. {
  34. var template_id = <?php echo $template_id; ?>;
  35. var user_message_prompt = '想說的話:';
  36. var user_message = {value: ''};
  37. var template_data={
  38. 'test_name':'Tapie' ,
  39. 'test_result':'OK',
  40. 'images':[
  41. {
  42. 'src':'http://pad.thedigitalmovement.com/_blaise/2007-06-15-dgen-breakfast.jpg',
  43. 'href':'http://tw.yahoo.com/'
  44. }
  45. ]
  46. }
  47. var body_general='';

  48. var continuation = function() {
  49. // do something
  50. };
  51. Facebook.showFeedDialog( template_id, template_data, body_general, '', continuation, user_message_prompt, user_message );
  52. }
  53. </script>
  54. <p style="width:100%;text-align:center;">
  55. 測試成果:100分<br /><a href="#" onclick="new Dialog().showMessage('測驗結果', '100分').onconfirm = do_post ; return false;">詳細資訊</a><br />
  56. </p>
  57. <?
  58. break;
  59. default:
  60. ?>
  61. <form id="testForm" method="POST" action="?status=1">
  62. <input type="hidden" id="Q_number" name="Q_number" value="1" />
  63. <table width="100%">
  64. <tr>
  65. <td>Q1:你會製作表單嗎?</td>
  66. </tr>
  67. <tr>
  68. <td>
  69. <input type="radio" name="Q[0]" value="1" />會 <br />
  70. <input type="radio" name="Q[0]" value="2" />不會
  71. </td>
  72. </tr>
  73. <tr>
  74. <td>
  75. <button style="submit" onclick="document.getElementById('testForm').submit();">Submit</button>
  76. </td>
  77. </tr>
  78. </table>
  79. </form>
  80. <?php
  81. break;
  82. }
  83. exit;
  84. ?>
複製代碼


2009/10/28 筆記:
上述例子採用單一檔案(index.php)搭配參數(status)來決定目前的狀態(1:填寫答案,2:邀請朋友,3:顯示結果與張貼個人塗鴉牆),在部分情況會有一些問題,如新增留言板服務時等等的。
測試結果,建議可以改成 3 個頁面獨立運作比較乾淨,依序是 index.php 、 invite.php 和 result.php,程式碼範例如下:
除了要更改 base.php 中的資訊外,要記得在 result.php 中的 template 等資訊也要適當修改,我記得如果連 src 位置打錯或不存在時,此時就不會蹦出樣版喔,要分外留意啦

作者: v121315niga    時間: 2012-5-5 00:59
我頂啊。接著頂  
作者: cxvbnmnbv323    時間: 2012-9-7 01:10
無言..........  
作者: bbokit2008    時間: 2012-9-7 01:10
樓主,支持!  
作者: woff    時間: 2013-2-1 19:29
牛X海海!!!




歡迎光臨 TShopping (http://www.tshopping.com.tw/) Powered by Discuz! X3.2