ブログ記事詳細検索プラグイン(その31・検索結果のページ分割/PHPによるキャッシュ)

SearchEntriesプラグインでは、フォームを使って動的に検索する際にも、検索結果のページをキャッシュすることができます。
その方法を解説します。

1.検索フォーム側

検索フォーム側では、キャッシュを使わない場合と比べて、以下の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>

なお、このフォームを含むテンプレートの例は、以下のリンクからダウンロードすることができます。

検索結果をページ分割してキャッシュする場合の検索フォームテンプレートの例

2.ページ移動リンクの出力

一方、検索結果のテンプレートでは、ページ移動リンクを出力する部分を書き換えます。

キャッシュしない場合、ページ移動リンク出力部分で、移動先のアドレスを求めるために、以下のようなMTSetVarBlockタグを使っていました。

<mt:SetVarBlock name="pager_link"$><$mt:DivPagesCGILink tmpl_name="テンプレート名" build_params="1" name="検索フォームの各要素のname属性"$>&amp;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"$>&amp;page=</mt:SetVarBlock>

なお、このページ移動部分を含む検索結果テンプレートの例は、以下のリンクからダウンロードすることができます。

検索結果をページ分割してキャッシュする場合の検索フォームテンプレートの例

3.SearchEntriesプラグイン関係の記事の一覧

SearchEntriesプラグイン関係のその他の記事は、以下のリンクから参照できます。