Movable Typeのlimitとlastnの違い

表示する記事の上限数を設定できるlimitとlastnの違いについて試してみました。

記事(MTEntries)

まずは記事の場合を試してみます。
例として、カテゴリ(catAとcatBという名前)とカスタムフィールドでチェックボックス(ベースネームはcheck)を用意して、以下のような記事を投稿します。

  • タイトル:記事7 カテゴリ:catA check:あり
  • タイトル:記事6 カテゴリ:catB check:あり
  • タイトル:記事5 カテゴリ:catB check:なし
  • タイトル:記事4 カテゴリ:catA check:なし
  • タイトル:記事3 カテゴリ:catB check:あり
  • タイトル:記事2 カテゴリ:catA check:なし
  • タイトル:記事1 カテゴリ:catA check:あり
  • 上記の並び順は公開日順(初期の並び順)になっています。
    この記事でいくつか設定を試してみます。
     

    limit・lastnのみの場合

    まずは特に設定しないで出力してみます。

    <ul>
    <mt:Entries>
      <li><mt:EntryTitle></li>
    </mt:Entries>
    </ul>
    

    この場合、登録した記事7件が一式表示されます。

    <ul>
      <li>記事7</li>
      <li>記事6</li>
      <li>記事5</li>
      <li>記事4</li>
      <li>記事3</li>
      <li>記事2</li>
      <li>記事1</li>
    </ul>
    

    limitに3を設定して試してみます。

    <ul>
    <mt:Entries limit="3">
      <li><mt:EntryTitle></li>
    </mt:Entries>
    </ul>
    

    先ほどの一覧から先頭の3件が表示されました。

    <ul>
      <li>記事7</li>
      <li>記事6</li>
      <li>記事5</li>
    </ul>
    

    lastnに3を設定して試してみます。

    <ul>
    <mt:Entries lastn="3">
      <li><mt:EntryTitle></li>
    </mt:Entries>
    </ul>
    

    limitの時と同じく、先頭の3件が表示されました。

    <ul>
      <li>記事7</li>
      <li>記事6</li>
      <li>記事5</li>
    </ul>
    

     

    sort_byを使用する場合

    次にsort_byとsort_orderを使って、並び順を変更してみます。
    以下のように設定して、タイトルの昇順にしてみます。

    <ul>
    <mt:Entries sort_by="title" sort_order="ascend">
      <li><mt:EntryTitle></li>
    </mt:Entries>
    </ul>
    

    出力すると、以下のようにタイトル順で表示されます。

    <ul>
      <li>記事1</li>
      <li>記事2</li>
      <li>記事3</li>
      <li>記事4</li>
      <li>記事5</li>
      <li>記事6</li>
      <li>記事7</li>
    </ul>
    

    limitを追加してみます。

    <ul>
    <mt:Entries sort_by="title" sort_order="ascend" limit="3">
      <li><mt:EntryTitle></li>
    </mt:Entries>
    </ul>
    

    この場合、並び替え後の状態から先頭の3件が表示されます。

    <ul>
      <li>記事1</li>
      <li>記事2</li>
      <li>記事3</li>
    </ul>
    

    lastnを追加してみます。

    <ul>
    <mt:Entries sort_by="title" sort_order="ascend" lastn="3">
      <li><mt:EntryTitle></li>
    </mt:Entries>
    </ul>
    

    この場合は並び替え後の先頭3件ではなく、並び替え前の3件を取得して、その後タイトル順に並び替えます。

    <ul>
      <li>記事5</li>
      <li>記事6</li>
      <li>記事7</li>
    </ul>
    

     

    categoryを使用する場合

    先ほどはsort_byを使って並び替える場合を試してみましたが、次はカテゴリで絞り込んだ場合を試してみます。
    以下のように設定して、catAに属する記事のみに絞り込みます。

    <ul>
    <mt:Entries category="catA">
      <li><mt:EntryTitle></li>
    </mt:Entries>
    </ul>
    

    catAに属する記事のみに絞り込むことができました。

    <ul>
      <li>記事7</li>
      <li>記事4</li>
      <li>記事2</li>
      <li>記事1</li>
    </ul>
    

    limitを追加してみます。

    <ul>
    <mt:Entries category="catA" limit="3">
      <li><mt:EntryTitle></li>
    </mt:Entries>
    </ul>
    

    絞り込み後の状態から先頭の3件が表示されます。

    <ul>
      <li>記事7</li>
      <li>記事4</li>
      <li>記事2</li>
    </ul>
    

    lastnを追加してみます。

    <ul>
    <mt:Entries category="catA" lastn="3">
      <li><mt:EntryTitle></li>
    </mt:Entries>
    </ul>
    

    limitと同じく、絞り込み後の状態から先頭の3件が表示されました。

    <ul>
      <li>記事7</li>
      <li>記事4</li>
      <li>記事2</li>
    </ul>
    

     

    fieldを使用する場合

    先ほどのcategoryと近いですが、fieldを使ってカスタムフィールドのチェックボックスにチェックが入っている記事のみに絞り込んでみます。

    <ul>
    <mt:Entries field:check="1">
      <li><mt:EntryTitle></li>
    </mt:Entries>
    </ul>
    

    チェックを入れた記事のみに絞り込むことができました。

    <ul>
      <li>記事7</li>
      <li>記事6</li>
      <li>記事3</li>
      <li>記事1</li>
    </ul>
    

    limitを追加してみます。

    <ul>
    <mt:Entries field:check="1" lastn="3">
      <li><mt:EntryTitle></li>
    </mt:Entries>
    </ul>
    

    絞り込み後の状態から先頭の3件が表示されました。

    <ul>
      <li>記事7</li>
      <li>記事6</li>
      <li>記事3</li>
    </ul>
    

    lastnを追加してみます。

    <ul>
    <mt:Entries field:check="1" limit="3">
      <li><mt:EntryTitle></li>
    </mt:Entries>
    </ul>
    

    limitと同じく、絞り込み後の状態から先頭の3件が表示されました。

    <ul>
      <li>記事7</li>
      <li>記事6</li>
      <li>記事3</li>
    </ul>
    

    MTEntriesの結論としては、

    • limit・lastnのみの場合は挙動は同じで、先頭からN件取得する。
    • sort_byを使って並び替えた場合、limitは並び替え後の記事をN件取得、lastnは並び替え前の記事をN件取得後、N件の記事に対して並び替えを実行する。
    • categoryやfieldを使った場合、limit・lastnともに絞り込み後の記事をN件取得する。

    といった違いがあるようです。
     

    コンテンツタイプ (MTContents)

    次にコンテンツタイプ の場合を試してみます。
    testというコンテンツタイプを作成して、カテゴリセットでカテゴリ(コンテンツフィールド名はcategoryでcatAとcatBという名前のカテゴリを用意)とチェックボックスのコンテンツフィールド(コンテンツフィールド名はcheck)を設定します。
    記事の場合とほぼ同じ内容で、以下のようなデータを登録します。

  • データ識別ラベル:データ7 category:catA check:あり
  • データ識別ラベル:データ6 category:catB check:あり
  • データ識別ラベル:データ5 category:catB check:なし
  • データ識別ラベル:データ4 category:catA check:なし
  • データ識別ラベル:データ3 category:catB check:あり
  • データ識別ラベル:データ2 category:catA check:なし
  • データ識別ラベル:データ1 category:catA check:あり
  • この内容で記事と同様に設定を試してみます。
     

    limit・lastnのみの場合

    まずは特に設定しない場合です。

    <h2>通常</h2>
    <ul>
    <mt:Contents content_type="test">
      <li><mt:ContentLabel></li>
    </mt:Contents>
    </ul>
    

    登録したデータ7件が一式表示されます。

    <ul>
      <li>データ7</li>
      <li>データ6</li>
      <li>データ5</li>
      <li>データ4</li>
      <li>データ3</li>
      <li>データ2</li>
      <li>データ1</li>
    </ul>
    

    limitに3を設定して試してみます。

    <ul>
    <mt:Contents content_type="test" limit="3">
      <li><mt:ContentLabel></li>
    </mt:Contents>
    </ul>
    

    先ほどの一覧から先頭の3件が表示されました。

    <ul>
      <li>データ7</li>
      <li>データ6</li>
      <li>データ5</li>
    </ul>
    

    lastnに3を設定して試してみます。

    <ul>
    <mt:Contents content_type="test" lastn="3">
      <li><mt:ContentLabel></li>
    </mt:Contents>
    </ul>
    

    表示内容は3件にならず、最初の状態のまま出力されました。

    <ul>
      <li>データ7</li>
      <li>データ6</li>
      <li>データ5</li>
      <li>データ4</li>
      <li>データ3</li>
      <li>データ2</li>
      <li>データ1</li>
    </ul>
    

    調べてみると、MTContentsではlastnは廃止になりlimitに統一されているようです。
    参考:Movable Type 7 ベータ 2 リリースノート
    そのためMTContentsではlimitの動作についてのみ確認してみます。
     

    sort_byを使用する場合

    sort_byを使って並び順をカテゴリ順にしてみます。

    <ul>
    <mt:Contents content_type="test" sort_by="field:category">
      <li><mt:ContentLabel></li>
    </mt:Contents>
    </ul>
    

    カテゴリで並び替えて表示されました。

    <ul>
      <li>データ1</li>
      <li>データ2</li>
      <li>データ4</li>
      <li>データ7</li>
      <li>データ3</li>
      <li>データ5</li>
      <li>データ6</li>
    </ul>
    

    limitを追加してみます。

    <ul>
    <mt:Contents content_type="test" sort_by="field:category" limit="3">
      <li><mt:ContentLabel></li>
    </mt:Contents>
    </ul>
    

    並び替え後の状態から先頭の3件が表示されました。

    <ul>
      <li>データ1</li>
      <li>データ2</li>
      <li>データ4</li>
    </ul>
    

    categoryを使用する場合

    MTContentsではカテゴリの絞り込みはfieldを使用するので、以下のように設定してcatAに属するデータのみに絞り込みます。

    <ul>
    <mt:Contents content_type="test" field:category="catA">
      <li><mt:ContentLabel></li>
    </mt:Contents>
    </ul>
    

    catAに属するデータのみに絞り込むことができました。

    <ul>
      <li>データ7</li>
      <li>データ4</li>
      <li>データ2</li>
      <li>データ1</li>
    </ul>
    

    limitを追加してみます。

    <ul>
    <mt:Contents content_type="test" field:category="catA" limit="3">
      <li><mt:ContentLabel></li>
    </mt:Contents>
    </ul>
    

    絞り込み後の状態から先頭の3件が表示されました。

    <ul>
      <li>データ7</li>
      <li>データ4</li>
      <li>データ2</li>
    </ul>
    

    fieldを使用する場合

    先ほどのカテゴリとほぼ同じですが、チェックボックスでの絞り込みの場合も試してみます。

    <ul>
    <mt:Contents content_type="test" field:check="1">
      <li><mt:ContentLabel></li>
    </mt:Contents>
    </ul>
    

    チェックを入れたデータのみに絞り込むことができました。

    <ul>
      <li>データ7</li>
      <li>データ6</li>
      <li>データ3</li>
      <li>データ1</li>
    </ul>
    

    limitを追加してみます。

    <ul>
    <mt:Contents content_type="test" field:check="1" limit="3">
      <li><mt:ContentLabel></li>
    </mt:Contents>
    </ul>
    

    絞り込み後の状態から先頭の3件が表示されました。

    <ul>
      <li>データ7</li>
      <li>データ6</li>
      <li>データ3</li>
    </ul>
    

    MTContentsでのlimitの挙動はMTEntriesの時と同じようです。
     

    【参考サイト】

     

    このエントリーをはてなブックマークに追加

    関連記事

    コメントを残す

    メールアドレスが公開されることはありません。
    * が付いている欄は必須項目です

    CAPTCHA


    コメントが承認されるまで時間がかかります。

    2024年11月
     12
    3456789
    10111213141516
    17181920212223
    24252627282930