Topic: テンプレートごとにプラグイン(PHx)の有効/無効を切り替えたい  (Read 4596 times)

Pages: [1]   Go Down

#1: 26-Jul-2007, 04:00 AM


MEGU
Posts: 890

WWW
こんにちは。よろしくお願い致します。

やりたいことは、表題の通りなのですが、どうにかすれば可能なのでしょうか?
具体的には、PHxプラグインをテンプレートごとに「有効/無効」の切り替えができないか?と
考えているのですが。。

…と言いますのも、PHxは非常に便利なプラグインなんですが、場合によっては
不都合もあるのです。そんなわけで、PHxを導入している環境でも、テンプレートに
何かおまじないをすることによって、そのテンプレートを利用しているドキュメントでは
PHxが無効になるという。。そんなことができればと思うのです。

何か良い方法はありますでしょうか。どうぞよろしくお願い致します。
« Last Edit: 26-Jul-2007, 09:00 PM by MEGU »

#2: 28-Jul-2007, 01:50 AM


ZeRo
Posts: 428

WWW
んーー、スニペット内でテンプレートをチェックして、呼び出さないようにするとかにしないといけなさそうですねぇ。

#3: 28-Jul-2007, 04:44 AM


MEGU
Posts: 890

WWW
ZeRoさん。いつもありがとうございます。

MODx0.9.5 に標準で実装されていた「Template Switcher」は
テンプレートにあるおまじないをかくと、そのテンプレートを利用しているドキュメントで
無効にできましたよね。。あんなのを想像したんですけれども、あれは、
Template Switcher 側にそういう機能?(おまじないを書くと無効にできる機能)が
あったわけですよね。。ということは、PHxにそういうのを仕込むとか、あるいは、
ページの最初の方に、Phxを無効にするスニペットを書くとか?そういう感じに
なるのでしょうか。。

#4: 29-Jul-2007, 11:49 PM


ZeRo
Posts: 428

WWW
templateSwitherは、プラグインなのでドキュメントの全文をチェックして、おまじないがあれば処理しないっていう仕組みができるんですが、PHxはスニペットの中から呼び出される仕組みなので、ココのスニペットでこのおまじない(またはテンプレート)をチェックしてPHxを呼び出さないようにするとかの処理を入れる必要があるかと思います。
処理しないようにして問題がない?(表示として)かどうかがちょっと微妙かも知れませんねぇ。

#5: 30-Jul-2007, 07:34 AM


MEGU
Posts: 890

WWW
こんにちは。
ZeRoさん。ありがとうございます。

Code:
PHxはスニペットの中から呼び出される仕組みなので、ココのスニペットでこのおまじない(またはテンプレート)をチェックしてPHxを呼び出さないようにするとかの処理を入れる必要があるかと思います。

これは、たとえば、Dittoにはphxファンクションを無効にするパラメータがあるんですけれども、
このパラメータは、Ditto(のPhxファンクション)にだけ関与するわけですよね(変な日本語?)。
Dittoで処理されている部分にだけ影響するといいますか...?

こういった機能が、個々のスニペットに必要と言うことなんですね?

PHxファンクションを導入しているスニペットを利用する場合には、
PHxプラグインを無効にする機能があれば私的には嬉しいかも。。

#6: 30-Jul-2007, 08:54 AM


ZeRo
Posts: 428

WWW
こういった機能が、個々のスニペットに必要と言うことなんですね?

PHxファンクションを導入しているスニペットを利用する場合には、
PHxプラグインを無効にする機能があれば私的には嬉しいかも。。
そのとおりっす。
PHx実は使ったことなかったりするんで、細かい部分はわかっていませんけど。
たとえば、templateSwitcherのプラグインと連動させるなら、templateSwictherのおまじないと同じような形で
ドキュメントにPHx無効おまじないを書いておいて、templateSwitcherのプラグインにそのおまじないがあれば、PHx無効フラグみたいなものを立て、それをDittoのスニペットのPHx無効の変数に被せるっていう手でもいけそうですね。
ほかのPHxを利用するスニペットも同じようにすればできるかなぁ

たとえば、templateSwitherのおまじないのチェックの次に以下のようにフラグを$modx->configに設定して
Code:
$modx->config["phx_disable_flag"] = false;
if (strstr($modx->documentContent,"無効化のおまじないコード"))
{
$modx->config["phx_disable_flag"] = true;
 
}


Dittoの方で
Code:
if ($modx->config["phx_disable_flag"] == true)
{
  PHxの無効化の変数をセットする
}

とかにすれば、いけそうな気がします。

と思ってPHxのドキュメントみてみたんですが、プラグインみたいなので
PHxのプラグインの方で処理しないようにする方が楽ですねぇ
PHxのプラグイン(MODxのリソースで入れる部分)を以下のようにしちゃえばいけるかと思います。

Code:
if ($modx->config["phx_disable_flag"] != true)
{
include_once $modx->config['rb_base_dir'] . "plugins/phx/phx.parser.class.inc.php";
$e = &$modx->Event;
$PHx = new PHxParser($phxdebug,$phxmaxpass);
switch($e->name) {
case 'OnParseDocument':
$PHx->OnParseDocument();
break;
}
}

#7: 30-Jul-2007, 11:10 PM


MEGU
Posts: 890

WWW
ZeRoさん。ありがとうございます!

PHxプラグインを以下のようにして:
Code:
/* PHx disable check */
$modx->config["phx_disable_flag"] = false;
if (strstr($modx->documentContent,"donotphx"))
{
$modx->config["phx_disable_flag"] = true;
}

/* PHx fanction */
if ($modx->config["phx_disable_flag"] != true)
{
include_once $modx->config['rb_base_dir'] . "plugins/phx/phx.parser.class.inc.php";
$e = &$modx->Event;
$PHx = new PHxParser($phxdebug,$phxmaxpass);
switch($e->name) {
case 'OnParseDocument':
$PHx->OnParseDocument();
break;
}
}

PHxプラグインを無効にしたいテンプレートの<body>の直下に「<!-- donotphx -->」
を入れてみたのですが、PHxプラグインは無効になっていないようです??なにか愚かなことをしているでしょうか…?

具体的には例えばここなのですが、
http://www.liolion.info/modx095/
左上すみのミニ伝言板は、Jotを利用しているのですが、PHxプラグインが
有効になっていると、ある条件で、ドキュメントにプレイスホルダを書くことができないのです...(書いても値が出力されない)。
ある条件というのは、Jotを[!~!]の形式で書いた場合です。

その他、PHxプラグインが有効な状態だと、Jotの入力チェックをするとき正規表現で「[」「]」が使えなかったりします。

関連トピでここにあげているのですが。。
http://modxcms.com/forums/index.php/topic,16228.0.html

#8: 31-Jul-2007, 12:04 AM


ZeRo
Posts: 428

WWW
以下のコードでどうでしょ?

Code:
include_once $modx->config['rb_base_dir'] . "plugins/phx/phx.parser.class.inc.php";
$e = &$modx->Event;
switch($e->name) {
case 'OnParseDocument':
if ((!strstr($modx->documentOutput,"donotphx")) {
                $PHx = new PHxParser($phxdebug,$phxmaxpass);
$PHx->OnParseDocument();
}
break;
}
ドキュメントでもテンプレートでもどちらでもいいんですけど、donotphxの文字があればPHxのパースを行わないようにしています。

#9: 31-Jul-2007, 04:25 AM


MEGU
Posts: 890

WWW
ZeRoさん。ありがとうございます。

教えて頂いたコードは、リソース管理のPHxプラグインのコードにそのまま貼れば良いんですよね??

で、そうしますと、PHxは無効になるようなのですが、
「donotphx」という文字が含まれてなくても無効になっているみたいなのです。

例えば、PHxプラグインが有効ですと、ドキュメントやテンプレートにこんな風に書きますと「[*introtext:notags*]」
introtext に含まれているタグを除去して出力するんですが、ZeRoさんのコードですと、出力そのものがされなくなるのです。。
(「donotphx」という文字がなくても、です)。

#10: 31-Jul-2007, 05:08 AM


ZeRo
Posts: 428

WWW
入っても入らなくても無効になっちゃうのが・・・想定の範囲外なんですけど
イベントのOnParseDocumentのチェックは入っていますよね??

ちなみに、PHxは、2.1.3ですよね? 違うとプラグインソースが違うのかも知れない・・・・。

やはり、ちゃんと動かしてみないとかなぁ

すいません Cry

#11: 31-Jul-2007, 07:00 AM


MEGU
Posts: 890

WWW
ZeRoさん。何度もありがとうございます。

システムイベントは、「OnParseDocument」にだけチェックが入っています。
それで、うちのPHxプラグインは2.1.2だったので、2.1.3にバージョンアップしてみました。
んですけども、やはり、PHxプラグイン自体が無効になる(といいますか有効にならないといいますか…)ようです。

#12: 31-Jul-2007, 09:18 AM


ZeRo
Posts: 428

WWW
あ(^^;
ミスってました
Code:
if ((!strstr($modx->documentOutput,"donotphx")) {

Code:
if (!strstr($modx->documentOutput,"donotphx")) {
ifの次の括弧が1つ多かったです、これでエラーになっていて抜けちゃっていたのかも・・・。
すいません・・・今度こそは・・・・かな

#13: 31-Jul-2007, 10:35 AM


MEGU
Posts: 890

WWW
ありがとうございます!
でででで、できました! Cheesy

テンプレートを「IncludeFile」で読み込む場合、ドキュメントにおまじないを
書いても、PHxが無効にならないので、この場合はテンプレートに書くように
なるみたいなんですけども、この辺りもまとめて、サイトの方に書きたいと思います。

ホントにありがとうございました~。よく眠れそうです。^^。
Pages: [1]   Go Up
0 Members and 1 Guest are viewing this topic.