iGoogleっぽいことをやるには

ユーザーが再配置可能なWedgetを実装するJavaScript (Prototype Portal Class)Prototype.jsでiGoogleっぽいポータルな仕組みを作れるJSライブラリ「Xilinus」で紹介されているPrototype Portal Classなるものを使うことで、簡単にできそうな雰囲気を見せているのだが、実際にどうやってつくっていけばいいのか(たとえば、移動した状態の取得や設定らしきボタンの振る舞い)を読み取れないので、svnにあったtest/index.html(現物は本家のlive exampleです)を元にもう少し具体的な使い方に踏み込んでみたいと思います。

移動した結果を知るには

Xilinus.Portalのserialize()メソッドを実行すると、

widget_col_0[]=widget-1_0&widget_col_0[]=widget-2_0&widget_col_0[]=widget-1_1&widget_col_0[]=widget-1_2&widget_col_1[]=widget-2_1&widget_col_2[]=widget-1_4&

という結果を得られます。widget_col_xはウィジェットを置いている(?)横に3つ並んだdivのidです。そして、wiget-x_xは個々のウィジェットとなるdivのidです。これの解釈はwidget_col_0には上からwidget-1_0,widget-2_0,widget-1_1、widget-1_2があり、widget_col_1にはwidget-2_1だけが、widget_col_2にはwidget-1_4だけがあるというのがわかります。PHPなら$_POSTから見るとうまい具合に配列になっているはず。

それをサーバに通知するには 【ajax編】

コンストラクタでurl パラメータを用いてpost先を指定します。そうすることで、ウィジェットを移動後にAjax.UpdateでサーバにPOSTされます。

PHP:
  1. portal = new Xilinus.Portal("#page div.col", {onOverWidget: onOverWidget, onOutWidget: onOutWidget, onChange: onChange, onUpdate: onUpdate, url : "http://www.akky.org/xilinux/test/index.php"});

それをサーバに通知するには【ボタン編】

グローバル変数で portal変数を宣言しているので、onlickイベントでportal.serialzie()を実行すると値を得られます。あとは、適宜Formを用意してsubmitすることになります。

HTML:
  1.  <input type="button" value="serialize" onclick="alert(portal.serialize())">
  2.  
  3.   <script type="text/javascript">
  4.      var portal;
  5. /* 途中省略 */
  6.      function init() {             
  7.        portal = new Xilinus.Portal("#page div.col", {onOverWidget: onOverWidget, onOutWidget: onOutWidget, onChange: onChange, onUpdate: onUpdate, url : "http://www.akky.org/xilinux/test/index.php"});
  8.        // Fake widgets
  9.        portal.add(new Xilinus.Widget(null,'widget-1_0').setTitle("Widget #1.0").setContent(latin1), 0);
  10.        portal.add(new Xilinus.Widget(null,'widget-1_1').setTitle("Widget #1.1").setContent(latin2), 0);
  11.        portal.add(new Xilinus.Widget(null,'widget-1_2').setTitle("Widget #1.2").setContent(latin3), 0);
  12.            
  13.        portal.add(new Xilinus.Widget(null,'widget-2_0').setTitle("Widget #2.0").setContent(latin2 + latin3), 1);
  14.        portal.add(new Xilinus.Widget(null,'widget-2_1').setTitle("Widget #2.1").setContent(latin3), 1);     
  15.      
  16.        portal.add(new Xilinus.Widget(null,'widget-1_4').setTitle("Widget #1.4").setContent(latin1+latin2+latin3), 2);
  17.        // Add controls buttons
  18.        portal.addWidgetControls("control_buttons");
  19.      }
  20.      Event.observe(window, "load", init);
  21.   </script>

実際に動くもの

これを試してみてください
http://www.akky.org/xilinux/test/index.html
移動した後には、画面下部にserialize()結果を表示しています。他にも手を加えているので、、、続きます。

Trackback URL

Leave a comment

Your comment