We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 19592
    • 56 Posts
    はじめまして。MODX初心者です。

    Ditto 2.0.2 をつかって
    ページタイトルとリンクのみの一覧ページを作り、
    随時出力もとのページの内容を追加していく形式のページなので、以下のようにidでソートしました。

    [!Ditto? &parents=`615` &display=`all` &tpl=`ar_teisei_list` &sortBy=`id` &sortDir=`DESC` &dateSource=`editedon` &dateFormat=`%Y.%m.%d`!]

    現在はテンプレートで編集日を出力していますが、
    これを編集日から一週間など、一定期間の間、NEWマーク(画像またはテキスト)を表示させる方法はないでしょうか?

    検索したのですがヒントが見つからずに、こちらにポストしています。
    よろしくお願いいたします。
      • 10613
      • 5 Posts
      はじめまして、私もMODxいじり始めたばかりです。
      同じようなことをしたくて、この辺りうろついてました。
      Dittoのtplのチャンク内で、スニペットを使って出力するしか無いのかなぁ?
      という所です。強引ですかね?
      上手い方法があれば、私も知りたいです。
        • 19033
        • 892 Posts
        こんにちは。私もやってみたいです。
        PHxファンクションを使ってやれないでしょうか。

        例えば、
        今日の日付時間-更新日時間<=24(?)ならば、
        「new」マークを表示。とか?

        時間の取得ができれば、うまくいくような気もするのですが。。
        想像だけなので、なんともいえませんが。。
          • 10613
          • 5 Posts
          MEGUさん情報ありがとう。
          「PHx」今調べてみたら、いろいろ使えそうですね。 shocked

          勉強を兼ねて書いてみました。

          Dittoのチャンク内で
          [+date:newly+]
          を書いて

          スニペット phx:newly にて
          <?php
          // phx:newly
          $ymdSeparater = '.';
          $newDays = 7;
          $outhtml = "<font color=#FF0000>New!</font>";
          
          $newSec = $newDays * 86400; //24H x 60min x 60sec = 86400
          $curDate = explode(' ', $output);
          $half = is_array($curDate)?$curDate[0]:$curDate;
          $ymd = explode($ymdSeparater , $half);
          
          $curTime = mktime (23,59,59, $ymd[1], $ymd[2], $ymd[0]);
          if($curTime > (time()- $newSec)) {
            return $outhtml;
          }
          return '';
          ?>
          


          日数とかNEW印、ハードコーディングしちゃってます。
          ローカルタイムとか考慮してませんので、サーバーによっては対策が必要かも。


          こんなことしなくてもDitto単体でできちゃったりして、、、
          こんなコードわざわざ書かなくても、どこかに在りそうな、、、
          と思ってる自分。
            • 33072
            • 25 Posts
            興味があったので私も勉強がてら作ってみました。PHxは使っていません。

            assets/snippets/ditto/extenders/の下に

            <?php
            
            $placeholders['newicon'] = array("createdon","whatsNew");
            
            if (!function_exists("whatsNew")) {
              function whatsNew($resource) {
                global $modx;
                $newmark = "";
            
                $now = time();
                $time = intval($resource['createdon']) + $modx->config["server_offset_time"];
                $erapse = $now - $time;
                if ($erapse <= 7*60*60*24) {
                  $newmark = "NEW!!";
                }
            
                return $newmark;
              }
            }
            
            ?>
            


            というファイルをnewicon.extender.inc.phpとでも名前を付けて保存します。

            Dittoのスニペットコールで

            &extenders=`newicon`


            として呼んであげれば

            [+newicon+]


            というPHが使えます。

            genkiさんと同じようにハードコーディングしていますので適当に弄る必要がありますが grin
              • 10613
              • 5 Posts
              Dittoに&extendersっていう仕組みがあるんですね。
              大変勉強になりました。 >yassiさん

                • 19592
                • 56 Posts
                みなさま、ありがとうございます。
                PHxという便利なものがあるのですね。

                genki さんのPHxとスニペットを使う方法でうまく表示できました。
                ありがとうございます。

                php自体も初心者なので、お二人のコードを解読するのにまだ必死の状態ですが、
                modxは探ると便利な機能が多くて奥が深いですね。
                勉強になりました。
                  • 33072
                  • 25 Posts
                  前回のものがあまりにもやっつけ仕事だったので、もうちょっと使いやすくしてみました。
                  前回のnewicon.extender.inc.php
                  <?php
                  
                  $placeholders['newicon'] = array("editedon,createdon,pub_date","whatsNew");
                  
                  $newDays = isset($newDays) ? $newDays : 7;
                  $newMark = isset($newMark) ? $newMark : "NEW!!";
                  
                  $GLOBALS['ditto_newicon'] = compact("dateSource","newDays","newMark");
                  
                  if (!function_exists("whatsNew")) {
                    function whatsNew($resource) {
                      global $modx, $ditto_newicon;
                  
                      $now = time();
                      $timestamp = ($resource[$ditto_newicon["dateSource"]] != "0") ? $resource[$ditto_newicon["dateSource"]] : $resource['createdon'];
                  
                      $erapse = $now - (intval($timestamp) + $modx->config["server_offset_time"]);
                      if ($erapse <= $ditto_newicon["newDays"]*60*60*24) {
                        return $ditto_newicon["newMark"];
                      }
                  
                      return "";
                    }
                  }
                  
                  ?>
                  

                  に変更すれば、3日以内のものにNEWマークを付けたければ
                  &newDays=`3`

                  表示する文字列を変更したければ
                  &newMark=`キタ━━━━(゚∀゚)━━━━!!`

                  などと指定できます。htmlタグも使えると思います。
                  PHは
                  [+newicon+]

                  のままです。
                  一応テスト環境では動いています。
                    • 21772
                    • 69 Posts
                    yassiさん

                    これ良いっす!! grin 使わせて頂きます。
                      • 19033
                      • 892 Posts
                      おおお!すばらしいです。ありがとうございます。

                      そうですよね。Dittoってextendersでどんどん機能拡張
                      できちゃうんですよね(phpがわかれば...? ^^;)。

                      サイトの方でもご紹介させてください。 grin