動的な検索
SearchEntriesプラグインでは、フォームやURLのパラメータを利用して、動的に検索することもできます。
Data APIで検索する場合も、その仕組みを利用することができます。
GetQueryParamプラグインのインストール
動的な検索を行う場合、GETやPOSTで送信されたデータを得るために、GetQueryParamというプラグインをインストールします。
プラグインは以下からダウンロードします。
ダウンロードしたZipファイルを解凍すると、「plugins」のフォルダができます。
このフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。
MTGetQueryParamsToVarsタグ
検索条件用テンプレートモジュールの先頭に、「MTGetQueryParamsToVars」というテンプレートタグを追加します。
このタグは、GETやPOSTで送信されたデータを、Movable Typeのテンプレートの変数(MTSetVar/MTGetVarで扱うもの)に変換します。
個々の変数の名前は、URLのパラメータや、フォームの各要素のname属性の前に、「qp_」を付けたものになります。
例えば、検索条件を入力するフォームに、name属性の値が「title」のinput要素を入れているとします。
そして、このフォームを送信して、MTGetQueryParamsToVarsタグで変数に変換するとします。
この場合、「qp_title」という変数が作られ、そこにフォームから送信された値が代入されます。
検索条件の中で変数を使う
従来のSearchEntriesプラグインでの検索と同様に、MTGetQueryParamsToVarsタグで変換した後の変数を、検索条件のテンプレートタグの中で使うことができます。
例えば、「MTGetQueryParamsToVarsタグ」のところで挙げたように、「title」という名前の値をサーバーに送信したとします。
そして、タイトルにその値を含む記事を検索したいとします。
この場合、検索条件用のテンプレートモジュールを以下のように書きます。
<$mt:GetQueryParamsToVars$>
<mt:SearchConditions>
<$mt:SearchConditionLike field="title" values="$qp_title"$>
</mt:SearchConditions>
エンドポイントにアクセスする
検索テンプレートの準備ができたら、GETやPOSTでエンドポイントにアクセスし、値を送信して、検索結果が返ってくることを確認します。
例えば、3.の例のようにタイトルで検索するようにした場合、以下のようなアドレスにアクセスすると、検索を試すことができます。
「検索のキーワード」の箇所に、検索したいキーワードをURLエンコードした値を指定します。
http://your-host/path-to-mt/mt-data-api.cgi/v1/search_entries
?templateBlogId=ブログID
&templateName=テンプレート名
&title=検索のキーワード
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) {
エラー時の処理
}
検索結果に対する処理
});