We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 19033
    • 892 Posts
    こんにちは。よろしくお願い致します。

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

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

    何か良い方法はありますでしょうか。どうぞよろしくお願い致します。
      • 33488
      • 429 Posts
      んーー、スニペット内でテンプレートをチェックして、呼び出さないようにするとかにしないといけなさそうですねぇ。
        • 19033
        • 892 Posts
        ZeRoさん。いつもありがとうございます。

        MODx0.9.5 に標準で実装されていた「Template Switcher」は
        テンプレートにあるおまじないをかくと、そのテンプレートを利用しているドキュメントで
        無効にできましたよね。。あんなのを想像したんですけれども、あれは、
        Template Switcher 側にそういう機能?(おまじないを書くと無効にできる機能)が
        あったわけですよね。。ということは、PHxにそういうのを仕込むとか、あるいは、
        ページの最初の方に、Phxを無効にするスニペットを書くとか?そういう感じに
        なるのでしょうか。。
          • 33488
          • 429 Posts
          templateSwitherは、プラグインなのでドキュメントの全文をチェックして、おまじないがあれば処理しないっていう仕組みができるんですが、PHxはスニペットの中から呼び出される仕組みなので、ココのスニペットでこのおまじない(またはテンプレート)をチェックしてPHxを呼び出さないようにするとかの処理を入れる必要があるかと思います。
          処理しないようにして問題がない?(表示として)かどうかがちょっと微妙かも知れませんねぇ。

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

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


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

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

            PHxファンクションを導入しているスニペットを利用する場合には、
            PHxプラグインを無効にする機能があれば私的には嬉しいかも。。
              • 33488
              • 429 Posts
              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;
              }
              }
              
                • 19033
                • 892 Posts
                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>の直下に「<!-- donotphx -->」
                を入れてみたのですが、PHxプラグインは無効になっていないようです??なにか愚かなことをしているでしょうか…?

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

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

                関連トピでここにあげているのですが。。
                http://modxcms.com/forums/index.php/topic,16228.0.html
                  • 33488
                  • 429 Posts
                  以下のコードでどうでしょ?

                  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のパースを行わないようにしています。
                    • 19033
                    • 892 Posts
                    ZeRoさん。ありがとうございます。

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

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

                    例えば、PHxプラグインが有効ですと、ドキュメントやテンプレートにこんな風に書きますと「[*introtext:notags*]」
                    introtext に含まれているタグを除去して出力するんですが、ZeRoさんのコードですと、出力そのものがされなくなるのです。。
                    (「donotphx」という文字がなくても、です)。
                      • 33488
                      • 429 Posts
                      入っても入らなくても無効になっちゃうのが・・・想定の範囲外なんですけど
                      イベントのOnParseDocumentのチェックは入っていますよね??

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

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

                      すいません :’(