ブロックで使用するテンプレート名に注意
Xoopsでは左ペインや右ペインに自由にHTMLを表示でき、これをブロックという。ブロックはモジュールでも設定できるし、カスタムブロックとしてモジュールに属さないブロックを作ることも出来る。
現在作成中の記事管理モジュールでもブロックを作成しているのだが、これにかなりはまってしまった。はまった内容というのは「何度チャレンジしても予期していないものが表示されてしまう」というもの。
基本的にXoopsではこれらテンプレートはインストール時にxoops_version.phpでの記述に基づいてデータベースに格納される。このファイルにはテンプレートを呼び出すプログラム名やテンプレート名等を記述するのだが、原因は「テンプレートファイル名」だった。
ブロックのテンプレートは基本的にモジュール内の「templates/blocks」ディレクトリに設置することになっている。またxoops_version.phpでは特にディレクトリ名を指定することはなく、ファイル名だけで指定するようになっている。
ここで「予期しないものが表示されてしまう」原因は、「templates下におかれているテンプレートファイル名とtemplates/blocks下におかれたテンプレートファイル名が同じものだったこと」だった。
これはどういうことか。
どうやら同じファイル名のテンプレートがtemplates下にあった場合、そちらを読み込むようだ。だいたいこれがおかしい!。その階層をスキャンするようになっているのなら、xoops_version.phpでディレクトリも含めて指定すればいいはずだ。それが駄目なら、ブロックのテンプレートはtemplates/blocks下のみスキャンすればいいはずだ。
結局解決策として、ブロック用のテンプレートのファイル名を変更し、xoops_version.phpでのテンプレートの指定を変更することでうまく動作してくれた。
こんなことで1時間以上悩んでしまった。
こういうタコな仕様は改善されるべきと思う。