SearchEntriesプラグイン(Data API対応その4・動的な検索)

SearchEntriesプラグインでは、フォームやURLのパラメータを利用して、動的に検索することもできます。
Data APIで検索する場合も、その仕組みを利用することができます。

1.GetQueryParamプラグインのインストール

動的な検索を行う場合、GETやPOSTで送信されたデータを得るために、GetQueryParamというプラグインをインストールします。
プラグインは以下からダウンロードします。

GetQueryParam_1_14.zip

ダウンロードしたZipファイルを解凍すると、「plugins」のフォルダができます。
このフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。

2.MTGetQueryParamsToVarsタグ

検索条件用テンプレートモジュールの先頭に、「MTGetQueryParamsToVars」というテンプレートタグを追加します。
このタグは、GETやPOSTで送信されたデータを、Movable Typeのテンプレートの変数(MTSetVar/MTGetVarで扱うもの)に変換します。
個々の変数の名前は、URLのパラメータや、フォームの各要素のname属性の前に、「qp_」を付けたものになります。

例えば、検索条件を入力するフォームに、name属性の値が「title」のinput要素を入れているとします。
そして、このフォームを送信して、MTGetQueryParamsToVarsタグで変数に変換するとします。
この場合、「qp_title」という変数が作られ、そこにフォームから送信された値が代入されます。

3.検索条件の中で変数を使う

従来のSearchEntriesプラグインでの検索と同様に、MTGetQueryParamsToVarsタグで変換した後の変数を、検索条件のテンプレートタグの中で使うことができます。

例えば、2.のところで挙げたように、「title」という名前の値をサーバーに送信したとします。
そして、タイトルにその値を含む記事を検索したいとします。
この場合、検索条件用のテンプレートモジュールを以下のように書きます。

<$mt:GetQueryParamsToVars$>
<mt:SearchConditions>
  <$mt:SearchConditionLike field="title" values="$qp_title"$>
</mt:SearchConditions>

4.エンドポイントにアクセスする

検索テンプレートの準備ができたら、GETやPOSTでエンドポイントにアクセスし、値を送信して、検索結果が返ってくることを確認します。

例えば、3.の例のようにタイトルで検索するようにした場合、以下のようなアドレスにアクセスすると、検索を試すことができます。
「検索のキーワード」の箇所に、検索したいキーワードをURLエンコードした値を指定します。

http://your-host/path-to-mt/mt-data-api.cgi/v1/search_entries
  ?templateBlogId=ブログID
  &templateName=テンプレート名
  &title=検索のキーワード

5.JavaScriptで検索する

JavaScriptで検索する場合、searchEntriesメソッドの1つ目のパラメータで、サーバーに送信する値とその名前を指定します。

例えば、3.の例のように「title」という名前の値を渡して、タイトルで検索するようにしたとします。
この場合、以下のようなコードで、検索を試すことができます。

api = new MT.DataAPI({
  baseUrl:  'http://www.foo.com/mt/mt-data-api.cgi',
  clientId: 'example',
});
FJDataAPISearchEntries.extendEndPoints(api);
var param = {
  templateName : '検索条件用テンプレートの名前',
  templateBlogId : 検索条件用テンプレートがあるブログ(ウェブサイト)のID,
  title: '検索のキーワード'
};
api.searchEntries(param, function(response) {
  if (response.error) {
    エラー時の処理
  }
  検索結果に対する処理
});