D3モジュールのイベント通知

Date 2006-10-05 18:10:43 | Category: XOOPS

in englishin japanese
XOOPSのイベント通知は、モジュールのルートコントローラを要求する上に、各種パスを決めうちしてある、D3にとってはなかなか嫌らしい機能です。

XOOPS_ROOT_PATH/modules/(dirname)/notification.php
XOOPS_ROOT_PATH/modules/(dirname)/notification_update.php

は用意せざるを得ないでしょう。

このあたりは、bulletin2がかなり先駆者としての働きをしていて、私自身、そのソースコードを追うだけでほとんどうまく行きました。

ただ、実際にモジュールからトリガーを引くときに、イベント通知の言語ファイル(*.tpl)のパスが決めうちであり、D3モジュールの特長である言語ファイルオーバーライドシステムが効きません。

bulletin2 では、それを解決しようと、イベント通知で呼ばれるlookup_fileの中でtriggerEvent()内の変数を書き換える、というアクロバティックな技(お前がいうか?)を見せています。

ところが、lookup_file 自体は、一度しか読み込まれない(include_once $lookup_file;)ために、この方法では、同時に2つのイベントをトリガーすることができません。他にも、これだとCube2.1との互換性も失われるであろう、というデメリットがあります。

仕方がないので、d3forumでは、XoopsNotificationHanlder::triggerEvent() は捨てて、それの代用関数を作りました。内部では、XoopsNotificationHanlder::notifyUser() を呼び出す形になっているので、このインターフェースさえ変わらなければ、Cube2.1でも本家版2.2でも動くはずです。もちろん、2種類以上のトリガーを同時に引くことも可能です。

このような仕掛けを作ったおかげで、ちゃんと以下のようなファイルオーバーライドが効くようになります。

1. XOOPS_ROOT_PATH/modules/(dirname)/language/(lang)/mail_template/
2. XOOPS_TRUST_PATH/modules/(trustdirname)/language/(lang)/mail_template/
3. XOOPS_TRUST_PATH/modules/(trustdirname)/language/english/mail_template/






You can read more news at PEAK XOOPS.
http://xoops.peak.ne.jp

The URL for this story is:
http://xoops.peak.ne.jp/md/news/index.php?page=article&storyid=366