We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
  • たびたびすみません。

    以下のようなPHPコードを /bodyタグの直前あたりに埋め込みたいです。

    define("_BBC_PAGE_NAME", "my particular page title");
    define("_BBCLONE_DIR", "bbclone/");
    define("COUNTER", _BBCLONE_DIR."mark_page.php");
    if (is_readable(COUNTER)) include_once(COUNTER);

    なにげにテンプレートに普通に張り付けてみましたが、php文そのままが
    出力されてしまいました。(MODxがそういうものだとは思ってましたが)

    次に思いついたのはスニペットなんですが、スニペットは出力に関する
    仕組みなんですよね?(ダメ元で試してみました)
    何か方法がありますでしょうか。
      • 29228
      • 109 Posts
      Quote from: yama at Feb 14, 2006, 03:34 PM

      次に思いついたのはスニペットなんですが、スニペットは出力に関する
      仕組みなんですよね?(ダメ元で試してみました)
      何か方法がありますでしょうか。
      先ほど返答したんですが、アホな事にちゃんと「アクセス解析」って書いてあるのを読んでませんでした。
      失礼しました。 embarrassed
      それで、前トピでpoyopoyoさんが書いておりましたテンプレート変数に書いちゃったらどうなります?
      入力タイプはtextで。
      • ありがとうございます。さっそくテンプレート変数を作って適用してみましたが、
        テンプレートに直接書いた場合と同じ結果でした。つまり、phpコードが
        テンプレートに書いたそのままの形で出力されました。拡張子htmlの
        ファイルにphp文を書いた場合と同じ挙動ですね。

        ちょっと考えたのですが、スニペットでもいいような気もしてきました。
        要は、出力はゼロでいいから処理だけさせるという感じで。
        そのスニペットがうまく書けず、やっぱり間違ってるのかなと思っています。
          • 29228
          • 109 Posts
          Quote from: yama at Feb 15, 2006, 02:26 AM

          ありがとうございます。さっそくテンプレート変数を作って適用してみましたが、
          テンプレートに直接書いた場合と同じ結果でした。つまり、phpコードが
          テンプレートに書いたそのままの形で出力されました。拡張子htmlの
          ファイルにphp文を書いた場合と同じ挙動ですね。
          お昼休みに失礼します。 grin
          ちょっと質問なんですが、http://modxcms.com/eval-binding.htmlを拝見したら
          phpコードの先頭に@EVALを付けないとダメなようです。
          これはやってみたでしょうか?

          実は僕もスニペットで処理出来るんじゃないかと思ってます。
          ただ、やり方にひと工夫するのかな?と思いますけど、実際にどんな処理をするコードなのか知りませんから試す事も出来ないのがもどかしいです。 undecided
          僕もMODxを使い始めたばかりなんで、これは良い勉強になりそうです。 smiley
          • どんな処理をというのは、mark_page.phpのことですよね。これはたぶん、
            リファラーなどを読み取ってロギングプログラムに渡す機能を持つもの
            だと思います。少しまわりくどいトリガー文ですが、パス決め打ちで
            「include_once("/bbclone/mark_page.php"」だけでもいいですね。
            ちなみに今回のアクセス解析プログラムは「bbclone」というものです。

            @EVAL…これは、うーん?スニペット中にこう書くのですか?

            ページ中にphp文を埋め込みたいというニーズはよくあると思います。
            それこそスニペットの仕事では。と思っていたのですが。なかなか
            思うようにいかずです。
              • 29228
              • 109 Posts
              Quote from: yama at Feb 15, 2006, 08:21 AM

              @EVAL…これは、うーん?スニペット中にこう書くのですか?
              いえ、@EVALはテンプレート変数でPHPコードを使う時に使います。

              bbclone、所在が分かりました。
              ちょっと今日は仕事が遅くなりそうなんで、帰ってから私もやってみます。
              (ちょっとした心当たりがあるんで、帰ってから実験してみます。)
                • 29228
                • 109 Posts
                遅くなってスミマセン。
                で、結論から先に言うと僕には無理そうです。 :’(
                とりあえず宿題って事で勘弁して下さい。 undecided

                それでMODxの中身を調べて、テンプレートの呼び出しの仕組みを見ないとbbcloneは設置出来ません。
                googleなんかでbbcloneを検索すると、NucleusやWordPressでもハックしないとbbcloneが動かなかったり、使えない機能が出たりするようです。
                NucleusやWordPressでのハックを参考になんとか動くようにやってみますけど、あまり期待しないで下さいね。 grin
                  • 29228
                  • 109 Posts
                  いろいろ調べていたらbbcloneのフォーラムでEtomiteに装備するやり方が載ってました。
                  確認した所、そのままで動くようなので試してみてください。
                  以下のコードをindex.phpに追記です。
                  //bbclone hack
                  $bbclone_PN = "";
                  $sep = " >> ";
                  $ptarr = array();
                  $pid = $etomite->documentObject['parent'];
                  $ptarr[] = $etomite->documentObject['pagetitle'];
                  
                  while ($parent=$etomite->getParent($pid))
                  {
                      $ptarr[] = $parent['pagetitle'];
                      $pid = $parent['parent'];
                  }
                  $ptarr = array_reverse($ptarr);
                  $bbclone_PN = join($ptarr, $sep); 
                  define("_BBC_PAGE_NAME", $bbclone_PN);
                  define("_BBCLONE_DIR", "bbclone/");  //Change bbclone/ to the location of bbclone
                  define("COUNTER", _BBCLONE_DIR."mark_page.php");
                  if (is_readable(COUNTER)) include_once(COUNTER);
                  

                  結局index.phpへのハック技になっちゃうのが悲しい所です。 grin
                  • ありがとうございます。なるほどetomite方面で調べるというテが…
                    さっそく試してみました。

                    末尾にそのまま張り付けたところ特に変化がなかったのですが、
                    「$modx->executeParser();」の直前に張り付けてみるとログに
                    刻まれるようになりました。ただしページ名などが取得できてません。
                    これはサーバの問題かもしれないので、今はあまり気にしないことに… embarrassed
                    (フレンドリーURLやphpinfoが使えなかったりするサーバです)
                    自分のスキルが及ぶ範囲で軽くデバッグしてみましたが、
                    $pidも$ptarr[]も値を取り込めてないようでした。

                    MODxならコアハックをほとんどせずにすむと思ってましたが、
                    意外とこういうことは難しいのかな?プラグインやモジュールなどの
                    仕様もよく調べて、他方面への応用も頭に入れて調査を
                    続けてみようと思います。
                    • これってたぶん。

                      なぜか「include_once(COUNTER);」を実行できない、ってことなんですよね。
                      (COUNTERはmark_page.phpのこと)