白扇後継モジュール作成宣言!

2007/06/29 | XOOPS

現在Xoopsのユーザ情報関連のモジュールについては、選択肢として、事実上「ミニ白扇」しかない。ミニ白扇とは、白扇のサブセットモジュールで、GUJOE氏作成の白扇代替モジュールだ。既にsuin氏作成の白扇はその配布を終了しており入手は困難。ということでXoopsでユーザ管理情報をカスタマイズするには「ミニ白扇」しかない状況だ。
ミニ白扇は基本センスとして「わかる人だけわかる」ツールだとか。そのセンスは多いに賛成。自分も近頃はすっかりPHPプログラムと化しているが(本来はプログラマって言われるのが大っ嫌いだけど)、そのセンスには先制する。最近はデバッグもできない教えて君が、気軽に「動かないんですけど」みたいに質問するからね。そういう人はまず質問のお作法を勉強することから始めたほうがいいです、ハイ。
白扇の後継モジュールとして長尾さんが「新扇」の開発を宣言していらっしゃるが、これがなかなか状況が見えない。個人的には「頑張ってぇ」とエールを送ってはいるのだが、仕事で使いたい自分としては、気長に待っているわけにもいかなかったりする。
だから決めた。Xoopsユーザ管理カスタマイズ・白扇の後継モジュールを「かおるん」が作成します。でも面倒なのはいやなので「ミニ白扇」をベースにする。たぶんミニ白扇とアンケートASPの「CubeQuery」のフォーム自動生成を組み合わせれば、絶対にうまく出来るはず!。以下、勢いでロードマップ。

■07月01日開発開始
■09月01日ベータ版作成完了
■11月01日バージョン1.0配布

ただしこの間に新扇がでたら開発は即時中止。基本センスは「本家に対して余計な手出しはしない」ということ。こちらの開発の手間も減るし、車輪の再発明は一番いやだしね。

名前決めなきゃね。「箱扇」にする(理由は・・・普通に人にはわからない)。
このプロジェクトにテスターとして参加してくれる人、コメントから連絡ちょうだい。寄付も募集。寄付してくれた人には、豊富な情報を提供。リクエストもいちおう募集。でも最速リリースを最優先。

さぁ、誰か乗る?。

Xoopsで知っておくべき変数

2007/06/28 | XOOPS

Xoopsでは大切な変数には$xoopsDBとか$xoopsUserとかいうふうに接頭語として$xoopsをつけているようだ。Xoopsのモジュールを作成する場合はファイルの配置場所とxoops_version.php、それにこれらの変数を知っておけばだいたい記述できるようになると思う。今後の開発の参考のために、大切そうな変数をピックアップしてみた。それぞれの詳細は、後日暇があるごとにメモすることにする(重要度は適当につけてみた)。

$xoopsblock(重要度C)
オブジェクト。多分ブロック関連のオブジェクトと思われる。

$xoopsConfig(重要度A)
配列。基本設定が保存されている模様。

$xoopsDB(重要度A)
オブジェクト。いわずと知れたデータベースのオブジェクト。

$xoopsErrorHandler(重要度A)
オブジェクト。多分プログラムを実行していく上で、ここにエラーが蓄積されていくような感じ。

$xoopsLogger(重要度B)
オブジェクト。ロギング関連と思う。

$xoopsModule(重要度C)
オブジェクト。これはモジュール関連でしょう。

$xoopsTpl(重要度A)
オブジェクト。Smartyの派生クラス。

$xoopsUser(重要度A)
オブジェクト?。アクセスしてきたユーザに関するもの。

とりあえず、ことあるごとにvar_dumpするとか、get_class_methodsとかget_class_varsとかのクラス・オブジェクト関数をそれぞれの変数に対して実行すれば何とかなると思う。

ブロックで使用するテンプレート名に注意

2007/06/27 | XOOPS

