「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
ブログ記事詳細検索プラグイン(その23・検索フォーム/検索結果表示の事例・期間で検索)
検索フォームで、日付の期間を指定して検索したい場合もあります。
今回は、「○○年□□月~●●年■■月の記事」のように、日付を2つ入力して、その期間に該当するブログ記事検索する方法を解説します。
以下のような事例を基に解説します。
- 「○○○○年□□月~●●●●年■■月に公開された」という条件でブログ記事を検索します。
- 検索結果表示用のテンプレートモジュールには、「詳細検索結果」という名前を付けるものとします。
- 年および月をselectで選べるようにします。
1.検索フォームの作り方
まず、検索フォームを作ります。
日付を1つだけ入力する場合と同様に、年や月などを入力する要素では、name属性の先頭部分を共通にし、その後に「_year」等の接尾語を付けます。
また、期間の最初と最初のそれぞれで、name属性の先頭部分を別にします。
今取り上げている例だと、期間の最初/最後を入力する要素で、name属性の先頭部分を、それぞれedate1/edate2にすることにします。
実際に検索フォームを作ると、以下のようになります。
<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 name="edate1_year">
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
</select>
<label for="edate1_year">年</label>
<select name="edate1_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="edate1_year">月</label>
~
<select name="edate2_year">
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
</select>
<label for="edate2_year">年</label>
<select name="edate2_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="edate2_year">月</label>
</p>
<p>
<input type="submit" value="送信" />
</p>
</form>
なお、このフォームを含むテンプレートの例は、以下のリンクからダウンロードすることができます。
2.検索結果テンプレートの作り方
次に、検索結果テンプレートを作ります。
フォームで入力された日付は、日付を1つだけ入力する場合と同様に、MTGetParamToDateタグを使って、14桁の数値に変換します。
入力された年/月等から、その最初の日の0時0分0秒を表す14桁の数値を得るには、以下のように書きます。
<$mt:GetParamToDate field="フィールド名" start="日時"$>
fieldモディファイアには、検索フォームの日付入力欄のname属性の値のうち、「_year」等を除いた共通部分を指定します。
また、startモディファイアの「日時」には、以下の値を指定します。
| 変換先の日時 | 指定する値 |
|---|---|
| 年 | year |
| 月 | month |
| 日 | day |
| 時 | hour |
| 分 | minute |
| 分 | second |
変換後の日付は、名前が「qp_フィールド名」の変数に代入されます。
同様に、入力された年/月等から、その最後の日の23時59分59秒を表す14桁の数値を得るには、以下のように書きます。
<$mt:GetParamToDate field="フィールド名" end="日時"$>
1.で作った検索フォームを元に検索する場合、「edate1」で入力された年/月が期間の最初で、「edate2」で入力された年/月が期間の最後です。
したがって、「<$mt:GetParamToDate field="edate1" start="month"$>」と「<$mt:GetParamToDate field="edate2" end="month"$>」のタグで、期間の最初/最後の日付を14桁の数値に変換します。
また、変換後の数値は、変数qp_edate1/qp_edate2に代入されます。
例えば、期間の最初/最後の入力欄で、2010年1月と2010年5月が選択された場合、変数qp_edate1/qp_edate2の値は、それぞれ以下のようになります。
| 変数 | 値 |
|---|---|
| qp_edate1 | 20100101000000 |
| qp_edate2 | 20100531235959 |
ここまでの話にそって、検索結果を出力する部分を作ると、以下のようになります。
<$mt:GetQueryParamsToVars$>
<$mt:GetParamToDate field="edate1" start="month"$>
<$mt:GetParamToDate field="edate2" end="month"$>
<mt:SearchConditions>
<$mt:SearchConditionCompare field="authored_on" ge="$qp_edate1" le="$qp_edate2"$>
</mt:SearchConditions>
<mt:IfNonZero tag="SearchLoadedEntryCount">
<p><$mt:SearchLoadedEntryCount$>件</p>
<mt:Entries>
<$mt:Include module="ブログ記事の概要"$>
</mt:Entries>
<mt:Else>
<p>条件に合う記事がありませんでした。</p>
</mt:IfNonZero>
なお、上記の部分を含むテンプレートの例は、以下のリンクからダウンロードすることができます。
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プラグイン不具合修正
