拙著「FXはチャートで勝つ!」が発売されました。
FX(外国為替証拠金取引)でのチャートの読み方を解説しています。
自由国民社刊で、定価1,728円(消費税込み)です。
ブログ記事詳細検索プラグイン(その30・検索結果のページ分割/動的な検索の場合)
SearchEntriesプラグインを、リアルタイム再構築プラグイン(RealtimeRebuild)およびページ分割プラグイン(DivPages)を組み合わせると、検索フォームでの動的な検索結果もページ分割することもできます。
1.検索フォームの作り方
検索フォームの作り方は、これまでに解説してきた方法とほぼ同じです。
ただし、フォーム(<form・・・>~</form>)の中に、以下のタグを追加する必要があります。
<input type="hidden" name="first_time" value="1" />
例えば、ブログ記事のタイトルで検索するフォームを作る場合だと、以下のようにform要素の部分を作ります。
<form name="srh" method="get" action="<$mt:RealtimeRebuildCGIPath$>"> <p> <label for="title">キーワード</label><br /> <input type="text" id="title" name="title" /> </p> <p> <input type="submit" name="submit" value="送信" /> </p> <input type="hidden" name="blog_id" value="<$mt:BlogID$>" /> <input type="hidden" name="tmpl_id" value="<$mt:GetTemplateID tmpl_name="詳細検索結果"$>" /> <input type="hidden" name="first_time" value="1" /> </form>
なお、このフォームを含むテンプレートの例は、以下のリンクからダウンロードすることができます。
2.検索結果テンプレートの作り方
次に、これまでの動的検索と同様に、検索結果を出力するためにテンプレートモジュールを作成し、その中にSearchConditionsタグのブロック等を入れます。
ページ分割を行う場合、検索結果テンプレートの中で、検索を行う部分は、以下のように書きます。
<$mt:GetQueryParamsToVars$> <mt:If name="qp_first_time"> <$mt:SetVar name="count_only" value="dp_total_count"$> <$mt:SetVar name="dp_per_page" value="1ページあたりの出力件数"$> <$mt:SetVar name="dp_offset" value="0"$> <mt:Else> <$mt:SetVar name="set_only" value="1"$> <mt:DivPagesInit> </mt:If> <mt:SearchConditions count_only="$count_only" set_only="$set_only"> 検索条件を表すテンプレートタグ <$mt:SearchLimit limit="$dp_per_page"$> <$mt:SearchOffset offset="$dp_offset"$> </mt:SearchConditions> <mt:If name="qp_first_time"> <mt:DivPagesInit per_page="$dp_per_page" total_count="$dp_total_count"> </mt:If>
4行目の「1ページあたりの出力件数」の箇所で、検索結果の1ページに出力するブログ記事の件数を指定します。
また、11行目の「検索条件を表すテンプレートタグ」の部分に、MTSearchCondition系の各種のタグを書いて、検索条件を指定します。
例えば、以下のような場合を考えます。
- 手順1.のフォームのように、ブログ記事のタイトルで検索したいとします。
- タイトルの入力欄のname属性を「title」にしているとします。
- 検索結果は1ページあたり10件ずつ出力したいとします。
この場合、検索を行う部分は以下のように書きます。
<$mt:GetQueryParamsToVars$> <mt:If name="qp_first_time"> <$mt:SetVar name="count_only" value="dp_total_count"$> <$mt:SetVar name="dp_per_page" value="10"$> <$mt:SetVar name="dp_offset" value="0"$> <mt:Else> <$mt:SetVar name="set_only" value="1"$> <mt:DivPagesInit> </mt:If> <mt:SearchConditions count_only="$count_only" set_only="$set_only"> <$mt:SearchConditionLike field="title" values="$qp_title"$> <$mt:SearchLimit limit="$dp_per_page"$> <$mt:SearchOffset offset="$dp_offset"$> </mt:SearchConditions> <mt:If name="qp_first_time"> <mt:DivPagesInit per_page="$dp_per_page" total_count="$dp_total_count"> </mt:If>
3.検索結果の出力
検索結果を出力する方法は、静的に検索してページ分割する場合と同じです。
具体的な手順は、静的なページ分割の場合の「3.検索結果の出力」を参照してください。
4.ページ移動リンクの出力
ページ移動リンクを出力する方法は、静的に検索してページ分割する場合とほぼ同じです。
具体的な手順は、静的なページ分割の場合の「4.ページ移動リンクの出力」を参照してください。
だたし、リンクのアドレスを変数に代入する処理が、以下のように変わります。
<mt:SetVarBlock name="pager_link"$><$mt:DivPagesCGILink tmpl_name="テンプレート名" build_params="1" name="検索フォームの各要素のname属性"$>&page=</mt:SetVarBlock>
「検索フォームの各要素のname属性」の部分には、検索フォーム内で検索条件の入力に使っている各要素のname属性を、コンマで区切って並べます。
また、「テンプレート名」には、検索結果表示テンプレートの名前を入れます。
例えば、手順1.の検索フォームだと、検索フォーム内には、キーワードを入力する欄があり、そのname属性が「title」になっています。
検索結果を「詳細検索結果」というテンプレートに沿って出力するなら、MTSetVarBlockタグを以下のように書きます。
<mt:SetVarBlock name="pager_link"$><$mt:DivPagesCGILink tmpl_name="詳細検索結果" build_params="1" name="title"$>&page=</mt:SetVarBlock>
なお、手順2.~手順4.を含む検索結果テンプレートの例は、以下のリンクからダウンロードすることができます。
5.リアルタイム再構築の許可
テンプレートを作り終わったら、検索結果テンプレートのリアルタイム再構築を許可します。
手順は以下の通りです。
- ブログの「ツール」→「プラグイン」メニューを選びます。
- プラグイン一覧の中で、「RealtimeRebuild」の「設定」のタブを開きます。
- 「再構築を許可するテンプレート」の欄で、ここまでで作った検索結果テンプレートのチェックをオンにします。
- 「変更を保存」ボタンをクリックします。
6.検索結果ページのキャッシュ
静的な検索結果をページ分割する場合と同様に、検索フォームを使った検索結果をページ分割する場合でも、検索結果のページをキャッシュすることができます。
ただし、その手順は静的な検索結果のページ分割とはやや異なります。
手順は後日解説します。
7.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プラグイン不具合修正