#author("2018-03-09T00:48:33+09:00;2010-03-08T17:15:37+09:00","","")
**[[質問箱/248]] [#lbb3d588]
|RIGHT:70|LEFT:410|c
|~カテゴリ||
|~サマリ|プラグイン内にて、(そのプラグインを呼び出したページではなくて)そのプラグインが記述されているページ名を知りたい。|
|~バージョン|1.4rc4|
|~投稿者|[[sha]]|
|~状態|保留|
|~投稿日|&new{2003-08-28 (THU) 19:22:33};|
***質問 [#y463d364]
~自作プラグインを作成しています。すこしマニアックな質問です。
:質問|
プラグイン内にて、(1)「そのプラグインを呼び出したページ名」ではなくて、(2)「そのプラグインが記述されているページ名」を知る方法はありますか?
:説明|
多くの場合、(1)と(2)は同じページで$vars['page']にて知ることができます。また、プラグインから生成されたボタンなどで呼び出された場合には、$vars['refer']で知ることができます。
~ここで、ページAには別のページを読み込む#pcommentのようなプラグインPが記載され、ページBには(自作)プラグインQが記載されていたとします。今、ページAを表示することによって、ページA内へページBと(自作)プラグインQが展開されたとすると、(自作)プラグインQでは、この(1)と(2)は異なり、(1)はページAに、(2)はページBとなります。しかし、実際には$vars['page']にて(1)しか知ることが出来ません。
#ref(質問箱248.png,nolink,zoom,400x400)
~このように別のページを(ほんの一部でも)展開するプラグインとして以下のようなものがあります。
 #pcomment
 #pcomment(ページB)←(やはり$vars['page']はページAとなる)
 #tracker_list
 #includesubmenu
 #include(ページB) ←(例外的に、$vars['page']はページBとなる)
 その他、まだある。
~(1)だけでなく(2)も分かると、記載されたページを書き換える(自作)プラグインの場合、非常に助かります。例えば、[[自作プラグイン/vote2.inc.php]]などでは、&vote2が記述されたページ名を明示的に書くことによって回避していますが、#pcommentなどで展開されるページの名前まで把握しておかないと使えないのでは、とても不便です。是非、(2)も取得したいです。


***回答 [#r6a03f87]
-[[名無しさん]] &new{2003-08-29 (FRI) 09:08:33};
~MenuBar内のcounterが、その仕様を逆に利用していたりします。
--[[sha]] &new{2003-08-29 (FRI) 18:16:54};
~なるほど、それはそれで便利ですね。ただ上の話は、(1)と同時に(2)も得る方法はありませんか?という質問ですので、counterに関わる部分の仕様に変更はないかと思います。
-[[sha]] &new{2003-08-31 (SUN) 22:24:50};
~やはり、別のページを展開するコマンドに、$vars['gotten_source']とかに読み込んだページ名をセットしてもらうしか手がないのでしょうか?でも、もし複数のページを読み込んでいたりした場合はどうするのか?とか、呼出されたプラグインが本当にそのページに記載されているのか?とか悩みどころがありそうです。
--[[sha]] &new{2003-08-31 (SUN) 22:29:15};
~あるいは、file.phpのget_source()内でページ名をセットしてもらうとかがよいかな。でも、上記の悩みどころは解決しませんね。
--[[sha]] &new{2003-09-03 (WED) 03:05:59};
~例えば、展開プラグインPにて、get_source(ページB); get_source(ページC);の順に実行していた場合、最初のページBの方に呼出されたプラグインQが記載されていた場合には、記載ページを間違えてしまいますね。これって実は、スマートな解法は存在しないのかな。。。プラグインの作成者に、展開されるページをわざわざセットしてもらう方針としないかぎり無理かも。。。
-[[sha]] &new{2003-09-03 (WED) 07:25:12};
~別のアイデアとして、perlのtaintモードのような手法で、読み取ったデータにプラグインが含まれる(可能性の)状態がどのように伝播していくかを追跡するフラグをデータに付与して、それが処理される前に出力したら$vars['gotten_source']にそのページ名をセットする、とかって実装できないかな?
--[[sha]] &new{2003-09-13 (SAT) 16:14:22};
~なんかプラグインが記述されているページを知るためだけに、これ↑をやるんだとしたら、あまりにも大げさかもしれませんね。もしやるなら、もっと他にも使える実装であって欲しいですね。

//#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.098 sec.

OSDN