• テンプレートごとにプラグイン(PHx)の有効/無効を切り替えたい#

  • MEGU Reply #1, 4 years, 6 months ago

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

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

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

    何か良い方法はありますでしょうか。どうぞよろしくお願い致します。


  • zero_07 Reply #2, 4 years, 6 months ago

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


  • MEGU Reply #3, 4 years, 6 months ago

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

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


  • zero_07 Reply #4, 4 years, 6 months ago

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



  • MEGU Reply #5, 4 years, 6 months ago

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

    PHï½ã¯ã¹ããããã®ä¸­ããå¼ã³åºãããä»çµã¿ãªã®ã§ãã³ã³ã®ã¹ããããã§ãã®ãã¾ããªãï¼ã¾ãã¯ãã³ãã¬ã¼ãï¼ããã§ãã¯ãã¦PHï½ãå¼ã³åºããªãããã«ããã¨ãã®å¦çãå¥ããå¿è¦ããããã¨æãã¾ãã


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

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

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


  • zero_07 Reply #6, 4 years, 6 months ago

    Reply
    Quote from: MEGU at Jul 30, 2007, 07:34 AM
    こういった機能が、個々のスニペットに必要と言うことなんですね?

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

    たとえば、templateSwitherのおまじないのチェックの次に以下のようにフラグを$modx->configに設定して
    $modx->config["phx_disable_flag"] = false;
    if (strstr($modx->documentContent,"ç¡å¹åã®ãã¾ããªãã³ã¼ã"))
    {
    $modx->config["phx_disable_flag"] = true;
     
    }
    
    


    Dittoの方で
    if ($modx->config["phx_disable_flag"] == true)
    { 
      PHxã®ç¡å¹åã®å¤æ°ãã»ãããã
    }
    


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

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

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


  • MEGU Reply #7, 4 years, 6 months ago

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

    PHxプラグインを以下のようにして:
    /* 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>の直下に「」
    を入れてみたのですが、PHxプラグインは無効になっていないようです??なにか愚かなことをしているでしょうか…?

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

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

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


  • zero_07 Reply #8, 4 years, 6 months ago

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

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


  • MEGU Reply #9, 4 years, 6 months ago

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

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

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

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


  • zero_07 Reply #10, 4 years, 6 months ago

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

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

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

    すいません