ブログ記事詳細検索プラグイン(その12・ブログ記事の並べ替え)

SearchEntriesプラグインでは、検索されたブログ記事を、ブログ記事標準のフィールドの値か、カスタムフィールドの値で並べ替えることができます。

1.ブログ記事のフィールドで並べ替える

並べ替え方法は、「MTSearchSortOrder」というテンプレートタグで指定します。
MTSearchSortOrderタグは、MTSearchConditionsタグのブロックの中に書きます。

ブログ記事のフィールドの値をキーにして昇順で並べ替えるには、以下のように書きます。

<$mt:SearchSortOrder sort_by="フィールド名"$>

「フィールド名」には、ブログ記事標準のフィールドの名前を、以下の表から選んで指定します。

フィールドフィールド名
IDid
タイトルtitle
本文text
続きtext_more
概要excerpt
キーワードkeywords
公開日authored_on
最終更新日modified_on
出力ファイル名basename
ユーザーのIDauthor_id
フォーマットconvert_breaks
コメント数comment_count
トラックバック数ping_count

また、降順で並べ替える場合は、以下のように「sort_order="descend"」のモディファイアも付加します。

<$mt:SearchSortOrder sort_by="フィールド名" sort_order="descend"$>

例えば、タイトルに「Movable Type」を含み、かつコメントが付いている(comment_countフィールドの値が1以上)ブログ記事を検索し、コメント数の多い順に出力するには、以下のようにテンプレートを組みます。

<mt:SearchConditions>
  <$mt:SearchConditionLike field="title" values="Movable Type"$>
  <$mt:SearchConditionCompare field="comment_count" ge="1"$>
  <$mt:SearchSortOrder sort_by="comment_count" sort_order="descend"$>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
  <ul>
  <mt:Entries>
    <li><$mt:EntryTitle$>(<$mt:EntryCommentCount$>)</li>
  </mt:Entries>
  </ul>
</mt:IfNonZero>

2.カスタムフィールドの値で並べ替える

カスタムフィールドの値をキーにして並べ替える場合は、MTSearchSortOrderタグのsort_byモディファイアを、「sort_by="field:ベースネーム"」のように書きます。

例えば、ブログ記事で商品を管理するために、値段を表すカスタムフィールドを追加しているとします。
そして、そのカスタムフィールドのベースネームが「entry_price」で、テンプレートタグ名が「MTEntryPrice」だとします。

この状態で、値段が3,000円以下の商品(ブログ記事)を、値段の安い順に並べ替えて出力するには、以下のようにテンプレートを組みます。

<mt:SearchConditions>
  <mt:SearchConditionCFSection field="entry_price">
    <$mt:SearchConditionCFCompare le="3000"$>
  </mt:SearchConditionCFSection>
  <$mt:SearchSortOrder sort_by="field:entry_price"$>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
  <ul>
  <mt:Entries>
    <li><$mt:EntryTitle$>(<$mt:EntryPrice$>)</li>
  </mt:Entries>
  </ul>
</mt:IfNonZero>

また、値段の高い順に並べ替えて出力する場合、上のテンプレートのMTSearchSortOrderタグに「sort_order="descend"」のモディファイアを追加します。

3.複数のフィールドで並べ替える

複数のフィールドをキーにして、ブログ記事を並べ替えることもできます。
その場合は、MTSearchSortOrderタグを複数回書きます。

最優先する並べ替えのキーを、1つ目のMTSearchSortOrderタグに書きます。
次に優先するキーを、2つ目のMTSearchSortOrderタグに書きます。
以下同様に、複数のMTSearchSortOrderタグを書きます。

例えば、先ほどの「値段が3,000円以下」の例で、以下のように並べ替えたいとします。

  • 値段の安い順に並べ替えます。
  • 同じ値段の商品が複数ある場合は、タイトルの順に並べ替えます。

この場合は、MTSearchSortOrderタグを2回書きます。
まず値段で並べ替えるので、1つ目のMTSearchSortOrderタグで、値段で並べ替えるように指定します。
そして、2つ目のMTSearchSortOrderタグで、タイトルで並べ替えるように指定します。
実際にMTSearchConditionsタグのブロックを書くと、以下のようになります。

<mt:SearchConditions>
  <mt:SearchConditionCFSection field="entry_price">
    <$mt:SearchConditionCFCompare le="3000"$>
  </mt:SearchConditionCFSection>
  <$mt:SearchSortOrder sort_by="field:entry_price"$>
  <$mt:SearchSortOrder sort_by="title"$>
</mt:SearchConditions>

MTSearchSortOrderタグを複数回書く場合、それぞれに異なるsort_orderモディファイアを指定することもできます。
例えば、前述の例で、商品を値段の高い順(降順)に並べ替え、値段が同じ商品はタイトル順(昇順)に並べ替える場合だと、MTSearchConditionsタグのブロックを以下のように書きます。

<mt:SearchConditions>
  <mt:SearchConditionCFSection field="entry_price">
    <$mt:SearchConditionCFCompare le="3000"$>
  </mt:SearchConditionCFSection>
  <$mt:SearchSortOrder sort_by="field:entry_price" sort_order="descend"$>
  <$mt:SearchSortOrder sort_by="title"$>
</mt:SearchConditions>

4.並べ替え方法を指定しなかった場合

MTSearchSortOrderタグを入れなかった場合、ブログの「設定」→「投稿」のページの「順番」の設定に応じて、公開日時の昇順または降順でブログ記事を並べ替えます。

5.SearchEntriesプラグイン関係の記事の一覧

SearchEntriesプラグイン関係のその他の記事は、以下のリンクから参照できます。

MT Cloud Starter Kit
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください