第30回:検索結果ページを分割する
第29回では、ブログごとに検索結果テンプレートを変更する方法について説明しました。今回は、検索結果ページを(Yahoo!JapanやGoogleのように)分割する方法について解説します。Movable Typeでは、全ての検索結果を1ページ内に表示させるので、エントリー数が増えてくるにしたがって検索件数も100件、200件と増えていき、検索結果ページの表示が徐々に重くなっていきます。その検索結果を複数のページに分割することで、サーバーへの負荷を軽減させると同時に、訪問者にとっても気軽に検索してもらいやすくなる効果にも繋がります。
検索結果ページを分割するには、MTPaginate というプラグインを用います。以前にも、第22回:カテゴリーアーカイブをページ分割するで紹介しているので、まだインストールが済んでいない方は先にそちらを参照してください。
方法としては、 <MTSearchResults>~</MTSearchResults>をMTPaginateタグで囲むだけなので単純です。但し、MTPaginate のデフォルトは、PHPでの使用を前提としているので、
mt-search.cgi のような CGI ファイル内で MTPaginate プラグインを使用するには、<MTPaginate mode="cgi">のようにして mode 属性を指定しておく必要があります。
以下は、search_templates/default.tmpl の抜粋箇所です。赤文字で記述した箇所が、ページ分割をするために必要となる追加箇所です。 以下例では、検索結果ページ最下部に、ページ分割リンクが表示されます。
<MTPaginateContent max_sections="20">
<MTSearchResults>
<MTBlogResultHeader>
<h2><MT_TRANS phrase="Search Results from"> <$MTBlogName$></h2>
</MTBlogResultHeader>
<h3><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></h3>
<p><$MTEntryExcerpt$> <$MTEntryEditLink$></p>
<p class="posted"><MT_TRANS phrase="Posted in"> <$MTBlogName$> <MT_TRANS phrase="on"> <$MTEntryDate$></p>
<MTPaginateSectionBreak>
</MTSearchResults>
</MTPaginateContent>
<MTPaginateIfMultiplePages>
<MTPaginateIfPreviousPage_>
<a href="<$MTPaginatePreviousPageLink$>">前へ</a> |
</MTPaginateIfPreviousPage_>
<$MTPaginateNavigator format_current="%d" placement_all="after" separator=" | ">
<MTPaginateIfNextPage_> | <a href="<$MTPaginateNextPageLink$>">次へ</a>
</MTPaginateIfNextPage_>
</MTPaginateIfMultiplePages>
</MTPaginate>
以上で、第30回は終了です。
参考になりましたらポチっとお願いします♪