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を変えなきゃいけなかったんです,ええ。

といった辺りだったでしょうか。思い出したら追記します。