We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 6350
    • 421 Posts
    まずはポイントをいくつかピックアップする。

    • (1)blog 一覧に「Add a Blog Entry」が含まれないようにする
      [[Ditto? &filter=`id,3,2` &startID=`2` &summarize=`2` &removeChunk=`Comments`
      Ditto オプションに先週習ったばかりの &filter を使う。最初はいいが、記事が増えてくるとこのページが下にどんどん下がってしまう。自分が使うのであれば気にしなければいいのだが顧客に「なぜ?」と聞かれると答えに屈するため。
    • (2)blog > Add a Blog Entry を修正する
      [!NewsPublisher? &folder=`2` &formtpl=`FormBlog` &footertpl=`Comments` &makefolder=`1` &rtcontent=`tvblogContent` &postid=`2` &clearcache=`1` &template=`MODxHost`!]
      [list]
      [li]
      postid=`2` これを入れておかないとフレンドリーURL を使っている場合に投稿後のページが見つからないというエラーになってしまう。
    • &clearcache=`1` 投稿後にキャッシュをクリアしないと反映されない。キャッシュを更新するオプションがほしい。
    • &template=`MODxHost` 投稿文書に指定するテンプレート。
    [/li]
    [li](3)チャンクの Comments を修正する。一番やりたかったのはこれなのに、こんなことに
    <div id="commentsAnchor">
    [!Jot? &title=`[*pagetitle*]` &customfields=`name,email` &subscribe=`1` &pagination=`4` &badwords=`dotNet` &canmoderate=`Site Admins` !]
    </div>
    これを指定しないとコメントでタイトルを省略された場合に longtitile をとってくる仕様になっているため Re:~ だけけしか入らない。ところが Jot 中で &title=`[*pagetitle*]` を使うと不幸なことになってしまった。

    [[Ditto? &removeChunk=`Comments` で Comments チャンクが削除できない。チャンクの中にドキュメント変数などが入っているとちゃんと動いてくれないようだ。

    jot.class.inc.php の 90行め $modx->documentObject["longtitle"]; を pagetitle に変更する以外いい方法が思いつかない。Jot 中でページタイトルを指定するいい方法は他にないものでしょうか。

    本当は、コメント入力時の Subject:欄に「Re:ページタイトル」を初期値で入れる方法が知りたい。
             ↑
    chunk.form.inc.html の64行目の value に新規投稿であれば pagetitle を入れる方法がわかれば何とかなりそう。

    1.これはDitto の不具合
    2.これはDitto の仕様
    3.これは仕様(しょう)がない(親父ギャグ?)
    正解は何番?
    [/li]
    [/list]
      • 6350
      • 421 Posts
      [!Jot? &title=`[*pagetitle*]`  が使えないので以下の方法で解決しました。

      chunk.form.inc.html 64行目 value= のところを以下のように変更して解決することができました。
      value="[+form.edit:is=`1`:then=`[+form.field.title:esc+]`:else=`Re:[*pagetitle*]`+]"

      これでコメントの Subject 欄に「Re:ページタイトル」を初期値として入れることができるようになり満足。

      [!Jot? &title=`[*pagetitle*]` を指定したときの [[Ditto? &removeChunk=`Comments` が{{Comments}} を削除できない件が解決したわけではありませんが。 :’(

      というよりも、コメントにそもそも Subject がいらないんじゃとも思えます。WordPress にもそんなのないし。
        • 6350
        • 421 Posts
        などやってみても納得のできない動作

        NewsPublisher スニペットコードの一部です。
        // redirect to post id
        $modx->sendRedirect($modx->makeUrl($postid));

        ここで makeUrl は "/modx/blog/article-1234279372.html" を返すはずだが "/modx/74.html" とかしか返ってこない。
        テーブルに書き込んだ直後は正しく取得ができないのか納得のできない動作です。

        このあたり、詳しい方おいでませんか。これを考えていると夜も眠れず昼間に寝てしまいます。
        どう考えても NewsPublisher のコードが間違っているようには考えられません。
        modx 自体の問題のような気がします。 :’(

        FDM のように書き込んだあと「ドキュメントへのリンク」見たいなページに飛ばせば大丈夫な気もするけど(・・?
          • 36592
          • 970 Posts
          随分前に私も悩みました。結局FDMの方が良さそうだと途中で投げ出してます。 tongue

          $modx->sendRedirect() を $modx->sendForward() に置き換えたらとりあえず動いた記憶があります。
          両者の機能の違いを正しく理解していませんので、それで大丈夫なのかはワカリマセンが...

          $modx->sendRedirect($modx->makeUrl($postid));

          を
          $modx->sendForward($postid);

          に変えてみるとどうでしょうか?
            • 6350
            • 421 Posts
            いけました grin

            ということは正常に取得できているはずの makeUrl を $modx->sendRedirect が勝手に書き換えているって事ですか。

            $modx->sendForward($postid); こんな便利な関数初めて知りますた。
            フレンドリーURLなしでも正常に動いてくれます。

            今週の日本語版 modx ではここまで改修できないもんでしょうかね。

            モジュールで $modx->sendRedirect($modx->makeUrl(74)); を実行してみるとやっぱり404 になる。
                        ↓ 2/11訂正
            次の記事とつじつまが合わないのでもう一度確認してみたところモジュールからの実行では問題なく動作します。


            $modx->sendForward(74); はモジュールから実行するとエラーになるのでどんな動作をしているんか理解不能

            Warning: require_once(manager/includes/sniff/ph~
            そのようなファイルやディレクトリはありません
              • 6350
              • 421 Posts
              ますますなぞが深まったので違いを調べてみました。

              結果 $modx->sendRedirect($url) は$site_url を付け加えて Location で飛ばしているだけ。
              したがって DBに書き込んだ直後は makeUrl が "/modx/74.html" を返していると思ったほうが正しい。

              それに比較して sendForward で呼ばれている $this->prepareResponse() は直接DBを読み込んで url を作っているような様子。何回もDBを読み出しているのでそのうちに根負けしてちゃんとURLが作成できているのかどうかは不明。ソースが長すぎて読む気がしないので適当な理由をつけて納得することにした。 cool
                • 28073
                • 164 Posts
                少しわかる部分がるので補足します。

                Quote from: dainiti at Feb 10, 2009, 09:42 AM

                NewsPublisher スニペットコードの一部です。
                // redirect to post id
                $modx->sendRedirect($modx->makeUrl($postid));

                ここで makeUrl は "/modx/blog/article-1234279372.html" を返すはずだが "/modx/74.html" とかしか返ってこない。
                テーブルに書き込んだ直後は正しく取得ができないのか納得のできない動作です。

                MODxの仕様上、フレンドリーURLはキャッシュファイルに保存されていてページにアクセスした際、最初に読み込まれます。
                つまりその後に追加されたドキュメントのフレンドリーURLは(当然キャッシュにはないので)読み込まれていないため、makeURL()を使っても「ドキュメントID.html」しか返してくれません。

                「&clearcache=`1`」オプションを付けていても、その「次のアクセス」から新しいキャッシュを使うのでやっぱり期待通りに動いてくれません。
                問題に気づいた当時は投稿した記事以外にリダイレクトするようにして回避してました。

                NewsPublisher自体ほとんど使う事がないので、この記事が投稿されるまでこの問題を忘れてました :’(
                多分、dainitiさんの遭遇した問題もこれと同じだと思います。

                p.s.
                dainitiさん、sslswitcherの件、レスなくてすいません。
                休みの日も仕事したりと、色々忙しくて修正できていません。
                もう少々お待ちください。
                  • 6350
                  • 421 Posts
                  理由がわかってすっきりしました。

                  $modx->sendRedirect($url) を使う場合は $url を自分で組み立てればいいわけですね。
                  $modx->sendForward(74); で表示した後はキャッシュが生成されていました。

                  でもキャッシュをクリアした後 web ページからアクセスした場合はキャッシュを生成してから表示しているんでしょうか。微妙なタイミングまで気にしてたらきりがありませんね。

                  sslswitcher は自分で適当に改変できるところまで内容がわかったので急ぎません。
                  いまは NewsPublisherと FDM で手一杯なので。 tongue
                    • 6350
                    • 421 Posts
                    あの~~~。。。いいですか?

                    管理画面より「キャッシュをクリア」を実行後モジュールより
                    $modx->sendRedirect($modx->makeUrl(74));

                    を実行すると正常に画面が表示されます。soushi さんの説明からするとこの状態ではキャッシュがないので "/modx/74.html" がmakeUrl(74) から返されるはずなのですがエラーにならないので上記で頂いたコメントに疑問が出てきました。 huh

                    このあとドキュメント74 のキャッシュは当然生成されています。表示とキャッシュの生成がどちらが先かまでは追いきれませんがまったく同じ条件なはずなんですよね。

                    makeUrl() をいくら追ってもキャッシュからとってきているような記述が見つからないんですよね。この中では config.inc.php で取得された base_url 以外に関連のあるものが僕にはわかりません。
                      • 28073
                      • 164 Posts
                      こんばんわー。

                      キャッシュは2種類あります。
                      MODxのサイト全体の情報を保存しているキャッシュと、ドキュメントごとの情報を保存しているキャッシュです。
                      フレンドリーURLが保存されているのはMODxのサイト全体の情報を保存しているキャッシュになります。
                      (/assets/cache/siteCache.idx.phpという名前のファイルです)
                      このキャッシュはキャッシュのクリアを行った時点で、すでに新しいキャッシュが作成されています。
                      (逆にドキュメントごとのキャッシュは対象ドキュメントにアクセスしたときに初めて生成されます)
                      このとき新しい記事のフレンドリーURL情報もキャッシュされています。
                      そのためキャッシュクリア以降のアクセスの中で使われるmakeURL()は意図した値を返すはずです。

                      僕の認識ではmakeUrl()がおかしくなるのはNewsPublisherで新規記事を投稿したときのアクセスだけですね。
                      その後も表示がおかしいのは、多分そのドキュメントがキャッシュされているからいつまでたっても変なURL表示が変わらないのだと思います。
                      どうでしょうか?? rolleyes