「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
ブログ記事詳細検索プラグイン(その22・検索フォーム/検索結果表示の事例・日付で検索)
ブログ記事の公開日時など、検索フォームで日付を指定して検索したい場合もあります。
今回は、「○○年□□月の記事」のように、ある1つの日付を入力して検索する方法を解説します。
以下のような事例を基に解説します。
- 「○○○○年□□月に公開された」という条件でブログ記事を検索します。
- 検索結果表示用のテンプレートモジュールには、「詳細検索結果」という名前を付けるものとします。
- 年および月をselectで選べるようにします。
1.検索フォームの作り方
まず、検索フォームを作ります。
SearchEntriesプラグインで日付のフィールドを検索する場合、MTSearchConditionCompareタグやMTSearchConditionCFCompareタグを使って、「ge="範囲の最初の日時"」と「le="範囲の最後の日時"」で日付の範囲を指定します。
日時は「年月日時分秒」を連結した14桁の数値で表します。
一方、検索フォーム側では、年月日時分秒まですべて入力することは、通常はありません。
例えば、今取り上げている例のように、年と月だけを入力することが多いと思います。
そこで、フォームで入力された年等を元に、ge/leモディファイアで使う14桁の数値を求められるようにします。
冒頭の画面のように、年月日時分秒を別々の入力要素で入力する場合、個々の入力要素のname属性を「名前_接尾語」のような形にします。
「名前」の部分には、共通の名前を指定します。
また、接尾語は以下のように付けます。
入力要素 | 接尾語 |
---|---|
年 | year |
月 | month |
日 | day |
時 | hour |
分 | minute |
分 | second |
例えば、冒頭の画面のように、2つのselectで年と月を入力できるようにするとします。
また、それらのselectのname属性のうち、「名前」に当たる部分を「edate」にするとします。
この場合の検索フォームの組み方は、以下のようになります。
<form method="get" action="<$mt:RealtimeRebuildCGIPath$>"> <input type="hidden" name="blog_id" value="<$mt:BlogID$>" /> <input type="hidden" name="tmpl_id" value="<$mt:GetTemplateID tmpl_name="詳細検索結果"$>" /> <p> <select id="edate_year" name="edate_year"> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> </select> <label for="edate_year">年</label> <select id="edate_month" name="edate_month"> <mt:For var="m" from="1" to="12"> <option value="<$mt:GetVar name="m"$>"><$mt:GetVar name="m"$></option> </mt:For> </select> <label for="edate_month">月</label> </p> <p> <input type="submit" value="送信" /> </p> </form>
なお、このフォームを含むテンプレートの例は、以下のリンクからダウンロードすることができます。
2.検索結果テンプレートの作り方
次に、検索結果テンプレートを作ります。
2-1.MTGetParamToDateタグ
まず、検索フォームで入力された年等の情報から、検索で使う14桁の数値を作ります。
それには、「MTGetParamToDate」というテンプレートタグを使います。
このテンプレートタグが処理されると、期間の最初/最後を表す14桁の数値が生成され、変数に代入されます。
<$mt:GetParamToDate field="フィールド名" range="期間"$>
fieldモディファイアには、検索フォームの日付入力欄のname属性の値のうち、「_year」等を除いた共通部分を指定します。
例えば、1.で作った検索フォームの場合だと、name属性を「edate_XXX」のような値にしていました。
したがって、fieldモディファイアには「field="edate"」と指定します。
また、rangeモディファイアでは、どの期間の数値に変換するかを、以下の表から指定します。
変換先の期間 | 指定する値 |
---|---|
年 | year |
月 | month |
日 | day |
時 | hour |
分 | minute |
分 | second |
例えば、1.で作った検索フォームの場合だと、年と月を入力するようにしていますので、変換先の14桁の数値も、その年/月の最初と最後を表す値にします。
したがって、「range="month"」と指定します。
変換した結果は、「qp_フィールド名_s」と「qp_フィールド名_e」の2つの変数に代入されます。
「フィールド名」の部分は、「field="フィールド名"」のモディファイアで指定した値になります。
「・・・_s」の変数には、期間の最初の日時を表す数値が代入されます。
また、「・・・_e」の変数には、期間の最後の日時を表す数値が代入されます。
例えば、「<$mt:GetParamToDate field="edate" range="month"$>」としたとします。
この場合、「qp_edate_s」と「qp_edate_e」の2つの変数が定義されます。
変数qp_edate_sには、フォームで入力された年/月の最初に対応する値が代入されます。
また、変数qp_edate_eには、フォームで入力された年/月の最後に対応する値が代入されます。
検索フォームで年/月として2010/5が選ばれた場合だと、これらの変数の値は、それぞれ以下のようになります。
変数 | 値 |
---|---|
qp_edate_s | 20100501000000 |
qp_edate_e | 20100531235959 |
2-2.MTSearchConditionsタグのブロックを作る
次に、MTGetParamToDateタグで変換した結果を使って、MTSearchConditionsタグのブロックを作り、日付の条件を指定します。
例えば、2-1.で解説した例だと、変数qp_edate_sとqp_edate_eに、月の最初/最後を表す14桁の数値が入っています。
そこで、MTSearchConditionsCompareタグやMTSearchConditionsCFCompareタグを使って、これら2つの変数で検索範囲の下限/上限を指定します。
「○○○○年□□月に公開された」という条件でブログ記事を検索する場合だと、ブログ記事の公開日時のフィールド(authored_onフィールド)に対して、MTSearchConditionCompareタグで条件を設定します。
実際にMTSearchConditionsタグのブロックを組むと、以下のようになります。
<$mt:GetQueryParamsToVars$> <$mt:GetParamToDate field="edate" range="month"$> <mt:SearchConditions> <$mt:SearchConditionCompare field="authored_on" ge="$qp_edate_s" le="$qp_edate_e"$> </mt:SearchConditions>
なお、上記の部分を含むテンプレートの例は、以下のリンクからダウンロードすることができます。
3.SearchEntriesプラグイン関係の記事の一覧
SearchEntriesプラグイン関係のその他の記事は、以下のリンクから参照できます。
- ブログ記事詳細検索プラグイン(その1・概要/インストール/ライセンス)
- ブログ記事詳細検索プラグイン(その2・「ブログ記事のフィールドの値が○○に等しい」場合の検索)
- ブログ記事詳細検索プラグイン(その3・「ブログ記事のフィールドの値に○○を含む」場合の検索)
- ブログ記事詳細検索プラグイン(その4・「ブログ記事のフィールドの値が○○以上」等の場合の検索)
- ブログ記事詳細検索プラグイン(その5・ブログ記事のフィールドどうしでのOR検索)
- ブログ記事詳細検索プラグイン(その6・カテゴリのOR検索)
- ブログ記事詳細検索プラグイン(その7・カテゴリのAND検索)
- ブログ記事詳細検索プラグイン(その8・タグの検索)
- ブログ記事詳細検索プラグイン(その9・カスタムフィールドでの検索の基本)
- ブログ記事詳細検索プラグイン(その10・カスタムフィールドでの検索の応用)
- ブログ記事詳細検索プラグイン(その11・各種の検索条件の指定)
- ブログ記事詳細検索プラグイン(その12・ブログ記事の並べ替え)
- ブログ記事詳細検索プラグイン(その13・検索結果の一部を読み込む)
- ブログ記事詳細検索プラグイン(その14・複雑なOR検索)
- ブログ記事詳細検索プラグイン(その15・検索結果の件数の出力)
- ブログ記事詳細検索プラグイン(その16・検索フォーム作成の基本)
- ブログ記事詳細検索プラグイン(その17・検索結果表示テンプレート作成の基本)
- ブログ記事詳細検索プラグイン(その18・検索を動作させるための設定)
- ブログ記事詳細検索プラグイン(その19・検索フォーム/検索結果表示の事例・1つの数値で検索)
- ブログ記事詳細検索プラグイン(その20・検索フォーム/検索結果表示の事例・数値の範囲で検索)
- ブログ記事詳細検索プラグイン(その21・検索フォーム/検索結果表示の事例・数値の範囲をselectで選択)
- ブログ記事詳細検索プラグイン(その22・検索フォーム/検索結果表示の事例・日付で検索)
- ブログ記事詳細検索プラグイン(その23・検索フォーム/検索結果表示の事例・期間で検索)
- ブログ記事詳細検索プラグイン(その24・検索フォーム/検索結果表示の事例・カテゴリのOR検索)
- ブログ記事詳細検索プラグイン(その25・検索フォーム/検索結果表示の事例・カテゴリのAND検索)
- ブログ記事詳細検索プラグイン(その26・検索フォーム/検索結果表示の事例・タグのOR検索)
- ブログ記事詳細検索プラグイン(その27・検索フォーム/検索結果表示の事例・タグのAND検索)
- ブログ記事詳細検索プラグイン(その28・検索フォーム/検索結果表示の事例・ドロップダウン/ラジオボタンのカスタムフィールドの検索)
- ブログ記事詳細検索プラグイン(その29・検索結果のページ分割/静的な検索の場合)
- ブログ記事詳細検索プラグイン(その30・検索結果のページ分割/動的な検索の場合)
- ブログ記事詳細検索プラグイン(その31・検索結果のページ分割/PHPによるキャッシュ)
- SearchEntriesプラグインでMore Custom FieldsプラグインのCheckbox Groupを検索する(静的編)
- SearchEntries プラグインでMore Custom FieldsプラグインのCheckbox Groupを検索する(動的編)
- SearchEntriesプラグイン不具合修正