ブログ記事詳細検索プラグイン(その2・「ブログ記事のフィールドの値が○○に等しい」場合の検索)

SearchEntriesプラグインでは、検索条件を柔軟に指定することができます。
その第一歩として、今日は「ブログ記事のフィールドの値が○○に等しい」という条件で検索する方法を解説します。

1.SearchConditionsタグと検索条件

SearchEntriesプラグインでは、「SearchConditions」というブロックタグの中に、検索の条件を書いていきます。
そして、検索されたブログ記事は、MTEntriesタグで出力します。

ただし、検索にヒットする記事が全くないと、MTEntriesタグが通常の動作(MTSearchConditionsタグがない時と同じ動作)をしてしまいます。
そこで、MTEntriesタグを「<mt:IfNonZero tag="SearchLoadedEntryCount">」と「</mt:IfNonZero>」のタグのブロックで囲み、検索にヒットする記事があるときだけ、検索結果を出力をするようにします。

ここまでの話をまとめると、基本的なタグの組み方は、以下のようになります。

<mt:SearchConditions>
  検索条件を指定するタグ
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
  <mt:Entries>
    検索された個々のブログ記事を出力するタグ等
  </mt:Entries>
</mt:IfNonZero>

2.MTSearchConditionValuesタグ

「フィールドの値が○○に等しい」という条件で検索するには、「MTSearchConditionValues」というタグを使います。
MTSearchConditionValuesタグの書き方は、以下のようになります。

<$mt:SearchConditionValues field="フィールド名" values="値1","値2"・・・$>

fieldモディファイアの「フィールド名」には、ブログ記事のフィールドを表す値を、以下の表から指定します。

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

また、valuesモディファイアには、比較対象の値を指定します。
「values="値"」のように、値を1つだけ書くと、フィールドがその値に等しいブログ記事が検索されます。
また、「values="値1","値2",・・・」のように値を複数書くと、フィールドが値1、値2・・・のどれかに等しいブログ記事が検索されます。

なお、値に「0」を指定することはできません(MT内部のロジックの仕様であるようです)。
ただし、数値のフィールドであれば、後日紹介するMTSearchConditionCompareというタグで、値が「0」のフィールドも検索することができます。

3.複数のフィールドで検索

MTSearchConditionsタグのブロックの中にMTSearchConditionValuesタグを複数回書くと、複数のフィールドを組み合わせた検索を行うこともできます。

4.事例

事例をいくつかあげておきます。

4-1.IDが1番のユーザーが書いたブログ記事を検索する

ユーザーのIDで検索するには、「author_id」フィールドを検索条件に指定します。

<mt:SearchConditions>
  <$mt:SearchConditionValues field="author_id" values="1"$>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
  <ul>
  <mt:Entries>
    <li><$mt:EntryTitle$>, <$mt:EntryAuthorID$></li>
  </mt:Entries>
  </ul>
</mt:IfNonZero>

4-2.コメントが1~3件ついているブログ記事を検索する

コメント数で検索するには、「comment_count」フィールドを検索条件に指定します。
また、「コメントが1~3件」という条件なので、valuesモディファイアを「values="1","2","3"」と書きます。

<mt:SearchConditions>
  <$mt:SearchConditionValues field="comment_count" values="1","2","3"$>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
  <ul>
  <mt:Entries>
    <li><$mt:EntryTitle$>, <$mt:EntryCommentCount$></li>
  </mt:Entries>
  </ul>
</mt:IfNonZero>

4-3.IDが1番のユーザーが書いていて、かつコメントが1~3件ついているブログ記事を検索する

MTSearchConditionsタグのブロックの中に、MTSearchConditionValuesタグを2回書き、「author_idフィールドの値が1」と、「comment_countフィールドの値が1、2、3のどれか」の2つの条件を指定します。

<mt:SearchConditions>
  <$mt:SearchConditionValues field="author_id" values="1"$>  
  <$mt:SearchConditionValues field="comment_count" values="1","2","3"$>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
  <ul>
  <mt:Entries>
    <li><$mt:EntryTitle$>, <$mt:EntryAuthorID$>, <$mt:EntryCommentCount$></li>
  </mt:Entries>
  </ul>
</mt:IfNonZero>

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

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