PHPによるキャッシュ
更新日:2024.02.01
SearchEntriesプラグインでは、フォームを使って動的に検索する際にも、検索結果のページをキャッシュすることができます。
その方法を解説します。
検索フォーム側
検索フォーム側では、キャッシュを使わない場合と比べて、以下の2点を変更します。
- フォームの送信先のアドレス(form要素のaction属性)を、MTRealtimeRebuildPHPPathタグで表して、PHPによる処理を行うよにします。
- 複数選択のselectや、name属性が同じチェックボックスを複数使いたい場合、それらのname属性には、「○○○[]」のように「[]」を付けます。
例えば、カテゴリをチェックボックスで選んで検索する場合だと、検索フォームは以下のように組みます。
1行目のform要素で、action属性を<$mt:RealtimeRebuildPHPPath$>のタグで表し、PHPによる処理を行うようにしています。
また、12行目のinput要素で、name属性を「cat[]」にして、「cat」の後に「[]」を付けています。
<form method="get" action="<$mt:RealtimeRebuildPHPPath$>">
<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" />
<div>
<label for="cat">カテゴリ</label>
<div id="cattree_div">
<mt:SortedTopLevelCategories>
<mt:SubCatIsFirst>
<ul class="cattree">
</mt:SubCatIsFirst>
<li><input type="checkbox" name="cat[]" value="<$mt:CategoryLabel$>" /><$mt:CategoryLabel><br />
<$mt:SubCatsRecurse$>
</li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:SortedTopLevelCategories>
</div>
</div>
<p>
<input type="submit" value="送信" />
</p>
</form>
ページ移動リンクの出力
一方、検索結果のテンプレートでは、ページ移動リンクを出力する部分を書き換えます。
キャッシュしない場合、ページ移動リンク出力部分で、移動先のアドレスを求めるために、以下のようなMTSetVarBlockタグを使っていました。
<mt:SetVarBlock name="pager_link"$><$mt:DivPagesCGILink tmpl_name="テンプレート名" build_params="1" name="検索フォームの各要素のname属性"$>&page=</mt:SetVarBlock>
この行の中で、以下の3箇所を書き換えます。
- MTDivPagesCGILinkタグをMTDivPagesPHPLinkタグに置き換えます。
- 「php="1"」のモディファイアを追加します。
- 「expire_modified="1"」のモディファイアを追加します。
<mt:SetVarBlock name="pager_link"$><$mt:DivPagesPHPLink tmpl_name="テンプレート名" build_params="1" name="検索フォームの各要素のname属性" php="1" expire_modified="1"$>&page=</mt:SetVarBlock>