「WordPressで学ぶPHP(1)変数・制御構造編」が発売されました。
「WordPressで学ぶPHP」シリーズの第1巻で、WordPressを通してPHPを学んでいく本です。
この本では、PHPの基本となる変数と制御構造について解説します。
Kindle本で、定価500円です。
ブログ記事詳細検索プラグイン(その29・検索結果のページ分割/静的な検索の場合)
SearchEntriesプラグインは、リアルタイム再構築プラグイン(RealtimeRebuild)およびページ分割プラグイン(DivPages)を組み合わせることで、検索結果をページ分割することもできます。
今日は、検索フォームを使わずに、検索条件を静的に指定する場合のページ分割の方法を解説します。
1.プラグインのインストール
前述したように、ページ分割を行うには、リアルタイム再構築プラグイン(RealtimeRebuild)およびページ分割プラグイン(DivPages)が必要です。
また、リアルタイム再構築プラグインを動作させるには、RebuildHelperプラグインも必要です。
まず、これらのプラグインをインストールします。
各プラグインは、以下からダウンロードします。
各プラグインとも、Zipファイルを解凍すると「plugins」というフォルダができます。
このフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。
その後、Movable Typeのインストール先→「plugins」ディレクトリ→「RealtimeRebuild」ディレクトリにある「mt-realtime-rebuild.cgi」ファイルのパーミッションを705等に変えて、実行可能にします。
なお、すでに各プラグインをインストールされている方もいらっしゃるかと思います。
ただし、バージョンが上がっていますので、古いバージョンをお使いの方は、上記のバージョンのプラグインをインストールしてください。
2.検索部分の作り方
次に、インデックステンプレートを作り、その中に検索部分(MTSearchConditionsタグのブロック)を入れます。
ただし、ページ分割に対応させるために、タグの組み方が幾分変わります。
以下のようにタグを組みます。
<mt:IfRealtimeRebuild> <$mt:SetVar name="set_only" value="1"$> <mt:DivPagesInit> <mt:Else> <$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:IfRealtimeRebuild> <mt:SearchConditions count_only="$count_only" set_only="$set_only"> 検索条件を表す各種のタグ <$mt:SearchLimit limit="$dp_per_page"$> <$mt:SearchOffset offset="$dp_offset"$> </mt:SearchConditions> <mt:IfNoRealtimeRebuild> <mt:DivPagesInit per_page="$dp_per_page" total_count="$dp_total_count"> </mt:IfNoRealtimeRebuild>
6行目の「1ページあたりの出力件数」には、分割後の各ページに出力するブログ記事の件数を指定します。
また、10行目の「検索条件を表す各種のタグ」の部分には、SearchEntriesプラグインの各種の検索条件設定のタグを指定します。
例えば、タイトルに「Movable Type」を含むブログ記事を検索し、1ページあたり10件ずつ出力したいとします。
この場合、検索部分を組むと以下のようになります。
<mt:IfRealtimeRebuild> <$mt:SetVar name="set_only" value="1"$> <mt:DivPagesInit> <mt:Else> <$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:IfRealtimeRebuild> <mt:SearchConditions count_only="$count_only" set_only="$set_only"> <$mt:SearchConditionLike field="title" values="Movable Type"$> <$mt:SearchLimit limit="$dp_per_page"$> <$mt:SearchOffset offset="$dp_offset"$> </mt:SearchConditions> <mt:IfNoRealtimeRebuild> <mt:DivPagesInit per_page="$dp_per_page" total_count="$dp_total_count"> </mt:IfNoRealtimeRebuild>
3.検索結果の出力
次に、検索結果を出力する部分を作ります。
前述の検索では、検索されたブログ記事はまだ読み込まれていません。
そこで、「MTLoadSearchedEntries」というテンプレートタグで、検索結果を読み込みます。
その後にMTSearchLoadedEntriesタグのブロックを入れて、読み込んだブログ記事を順次出力します。
ただし、検索にヒットする記事がまったくないこともあり得ます。
そこで、MTSearchLoadedEntriesタグのブロックを、「<mt:IfNonZero tag="SearchLoadedEntryCount">」と「</mt:IfNonZero>」のタグで囲みます。
例えば、見つかったブログ記事のタイトルの一覧を出力するなら、以下のようにタグを組むことが考えられます。
<$mt:LoadSearchedEntries$> <mt:IfNonZero tag="SearchLoadedEntryCount"> <ul> <mt:SearchLoadedEntries> <li><$mt:EntryTitle$></li> </mt:SearchLoadedEntries> </ul> <mt:Else> <p>記事が見つかりませんでした。</p> </mt:IfNonZero>
4.ページ移動リンクの出力
最後に、ページ移動のリンクを出力します。
ページ番号一覧と、前後および最初/最後のページへのリンクを並べて出力するなら、以下のようにタグを組みます。
2行目の「テンプレート名」のところには、検索部分を含むテンプレートの名前を入れます。
<mt:DivPagesIfMulti> <mt:SetVarBlock name="pager_link"$><$mt:DivPagesCGILink tmpl_name="テンプレート名" tmpl_type="index"$>&page=</mt:SetVarBlock> <p> <mt:DivPagesIfPrevPage> <a href="<$mt:GetVar name="pager_link"$>1">« 最初</a> <a href="<$mt:GetVar name="pager_link"$><$mt:DivPagesPrevPageNumber$>">< 前</a> </mt:DivPagesIfPrevPage> <mt:DivPagesLoop> <mt:DivPagesIfCurPage> <$mt:DivPagesNumber$> <mt:Else> <a href="<$mt:GetVar name="pager_link"$><$mt:DivPagesNumber$>"><$mt:DivPagesNumber$></a> </mt:DivPagesIfCurPage> </mt:DivPagesLoop> <mt:DivPagesIfNextPage> <a href="<$mt:GetVar name="pager_link"$><$mt:DivPagesNextPageNumber$>">次 ></a> <a href="<$mt:GetVar name="pager_link"$><$mt:DivPagesLastPageNumber$>">最後 »</a> </mt:DivPagesIfNextPage> </p> </mt:DivPagesIfMulti>
また、PHPが使える環境なら、検索結果をキャッシュすることもできます。
その場合は、2行目のMTSetVarBlockタグを以下のように書きます。
<mt:SetVarBlock name="pager_link"$><$mt:DivPagesPHPLink tmpl_name="RealtimeRebuild" tmpl_type="index" expire_modified="1"$>&page=</mt:SetVarBlock>
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プラグイン不具合修正