ブログ記事詳細検索プラグイン(その3・「ブログ記事のフィールドの値に○○を含む」場合の検索)

SearchEntriesプラグインの第3回として、「ブログ記事のフィールドの値に○○を含む」という条件で検索する方法を解説します。

なお、プラグインのソースとパッケージ方法に一部不具合がありましたので、修正した版を公開しました。
お手数ですが、すでにアップロード済みの方は以下のファイルをいったん削除して、新版と差し替えてお使いください。

  • 「plugins」ディレクトリの当プラグインのconfig.yamlファイル
  • 「plugins」ディレクトリ→「lib」ディレクトリの当プラグインのファイル

1.SearchConditionLikeタグ

「ブログ記事のフィールドの値に○○を含む」という条件は、「SearchConditionLike」というテンプレートタグで指定します。
このタグの書き方は以下の通りです。

<$mt:SearchConditionLike field="フィールド名" values="値"$>

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

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

また、valuesモディファイアには、検索対象の値を指定します。
例えば、「タイトルに『Movable Type』を含む」というブログ記事を検索して、それらの一覧を出力するには、以下のように表します。

<mt:SearchConditions>
  <$mt:SearchConditionLike field="title" values="Movable Type"$>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
  <ul>
  <mt:Entries>
    <li><$mt:EntryTitle$></li>
  </mt:Entries>
  </ul>
</mt:IfNonZero>

2.複数の値で検索

SearchConditionsLikeタグでは、複数の値を検索対象にして、AND検索/OR検索/NOT検索を行うことができます。

2-1.OR検索

「○○または□□を含む」というように、複数のキーワードのうちのどれか1つを含むブログ記事を検索したい場合は、valuesモディファイアに、各キーワードをコンマ(,)で区切って並べるか、または「 OR 」で区切って並べます(ORの前後に半角スペースを入れます)。
例えば、「記事のタイトルに『Movable Type』か『MT』を含む」という条件は、以下のどちらかで表します。

<$mt:SearchConditionLike field="title" values="Movable Type,MT"$>
<$mt:SearchConditionLike field="title" values="Movable Type OR MT"$>

2-2.AND検索

「○○と□□を含む」というように、複数のキーワードをすべて含むブログ記事を検索したい場合は、valuesモディファイアに、各キーワードをプラス(+)で区切って並べるか、または「 AND 」で区切って並べます(ANDの前後に半角スペースを入れます)。
例えば、「記事のタイトルに『Movable Type』と『プラグイン』の両方含む」という条件は、以下のどちらかで表します。

<$mt:SearchConditionLike field="title" values="Movable Type+プラグイン"$>
<$mt:SearchConditionLike field="title" values="Movable Type AND プラグイン"$>

2-3.NOT検索

「○○を含まない」という条件は、「NOT(○○)」で表します。
例えば、「記事のタイトルに『Movable Type』を含まない」という条件は、以下のように表します。

<$mt:SearchConditionLike field="title" values="NOT(Movable Type)"$>

2-4.AND/OR/NOT検索の組み合わせ

AND/OR/NOTを組み合わせて、複雑な条件を指定することもできます。
例えば、「記事のタイトルに、『Movable Type』か『MT』を含み、かつ『プラグイン』か『カスタマイズ』を含む」という条件は、以下のように表します。

<$mt:SearchConditionLike field="title" values="(Movable Type OR MT) AND (プラグイン OR カスタマイズ)"$>

なお、ORよりANDの方が優先順位が高いので、ORを先に評価したい場合は、上の例のように、先に評価する部分を括弧で囲みます。

3.複数の検索条件タグの組み合わせ

検索条件を複数回使って、複数のフィールドを検索対象にすることもできます。

3-1.SearchConditionLikeタグを複数回使う

SearchConditionLikeタグを複数回使って、それぞれのフィールドに値が含まれるかどうかの条件を指定するすることもできます。
例えば、「記事のタイトルに『Movable Type』か『MT』を含み、かつ本文に『プラグイン』か『カスタマイズ』を含む」という条件は、以下のように表します。

<$mt:SearchConditionLike field="title" values="Movable OR MT"$>
<$mt:SearchConditionLike field="text" values="プラグイン OR カスタマイズ"$>

また、以下のように書いても同じです。

<$mt:SearchConditionLike field="title" values="Movable Type,MT"$>
<$mt:SearchConditionLike field="text" values="プラグイン,カスタマイズ"$>

3-2.SearchConditionLikeタグとSearchConditionValuesタグを組み合わせる

SearchConditionLikeタグとSearchConditionValuesタグを組み合わせることもできます。
例えば、「IDが1番のユーザーが書いた記事の中で、タイトルに『Movable Type』か『MT』を含む記事を検索する」という場合は、以下のように条件を書きます。

<$mt:SearchConditionValues field="author_id" values="1"$>
<$mt:SearchConditionLike field="title" values="Movable Type OR MT"$>

また、2行目のMTSearchConditionLikeタグで、valuesモディファイアを「values="Movable Type,MT"」と書くこともできます。

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

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

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