静的な検索の場合
SearchEntriesプラグインは、リアルタイム再構築プラグイン(RealtimeRebuild)およびページ分割プラグイン(DivPages)を組み合わせることで、検索結果をページ分割することもできます。
検索フォームを使わずに、検索条件を静的に指定する場合のページ分割の方法を解説します。
1.バンドルされたプラグインのインストール
前述したように、ページ分割を行うには、リアルタイム再構築プラグイン(RealtimeRebuild)およびページ分割プラグイン(DivPages)が必要です。
また、リアルタイム再構築プラグインを動作させるには、再構築支援プラグイン(RebuildHelper)も必要です。
まず、これらのプラグインをインストールします。
上記3種類のプラグインがバンドルされているので、インストールしてください。
SearchEntriesのZipファイルを解凍すると、plugins > 【 RealtimeRebuild 】【 DivPages 】【 RebuildHelper 】がそれぞれ展開されます。
これらをMovable Typeのインストール先ディレクトリ
ドメイン > mt > pluginsディレクトリ にアップロードし保存します。
その後、Movable Typeのインストール先にある「plugins」ディレクトリ内の「RealtimeRebuild」フォルダにある「mt-realtime-rebuild.cgi」ファイルのパーミッションを「705」などに変更し、実行可能にします。
※インストール後にはじめてMovable Typeにログインする際には、データベースのアップグレードのメッセージが表示される場合がありますので、画面の指示に従って、データベースのアップグレードを行ってください。
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」ブロックタグを使用します。
また、検索結果が0件となるケースもあります。
そこで、「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」の「設定」のタブを開きます。
- 「再構築を許可するテンプレート」の欄で、ここまでで作ったインデックステンプレートのチェックをオンにします。
- 「変更を保存」ボタンをクリックします。