Cubsonベースのモジュール組み込み型モジュールの作成 (1)
本記事は,d3forum のコメント統合機能のように,他のモジュールに埋め込んで使うモジュールの作成方法を解説するものです。
対象は,Cubson でモジュールを作れて,かつ上のようなモジュールの作り方は分からない方。
モジュール組込型モジュール
最初に,モジュール組込型モジュールとは,なんですが,この呼び方はいま僕が付けた物なので,もっと一般的な呼び名が別にあるのかも知れません。プラグイン型モジュール,の方が適切でしょうか。
このタイプのモジュールは XOOPS では今のところマイナで,古くは minahito さんの「どこでもコメント」「どこでもトラックバック」,最近の物では GIJOE さんの d3forum のコメント統合機能が代表例といえます。
実例としては,このページの「コメント一覧」が d3forum のコメント統合機能を埋め込んだモジュールになります。このコメント機能の埋め込みは,埋め込みたいモジュールのテンプレートに1行,smarty を追加することで手軽に実現できます。
もしコメント統合を使わずに,このモジュールにコメント用の機能を作ろうとすると相当労力がかかりますし,掲示板系モジュールの完成形とも言える d3forum には遠く及ばないでしょう。
このように,モジュール埋め込み型モジュールは,既存のモジュールに対し,横断的に手軽に機能を追加できるため,今後注目すべきタイプのモジュールだと個人的には思っています。
で,僕も作りたいなあ〜とずっと思っていたのですが,なかなか技術的なハードルが高くて超えることが出来ませんでした。がこの度めでたく,このハードルを越えて最低限の動作はするモジュールが出来たので,自分用のメモもかねて作り方を公開します。「ハードルが高い」といっても,出来てしまえばそれほど複雑でもありませんし,手順を追って作っていけば難しくありません。
なお,手探りで作ってきたので,本当は要らないコードや好ましくないコード(htmlの非推奨要素みたいな)が含まれている可能性がありますが,お気づきの点がありましたらご指摘頂ければ幸いです。
試行錯誤中のハードル
具体的なコードは次回から載せていきますが,今回は最後に,どの点が僕にとってハードルになったか,を挙げておきます。
- デリゲート
- まず「デリゲート」の概念が理解できなかった。サンプルコードを見たり,デリゲートの処理を追っても何がどうなっているのかつながりがさっぱり(^ ^;)
- smarty プラグイン作成
- これは単純にやったことがなかっただけ。d3forum の smarty を参考にすれば思っていたほど難しくはありませんでした。最初は $param がどこから来ているのかよく分からなかった。
- htmlへの出力
- Cubson の生成コードをそのまま流すと header/footer が2回処理されてしまうので,XoopsTpl を使いました。
- 組み込みモジュールの処理
- ここが最難関でした。通常処理では,Cubson が生成したコードはリクエスト URL を見てモジュールや処理を判断しています。が,今回はリクエストURL は組込先のモジュールの URL になりますから,わざわざ指定してやらなければ行けません。でもそんなことやったことありません! いつもは「よきに計らえ〜」と Cubson のコードに任せっきりでしたからっ(逆ギレ)。似たようなことを User モジュールとかがやっているんですが,この人たち未だに ActionFrame を使っているんです。時代は AssetManager と Module.class.php なのにぃ。で,この AssetManager と Module.class.php を使ってどうやればいいのか?,試行錯誤の日々でした。
- DB更新処理
- 表示までは上手くいくけどDB更新が出来ませんでした。ごくごく基本的なことだったのですが,気づくのに時間がかかりました。POST先のURLを変えなきゃいけなかったんです,ええ。
といった辺りだったでしょうか。思い出したら追記します。