「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
SearchEntriesプラグイン(Data API対応その4・動的な検索)
SearchEntriesプラグインでは、フォームやURLのパラメータを利用して、動的に検索することもできます。
Data APIで検索する場合も、その仕組みを利用することができます。
1.GetQueryParamプラグインのインストール
動的な検索を行う場合、GETやPOSTで送信されたデータを得るために、GetQueryParamというプラグインをインストールします。
プラグインは以下からダウンロードします。
ダウンロードした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) { エラー時の処理 } 検索結果に対する処理 });