We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 19033
    • 892 Posts
    こんにちは。
    MODxによるブログのサンプルです。
    http://www.liolion.info/modx/modxsample/blog-like/

    Reflect が上手く機能しないのは、idを指定していないから。かな。。

    たとえば、以下のようです。
    Ditto call:
    [[Ditto? &id=`listup` &parents=`360` &display=`10` &tpl=`entrylist-title` &sortBy=`pub_date` &sortDir=`DESC` &showInMenuOnly=`1` &language=`japanese-utf8` &dateFormat=`%Y.%m.%d %R` &dateSource=`pub_date` &extenders=`dateFilter`]]
    

    Reflect call:
    [!Reflect? &getDocuments=`1` &id=`listup` &dittoSnippetParameters=`parents:360` &showItems=`0` &targetID=`382` &dateSource=`pub_date` &groupByYears=`0` &tplContainer=`ref-cont-side-list` &tplMonth=`ref-month-side-list`!]
    
      • 36592
      • 970 Posts
      こんばんわ~

      実は私もアーカイブを上手く動かせていません...

      Quote from: natalie at Dec 13, 2007, 12:29 AM

      ただし、年が2005年と1969年(1969年の方は、根拠不明ですが。。。)というふうにアーカイブ表示がなされ、
      そしてそのアーカイブのリンク先も変(どちらのアーカイブ項目をクリックしてもすべての記事が表示される)という状態ですが、もう少しな感じです。

      1969年ですか? 私のところでは1970年です。 grin
      想像ですが、公開日時(pub_date)は全ての記事で入力されているわけではない状態です。
      その際Reflectで公開日時が空白の記事は時間が「ゼロ」ということで扱われているような気がします。
      「&showItems=`1`」にして、どの記事が何月にカテゴライズされているか見た印象です。
      Dittoの方は公開日時が空白の場合は作成日時が代用されてるようなんですけど... 違うかな~

      クリックしても該当のエントリーだけにならないのは、確かキャッシュの問題だったと思い、
      いろいろやってみていますが私も同じ状況です... トホホ :’(

      MEGUさんご指摘の&idについては、ひとつのページにDittoコールが1つしかないなら要らないような...
      今回はさらにReflectも同じページにひとつだけしかないですし。
      いや、単に私がプレイスホルダーにidをくっつけないといけない修正をしたくないだけなのかも。 tongue
        • 19033
        • 892 Posts
        こんにちは。

        1969年ですか? 私のところでは1970年です。
        想像ですが、公開日時(pub_date)は全ての記事で入力されているわけではない状態です。
        こちらは、そうだと思います。公開日が入力されていないと、1970年に分類されるようです。

        それと、idは、ページ内にDitto callがひとつの場合でも必要になります。
        DittoとReflectを結びつけるためです(Dittoだけなら必要ないと思う...)。
        あと、ページングのプレイスホルダにもidをプリフィックスとして挿入する必要があります。がんばれ~ laugh
          • 36592
          • 970 Posts
          Quote from: MEGU at Dec 13, 2007, 09:04 PM

          こちらは、そうだと思います。公開日が入力されていないと、1970年に分類されるようです。
          なんだか、Dittoと一緒に使うわりに、統一感がありませんね~ undecided

          ReflectのソースとDittoのソースを追っかけてみましたが、
          やっぱりReflectの方は単純に「pub_date」だけで分類しているようでした。
          Dittoの方は「$dateSource」で指定されたデータが空白の場合は作成日時を使用するような処理になっていました。
          Dittoのソースを参考にみよう見真似でReflectのソースを修正しました。
          何とかReflectの出力が正しくなりました~ laugh

          Quote from: MEGU at Dec 13, 2007, 09:04 PM

          それと、idは、ページ内にDitto callがひとつの場合でも必要になります。
          そうなんですね~ 同一ページに1つずつのDittoとReflectの場合はいらないと思ってました。
          サンプルコンテンツのミニブログには「&id」が付いてないんですよね~
          これって誰も正しく動く人は居ないはずなのに、どうしていつまでも直さないんだろう?
            • 20978
            • 22 Posts
            MEGUさん

            MODxブログのサンプルのご紹介、ありがとうございました。こんなふうにできるのだったら、やっぱりブログもMODxの方へ引越ししてきたいな~

            tkfmさん

            こちらでも公開日を指定していない記事は、1969年(私の場合)に入れられるのが確認されました。その先は。。。なんだか私の理解を超えたところみたいです。もしよろしかったらReflectのコードのどの部分を修正したらよいか教えていただけるとありがたいのですが。。。
              • 36592
              • 970 Posts
              Quote from: natalie at Dec 13, 2007, 11:04 PM

              もしよろしかったらReflectのコードのどの部分を修正したらよいか教えていただけるとありがたいのですが。。。
              MODx0.9.6.1付属のReflectでの変更例です。

              Reflectスニペットの下の方に「reflect」という関数を定義している部分があります。
              この関数の最初の方(数行の定義・変数初期化部分の直下)に
              // loop and fetch all the results
              for ($i = $start; $i < $stop; $i++) {
                  $date = getdate($resource[$i][$archiveDateSource]);
                  $year = $date["year"];
                  $month = $date["mon"];
                  $cal[$year][$month][] = $resource[$i];
              }
              

              という部分があります。
              この「$date=・・・」の部分を以下のように変更しました。
                  $date = ($resource[$i][$archiveDateSource] != "0") ? getdate($resource[$i][$archiveDateSource]) : getdate($resource[$i]["createdon"]);
              

              単純に、指定されたフィールド値がゼロ(=空白)なら、作成日時("createdon")フィールドを使うようにしました。

              素人コードなので保証はありません! tongue
                • 20978
                • 22 Posts
                tkfmさん、

                無事、公開日時を指定しなかった記事でも作成日時のアーカイブに入れられました。ありがとうございました laugh
                  • 36592
                  • 970 Posts
                  上記のReflectの改造ですが、機会があったので作成者に指摘してみました。
                  http://modxcms.com/forums/index.php/topic,21638.0.html

                  でも、どうやらこの改造は本来あるべき姿ではないようです。
                  本来は、Reflectで指定された&dateSourceをReflect内部で呼んでいるDittoスニペットにパラメータとして渡す必要があり、
                  そうすれば上記の改造の部分はそのままにしておく必要が出てくるようです。

                  バグ報告せよとのことでしたので、バグトラックに報告を入れました。
                  https://mirror3.cvsdude.com/trac/ditto/codebase/ticket/89

                  そのうちに修正されると思います。