MovableType

公開日からN日間はnewアイコンを表示する方法(jQuery)

NEWアイコンを表示する

Movable Type ユーザーコミュニティに質問がありましたので、ご回答いたします。

MT7 コンテンツタイプで、公開日からN日までnewアイコンを表示したい場合どうすればよいですか?

自動でNEWアイコンを非表示にするには、一日ごとに自動で再構築を行う設定をするか、Javascriptで非表示にするかを行う必要があります。

一日ごとに自動で再構築を行うには、Movable Typeの「tools」というディレクトリにある、「rebuild-pages」と、cronを組み合わせることで、再構築を定期的に行うことができます。

今回は、Javascript(jQuery)で非表示にする方法をご紹介します。

公開日から7日までNewアイコンを表示するサンプルテンプレートを作成しました。

MTテンプレート

MTContentsタグで、コンテンツ一覧を表示し、MTContentDateタグで公開日を「postdate」に設定します。

<mt:Contents content_type="コンテンツタイプ名">
    <mt:ContentsHeader><ul></mt:ContentsHeader>
        <li>
            <time postdate="<mt:ContentDate format="%Y-%m-%d">" class="post_date"><mt:ContentDate format="%Y年%m月%d日"></time>    
            <p><mt:ContentLabel></p>
        </li>
    <mt:ContentsFooter></ul></mt:ContentsFooter>
</mt:Contents>

MTテンプレートによる出力結果

<ul>
    <li>
        <time postdate="2018-12-03" class="post_date">2018/12/03</time>
        <p>12/3(今日)のコンテンツタイトル</p>
    </li>
    <li>
        <time postdate="2018-11-26" class="post_date">2018/11/26</time>
        <p>11/26(7日前)のコンテンツタイトル</p>
    </li>
    <li>
        <time postdate="2018-11-19" class="post_date">2018/11/19</time>  
        <p>11/19(14日前)のコンテンツタイトル</p>
    </li>
</ul>

jQuery

表示期間を「period」に指定します。

<script type="text/javascript">
    $(function () {
      $('.post_date').each(function(){
        // 現在日時
        var current = new Date();

        // 表示期間
        var period = 7;    
        var period_cn = current.getTime() - (period * 24 * 60 * 60 * 1000);

        // 投稿日
        var post = new Date($(this).attr('postdate'));
        var post_cn = post.getTime();

        if (period_cn < post_cn){
          $(this).after('<span>NEW</span>');
        }
      });
    });
</script>

表示結果

<ul>
    <li>
        <time postdate="2018-12-03" class="post_date">2018/12/03</time><span>NEW</span>
        <p>12/3(今日)のコンテンツタイトル</p>
    </li>
    <li>
        <time postdate="2018-11-26" class="post_date">2018/11/26</time><span>NEW</span>
        <p>11/26(7日前)のコンテンツタイトル</p>
    </li>
    <li>
        <time postdate="2018-11-19" class="post_date">2018/11/19</time>  
        <p>11/19(14日前)のコンテンツタイトル</p>
    </li>
</ul>