Nov 20, 2008, 06:15 PM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
Search via SMF or Google: modx forums all of modxcms.com web
  MODxCMS.com   Forums   Help Login Register  
News:Read what MODx Developers say: MODx Dev. Blogs
Pages: [1]   Go Down
  Print  
Author Topic: テンプレートごとにプラグイン(PHx)の有効/無効を切り替えたい  (Read 2443 times)
0 Members and 1 Guest are viewing this topic.
MEGU
Committed to MODx
*****
Posts: 817



WWW
« on: Jul 26, 2007, 04:00 AM »

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

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

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

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



WWW
« Reply #1 on: Jul 28, 2007, 01:50 AM »

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

WCMアナリスト兼アドバイザー兼デベロッパー兼・・・・
MEGU
Committed to MODx
*****
Posts: 817



WWW
« Reply #2 on: Jul 28, 2007, 04:44 AM »

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

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



WWW
« Reply #3 on: Jul 29, 2007, 11:49 PM »

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

Logged

WCMアナリスト兼アドバイザー兼デベロッパー兼・・・・
MEGU
Committed to MODx
*****
Posts: 817



WWW
« Reply #4 on: Jul 30, 2007, 07:34 AM »

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

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

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

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

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



WWW
« Reply #5 on: Jul 30, 2007, 08:54 AM »

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

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;
}
}
Logged

WCMアナリスト兼アドバイザー兼デベロッパー兼・・・・
MEGU
Committed to MODx
*****
Posts: 817



WWW
« Reply #6 on: Jul 30, 2007, 11:10 PM »

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
Logged
ZeRo
Sr. Member
****
Posts: 379



WWW
« Reply #7 on: Jul 31, 2007, 12:04 AM »

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

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のパースを行わないようにしています。
Logged

WCMアナリスト兼アドバイザー兼デベロッパー兼・・・・
MEGU
Committed to MODx
*****
Posts: 817



WWW
« Reply #8 on: Jul 31, 2007, 04:25 AM »

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

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

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

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



WWW
« Reply #9 on: Jul 31, 2007, 05:08 AM »

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

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

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

すいません Cry

Logged

WCMアナリスト兼アドバイザー兼デベロッパー兼・・・・
MEGU
Committed to MODx
*****
Posts: 817



WWW
« Reply #10 on: Jul 31, 2007, 07:00 AM »

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

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



WWW
« Reply #11 on: Jul 31, 2007, 09:18 AM »

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

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

WCMアナリスト兼アドバイザー兼デベロッパー兼・・・・
MEGU
Committed to MODx
*****
Posts: 817



WWW
« Reply #12 on: Jul 31, 2007, 10:35 AM »

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

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

ホントにありがとうございました~。よく眠れそうです。^^。
Logged
Pages: [1]   Go Up
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP

Copyright © 2005-2008 MODxCMS, All rights reserved. Contact Us
Styles by ziworks.com

Powered by SMF 1.1.4 | SMF © 2005, Simple Machines LLC

Valid XHTML 1.0! Valid CSS!