カテゴリ | |
---|---|
サマリ | プラグイン内にて、(そのプラグインを呼び出したページではなくて)そのプラグインが記述されているページ名を知りたい。 |
バージョン | 1.4rc4 |
投稿者 | sha |
状態 | 保留 |
投稿日 | 2003-08-28 (THU) 19:22:33 |
自作プラグインを作成しています。すこしマニアックな質問です。
ここで、ページAには別のページを読み込む#pcommentのようなプラグインPが記載され、ページBには(自作)プラグインQが記載されていたとします。今、ページAを表示することによって、ページA内へページBと(自作)プラグインQが展開されたとすると、(自作)プラグインQでは、この(1)と(2)は異なり、(1)はページAに、(2)はページBとなります。しかし、実際には$vars['page']にて(1)しか知ることが出来ません。
このように別のページを(ほんの一部でも)展開するプラグインとして以下のようなものがあります。
#pcomment #pcomment(ページB)←(やはり$vars['page']はページAとなる) #tracker_list #includesubmenu #include(ページB) ←(例外的に、$vars['page']はページBとなる) その他、まだある。
(1)だけでなく(2)も分かると、記載されたページを書き換える(自作)プラグインの場合、非常に助かります。例えば、自作プラグイン/vote2.inc.phpなどでは、&vote2が記述されたページ名を明示的に書くことによって回避していますが、#pcommentなどで展開されるページの名前まで把握しておかないと使えないのでは、とても不便です。是非、(2)も取得したいです。
MenuBar内のcounterが、その仕様を逆に利用していたりします。
なるほど、それはそれで便利ですね。ただ上の話は、(1)と同時に(2)も得る方法はありませんか?という質問ですので、counterに関わる部分の仕様に変更はないかと思います。
やはり、別のページを展開するコマンドに、$vars['gotten_source']とかに読み込んだページ名をセットしてもらうしか手がないのでしょうか?でも、もし複数のページを読み込んでいたりした場合はどうするのか?とか、呼出されたプラグインが本当にそのページに記載されているのか?とか悩みどころがありそうです。
あるいは、file.phpのget_source()内でページ名をセットしてもらうとかがよいかな。でも、上記の悩みどころは解決しませんね。
例えば、展開プラグインPにて、get_source(ページB); get_source(ページC);の順に実行していた場合、最初のページBの方に呼出されたプラグインQが記載されていた場合には、記載ページを間違えてしまいますね。これって実は、スマートな解法は存在しないのかな。。。プラグインの作成者に、展開されるページをわざわざセットしてもらう方針としないかぎり無理かも。。。
別のアイデアとして、perlのtaintモードのような手法で、読み取ったデータにプラグインが含まれる(可能性の)状態がどのように伝播していくかを追跡するフラグをデータに付与して、それが処理される前に出力したら$vars['gotten_source']にそのページ名をセットする、とかって実装できないかな?
なんかプラグインが記述されているページを知るためだけに、これ↑をやるんだとしたら、あまりにも大げさかもしれませんね。もしやるなら、もっと他にも使える実装であって欲しいですね。