Xoopsでは左ペインや右ペインに自由にHTMLを表示でき、これをブロックという。ブロックはモジュールでも設定できるし、カスタムブロックとしてモジュールに属さないブロックを作ることも出来る。
現在作成中の記事管理モジュールでもブロックを作成しているのだが、これにかなりはまってしまった。はまった内容というのは「何度チャレンジしても予期していないものが表示されてしまう」というもの。
基本的にXoopsではこれらテンプレートはインストール時にxoops_version.phpでの記述に基づいてデータベースに格納される。このファイルにはテンプレートを呼び出すプログラム名やテンプレート名等を記述するのだが、原因は「テンプレートファイル名」だった。
ブロックのテンプレートは基本的にモジュール内の「templates/blocks」ディレクトリに設置することになっている。またxoops_version.phpでは特にディレクトリ名を指定することはなく、ファイル名だけで指定するようになっている。

ここで「予期しないものが表示されてしまう」原因は、「templates下におかれているテンプレートファイル名とtemplates/blocks下におかれたテンプレートファイル名が同じものだったこと」だった。

これはどういうことか。

どうやら同じファイル名のテンプレートがtemplates下にあった場合、そちらを読み込むようだ。だいたいこれがおかしい!。その階層をスキャンするようになっているのなら、xoops_version.phpでディレクトリも含めて指定すればいいはずだ。それが駄目なら、ブロックのテンプレートはtemplates/blocks下のみスキャンすればいいはずだ。

結局解決策として、ブロック用のテンプレートのファイル名を変更し、xoops_version.phpでのテンプレートの指定を変更することでうまく動作してくれた。

こんなことで1時間以上悩んでしまった。
こういうタコな仕様は改善されるべきと思う。

getではデータベースの更新が出来ない

2007/06/26 | XOOPS

Xoopsモジュールを作成する上で、いくつか壁にぶち当たったのでメモ。
Xoopsではデータベースにアクセスするためのクラスが提供されるが、これには少し癖(というかお節介なところ)があるような気がする。

現在は記事管理のモジュールを書いているのだが、記事の表示回数を取得して、記事ランキング機能をつけないといけない。そこでモジュール内に専用のクラスを用意して、そこで表示回数をカウントアップする関数を書き、ページ表示時にその関数が実行されるようプログラムを記述した。この関数はデータベースの記事テーブル内の表示回数を格納するカラムをカウントアップするためのものだ。

しかし、いざこれを実行してみてもカウントアップされない。「え、なんで?」。
ためしに実行させているSQL文を書き出して、phpMyAdminから実行すると正しく動作している。「ん〜、自前のクラスで何か不都合があるのかも」と思い、プログラム内に直接SQLを書いて$xoopsDBに放り込んでみた。

しかしだめ。「え〜〜、なんで〜〜?」

$xoopsDBにはMySQLのエラーを取得する関数が用意してあるので、それを使ってみるとエラーはない模様。ますます「なんで?」。

仕方がないのでSQL実行後にvar_dump($xoosDB);を書いてみたら、エラーがあったよ。「Database update not allowed during processing of a GET request」。こんな舐めたエラー、おせっかいにもほどがあるよ!。
要はMySQLに渡す前にXoops側でチェックして、getでアクセスがあった場合は関数queryでテーブルの更新をかけられません、とのたまっているのだ。しかし「こんな仕様だとマジで使い物にならないはず」とソースを読んだら、もういっこ関数が用意されていた「queryF」。最後の「F」はforceの略?、強制的とか言う意味なのかな。

こちらの関数を使うことで無事処理が実行できた。
やはりXoops、少し(かなり)癖がある。慣れるまで大変だ。

WebArenaが20GBに!

VPSレンタルサーバのウェブアリーナが仕様変更されるらしい。
これまではたった6GBしか容量がなく、しかも容量変更プランもなかったのだけれど、これが20GBまで増えるとのこと。なんともうれしい限りだ。それに既存ユーザが新サービスにアップデートすると3ヶ月分の月額費用が無料になる!。すごーい。
ということは・・・ウェブアリーナのVPSを検討している人は、今の時点で申し込んで、しばしサーバを寝かせておくと、3ヶ月間の無料期間が取得できるわけだ。
ウェブアリーナといえば天下のNTT-PCコミュニケーションのサービス。クライアントが安定性を求めている会社の場合はいつもここを薦めている。うちでもこのVPSを1年使っているけど、今までノンストップ!、至極快適だ。ほぼ同じ期間を使っている「使えるネットVPS」とは大違いだ。
ちなみにウェブアリーナ、今まではiptableがNGだったが今度からは使えるようになるし、その他諸々便利になるみたい。まずは自分がアップデートしなくては・・・。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net