Movable Type 備忘録

 
    

 検索結果ページのページ分割をカスタマイズ

こんにちわ^^

只今せっせと Movable Type 4.2 用のテンプレートを創作中なのですが、コミュニティ掲示板用のテンプレートを作ろうとしたら、グローバルテンプレートの方も考慮しなくちゃいけなかったので大変なのでやめちゃいました (; ̄∀ ̄A

今使ってるテンプレートはとりあえず、MT4.2 に対応してます。
対応といっても、変更された MT4.2 のテンプレートの構造に合わせたのと、検索結果のページ分割とコメント周りを変更した程度です。

今回は検索結果のページ分割をカスタマイズしてみました。

既に Movable Type 4.2 をお使いの人なら気づいてると思いますが、検索結果のページ分割は、1 ページに出力する最大件数を SearchMaxResults 環境変数で設定してあげることで任意のページ数( デフォルトは 20 件 )で分割することができます。

たとえば、最大表示件数を 10 件とした場合、検索結果が 200 件だったら、

20 ページ = 200 件 / 10 件

というようにページ分割してくれます。
さらに Yahoo や Google などのように分割されたページ番号を表示することも可能です。

ですが、このページ番号が曲者で、ページ分割数が仮に 50 ページだとした場合、そのまま 50 ページ分のリンクが表示がされちゃいます。

わたし的はそれはいただけなかったので、ページ分割後のリンク数の表示制御をしてみました。
サンプルはわたしのサイトで、「movable type」をキーワードにして検索してみてください。

ページ分割後のリンク数の表示制御

具体的には以下のようなタグで行います。

リンク数の表示制御

  1. <MTSearchResults>
  2. <!-- カレントページ取得 -->
  3.     <$MTCurrentPage setvar="curpage"$>
  4.  
  5.     <ul>
  6. <!-- 前ページ表示 -->
  7.     <mt:IfPreviousResults><li><a href="<$MTPreviousLink$>">PREV</a></li></mt:IfPreviousResults>
  8.  
  9. <!-- 開始ページ番号取得 -->
  10.     <mt:SetVarBlock name="stapage"><mt:GetVar name="curpage" value="4" op="-"></mt:SetVarBlock>
  11. <!-- 開始ページ < 0 の場合 1 をセット -->
  12.     <mt:If name="stapage" lt="0"><mt:SetVar name="stapage" value="1"></mt:If>
  13. <!-- 最大表示ページ番号取得 -->
  14.     <mt:SetVarBlock name="dispage"><mt:GetVar name="stapage" value="7" op="+"></mt:SetVarBlock>
  15.  
  16.     <MTPagerBlock>
  17.     <mt:If name="__counter__" eq="$dispage">
  18.         <li><a href="<$MTPagerLink$>">&#8230;</a></li>
  19.     <mt:Elseif name="__counter__" lt="$dispage">
  20.         <mt:If name="__counter__" ge="$stapage">
  21.             <mt:If name="__counter__" eq="$curpage">
  22.                 <li><span><mt:Var name="__value__"></span></li>
  23.             <mt:Else>
  24.                 <li><a href="<$MTPagerLink$>"><mt:Var name="__value__"></a></li>
  25.             </mt:If>
  26.         </mt:If>
  27.     </mt:If>
  28.     </MTPagerBlock>
  29.  
  30. <!-- 次ページ表示 -->
  31.     <mt:IfMoreResults><li><a href="<$MTNextPageLink$>">NEXT</a></li></mt:IfMoreResults>
  32.     </ul>
  33. </MTSearchResults>

ポイントは青字と赤字の部分です。
青字の部分では、ページ番号のリンク表示の開始番号を算出してます。上記例では、カレントページ - 4 を開始番号としてます。
開始番号 <= 0 の場合は 1 とします。

赤字の部分では、最大表示件数を算出してます。
上記例では最大表示リンク数を 8 とし、青字で算出した開始番号 + 7 としています。

また、最大表示件数のページリンクには「…」という表示にして、まだ続きがありますよ…と促すようにします。

以上です。
offset モディファイアや lastn モディファイアと併用できればもっとスマートに同様のことができるのにと思うのココロ。

    

 Trackback Pings(1)

from HashiMのたわごと(?)

実はこれ先週のうちに解決していたのですが,週末から昨日にかけてぶらっと名古屋の方...

 Comments(2)

#1: Posted by showBOO @ September 10, 2008 [REPLY]
user-pic

参考になりました!
なかなかMTの検索結果のページ分割のカスタマイズ情報が出回っていないので、参考になりました。

ありがとうございました。

#2: Posted by Author Profile Page bzbellからshowBOOへの返信 @ September 10, 2008 [REPLY]
user-pic

>>1 showBOO さん

こんばんわ^^

> なかなかMTの検索結果のページ分割のカスタマイズ情報が出回っていないので、参考になりました。

参考になってよかったですうぅ~ん
今後ともどうぞよしなにテレテレ

 

 Post a Comment

 

コメント用フィード