検索結果ページのページ分割
ページ分割シリーズの締めくくりは「検索ページのページ分割」です。
このカスタマイズを行うことで通常の検索エンジンのように一定件数毎にページを分割することができます。
この技は自分で発見したのではなく、かなり以前に caramell*vnilla さんと Document_Not_Bound さんのコメントのやりとりでみつけましたので、ご紹介まで(カスタマイズ方法は掲載されていないようです)。
以下、カスタマイズ方法です。
1.プラグインファイルのダウンロード
MT Extensions より MTPaginate をダウンロード(ページ上の方にある「Download」をクリック)。ファイルは任意のフォルダ(デスクトップ等)に保存します。古いバージョン(1.24)では2ページ目以降の表示ができなかったため、既にお使いの方も最新版をダウンロードされることをお勧めします。1.26では正常に動作しました。
2.プラグインファイルのアップロード
ダウンロードしたファイルを解凍し、その中の MTPaginate.pl を plugins ディレクトリにアップロードします。
注:この情報はバージョン1.28のものです。
ダウンロードしたファイルを解凍し、その中の MTPaginate ディレクトリを下記のディレクトリ構成になるように plugins ディレクトリに丸ごとアップロードします。
plugins/MTPaginate/lib/MTPaginate.pm
plugins/MTPaginate/MTPaginate.pl
3.検索用テンプレートの修正
検索用テンプレートは管理画面から編集できないため、ファイルを直接編集します。なお元のファイルはバックアップ(同じ内容のものを別のファイル名で保存)しておきましょう。
search_templates/default.tmpl
をダウンロード、任意のエディタで開き、検索結果テンプレートの MTSearchResults タグの前後に、下記のリストのように青色部分のタグを追加します。
<MTPaginate mode="cgi">
<MTPaginateIfMultiplePages>
<div class="paginate">
<MTPaginateIfPreviousPage_>
<a href="<$MTPaginatePreviousPageLink$>" title="previous page link"><</a>
</MTPaginateIfPreviousPage_>
<$MTPaginateNavigator format_all="All Pages" place_all="after"$>
<MTPaginateIfNextPage_>
<a href="<$MTPaginateNextPageLink$>" title="next page link">></a>
</MTPaginateIfNextPage_>
</div>
</MTPaginateIfMultiplePages>
<MTPaginateContent max_sections="10">
<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>
</MTPaginate>
検索用テンプレートはCGIとして動作するため、上記リスト1行目の
mode="cgi"
は必須です。この設定を行っていない状態で検索を実行すると、検索結果画面で
Make sure that the document extension is .php and that your server supports PHP documents.
というメッセージが表示されます。
赤色で示している div 要素はページ分割機能とは直接関係ありませんが、ページリンク用のスタイルを指定する場合を考慮して設定しています。必要に応じて下記のようなCSSをスタイルシート(styles-site.css)に追加してください。
.paginate {
text-align: center;
font-size: 9px;
}
編集が完了したら元のディレクトリにアップロードします。これで各ページから検索を実行してみてください。
4.日本語を利用する場合
このテンプレートに日本語を直接記述すると正常に動作しなくなる可能性があります。
日本語を表示したい場合、例えばページリンクの title 属性で日本語を表示したい場合は
<a href="<$MTPaginatePreviousPageLink$>" title="previous page link"><</a>
:
<a href="<$MTPaginateNextPageLink$>" title="next page link">></a>
の赤色部分を青色の
<a href="<$MTPaginatePreviousPageLink$>" title="<MT_TRANS phrase="Previous Page Link">"><</a>
:
<a href="<$MTPaginateNextPageLink$>" title="<MT_TRANS phrase="Next Page Link">">></a>
に変更します。
そして
- lib/MT/L10N/ja.pm
を任意のエディタで開いて下記を追加します。
'Next Page Link' => '次のページへ',
'Previous Page Link' => '前のページへ',
「Previous Page Link」「Next Page Link」という文字列やそれに対応する日本語名ですが、MT_TRANS タグの phrase 属性の内容と
ja.pm の '' で括った英語が一致すればOKですので、お好きな内容を設定してください。
ただし ja.pm 内ですでに使われている phrase 属性と重複しないように気をつけてください。
また上記2行を挿入する位置はどこでも構いませんが、全体を括っている
%Lexicon = (
:
);
の間に挿入してください。他と同じような設定があるので、それに並べて挿入すれば大丈夫でしょう。最初から設定されているものは行頭にタブがありますが、なくても問題ありません。
5.注意事項
当サイトで動作確認したところ、ページリンクの表示で若干不具合("All Pages" 横のセパレータ位置が妙)があるようです。
またページ遷移の度にCGIが起動されるため、サーバに若干負荷がかかりますのでご注意ください。
2007.05.04 追記
プラグインのバージョンアップに伴い、アップロード方法を修正しました。また 3.3 よりテンプレート化されたので、本文の一部を修正しました。
- Movable Type 7のコンテンツデータ(コンテンツタイプアーカイブ)をページ分割する方法
- Movable Typeでブログ記事やウェブページをページ分割する方法
- Movable Typeの「最近のブログ記事」をページ分割する
- PageButeプラグインでページ分割がないときにナビゲーションや(X)HTMLマークアップを表示しない方法
- Movable Typeのダイナミックパブリッシングでのページ分割ナビゲーションの不具合を解消する
- Movable Type 5のダイナミックパブリッシングでのページ分割について
- Movable Type のページ分割でページ番号を title 要素に表示する
- Movable Type のページ分割によるナビゲーションの前後ページ表示を絞り込む(改)
- ダイナミックパブリッシングによるページ分割
- コメントのページ分割 for Movable Type 4
- PageBute プラグインによるページ分割
- Movable Type のページ分割によるナビゲーションの前後ページ表示を絞り込む
- アーカイブページのページ分割 for Movable Type 4.1
- メインページのページ分割 for Movable Type 4
- ページ分割の Ajax 化
≫ 検索結果ページ分割 from MediAhead.jp
検索結果ページの複数ページ分割にチャレンジしてみました。 まずネットで調べてみた... [続きを読む]
≫ ページ分割してみました。(検索結果ページ) from ネタを探して2万マイル!?
少し前に月別やカテゴリーなどをページ分割してみました。 今度は、検索ページも分... [続きを読む]
こんばんは。
なにげなく読み始めて、どっかで見たことのあるサイト名が・・・って、コントみたいな(笑)反復リアクションしてしまいました(笑)。完全に記憶細胞が冬眠を始めてました・・(笑)。
ページ分割は気に入っていてたのですが、エントリー件数が増え始め、再構築エラーが起きるようになってからハズしてみたらおさまったので、泣く泣くオサラバしてしまいました。ただ・・・ホントにサーバーへの負荷ってみなさんピンキリですよね。一概に業者の違いでもなく、時間帯とか・・・いろいろと。ハナシ逸れました(笑)。
エラーフリーな超快適スパコンサーバ(笑)でブログ・・・とか実現する日を心待ちに・・。(エントリーと関係なくてスミマセン。)
>toycozyさん
こんばんは。
コメントありがとうございます。
あのやりとりを拝見した時はよく分からなかったのですが、最近ようやく理解できました。(笑)
たしかにサーバのスペック等に依存するカスタマイズもありますからね(笑)。
こんばんわ、いつもカスタマイズなどでお世話になっております。
少々気になったことがあったので、コメントさせて頂きます。
一番最後の注意事項にある不具合ですが、これはセパレータがALL PAGESの前にできずに後ろにできる現象でしょうか?
もしそれならば、一応解決策が見つかったので情報を提供させて頂こうと思ったのですが。
(解決されているかも知れないと考えて、そちらの検索ページで確認しようとしましたが、404で動いてないっぽいので。)
すでに解決済みであれば、流してもらって構いません。(^^;
>Fear ウルフさん
こんばんは。
情報ありがとうございます。
注意事項の不具合は仰せの通りです。
解消策についてはトラックバックして頂けると幸いです。
検索ページはモジュール化した部分の再構築漏れでした。すいません。
現在正常に動作しております。
以上です。
それではどうぞよろしくお願い致します。
こんばんわです。(もう夜中ですが。)
検索結果ページのページ分割の解決策ですが、トラックバックさせて頂きました。
修正方法は、当ページの2項になります。
しかし、MTpluginの改造と言う手段なので、はたしてやって良いのかがネックです。(^^;
一応、動作は問題ないようなのですが、あくまで公式プラグインで修正されるまでの繋ぎってことで・・・。
#検索ページの再構築、ご苦労様です。
検索も含めてかなり重宝させて頂いておりますので、助かりました。
>Fear ウルフさん
こんばんは。
トラックバックありがとうございました。
貴重な情報、助かります。
検索ページも全く気がついてませんでした。
ご連絡ありがとうございます。
こんばんわです。
#情報
俺なんかでは、こんなことぐらいしか出来ないので。(^^
(たまたま気付いただけなので、当てになる程じゃありませんが。)
今後も参考にさせて頂くので、何か質問するかも知れませんが、その時はよろしくです。
ではでは・・・。
ページ分割のリンクを結果の下に出したいのですが、<MTBlogResultFooter>以下が認識されないのです。何か解決策はありますでしょうか。
それと、ページ分割をしたときに次のページへ移らず、検索窓に何も入れなかったときの表示になってしまいます。(実際、検索窓には何も入っていません)リンク先はmt-search.cgi?page=2となっています。
MTのバージョンは3.34、プラグインのバージョンは1.28です。
よろしくお願いいたします。
>chacoさん
こんにちは。
ご質問の件ですが、MTBlogResultFooter ? /MTBlogResultFooter の中は検索結果の一番最後のエントリーとしか対応していませんので、この中にリンクは含めないでください(ご質問の解釈が違ってましたら具体的にどのようにタグを設定しているかご連絡ください)。
2番目の質問は form 要素の method 属性値を get にすれば大丈夫だと思います。
これで検索のページ分割は動作するようになると思いますが、レイアウトがうまく整わないようですので、別途確認したいと思います。もし良い案が見つかれば別途エントリー致します。
それではよろしくお願い致します。
>yujiroさん
早速レスありがとうございます。
2番目の質問は昨日GETにしてみたのですがダメだったので質問しましたが、今日になったらできるようになりました。
1番目の方ですが、反映されない理由はわかりました。
ありがとうございます。
ページを分割しても、ヘッダとフッタに共通に入れたい物があって
フッタの部分はページ分割のリンク、ヘッダの部分は検索結果の
件数を入れたいのです。(いまは○?○件との表示もしたい。)
検索結果のナンバリングもしたいのです。
>chacoさん
こんばんは。
「検索結果のページ分割(3.3x 版)」をエントリーしましたので参考になれば幸いです。
ありがとうございます。
拝見しました。
mt 4,0で検索のページ分割をしたいのですが、
どのようにすればいいのでしょう?
アドバイスいただきたいです。
この方法を使うとサイドバーが落ちてしまったり
一番上の○○の検索結果ってでるのがでなくなってしまったりです。
>ryuさん
こんにちは。
ご質問の件ですが、ご要望事項として、動作の正常性が確認できれば別途エントリーしたいと思います。
申し訳ありませんがしばらくお時間ください。
それではよろしくお願い致します。