MTのページ分割プラグイン PageBute導入

リストページに掲載する件数を分割してくれるPageButeプラグイン。

当サイトではグルメカテゴリ旅本ラボなど、一カテゴリの記事数が多い「カテゴリ別記事リスト」ページで、その機能を活用している。

8289.jpg

上記は5ページ目を表示中の画面より。

テンプレート 記事リスト

リスト記述箇所にタグを追加。

  • <mt:PageContents> ~ </mt:PageContents> で挟む
  • 閉じタグ </mt:Entries> の前に <mt:PageSeparator> を挿入

<mt:PageContents> の「count=」で件数を指定し、<mt:Entries> の「lastn=」の値はゼロとする。当サイトは1ページに付き50件と多め。

テンプレートの基本形はこんな感じ。

<ul>
<mt:PageContents count="50">
<mt:Entries lastn="0">
<li><a href="<mt:EntryPermalink>"><mt:EntryTitle></a></li>
<mt:PageSeparator>
</mt:Entries>
</mt:PageContents>
</ul>

テンプレート ページナビゲーション

記事リスト部分の後に追加。

  • <mt:Pagination> ~ <mt:Pagination> で挟む
  • ページURLは <mt:PaginationLink> タグ、他に前後ページ用タグもあり
  • ページ番号は <mt:PaginationLink> タグに「element="number"」を付けると出力される

1ページしか生成されないとページナビゲーションは不要になるが、非表示タグは用意されていない。当サイトでは51件以上の場合にのみ表示されるよう細工。

カテゴリーの件数を「bute-cnt」として書き出す。

<mt:SetVarBlock name="bute-cnt"><mt:CategoryCount></mt:SetVarBlock>

「bute-cnt」が51件以上の場合、<mt:If> ~ </mt:If> で挟んだ部分を出力。

<mt:If name="bute-cnt" gt="51">
...
</mt:If>

<mt:If> 部分は、 <mt:Unless> タグにて「lt="51"」でも同じ働きをする。

<mt:Unless name="bute-cnt" lt="51">
...
</mt:Unless>

まとめると、テンプレートはこんな感じ。

<mt:Pagination>
<mt:SetVar name="bute-cnt" value="CategoryCount">
<mt:If name="bute-cnt" gt="51">
<div class="page-navi">
<ul>
<mt:IfPaginationFirst><li><a href="<mt:PaginationFirst>">&laquo;</a></li></mt:IfPaginationFirst>
<mt:IfPaginationPrev><li><a href="<mt:PaginationPrev>">prev</a></li></mt:IfPaginationPrev>
</mt:PaginationHeader>
<mt:IfPaginationCurrent><li class="current"></li><mt:Else><a href="<mt:PaginationLink>"><li><mt:PaginationLink element="number"></li></a></mt:IfPaginationCurrent>
<mt:PaginationFooter>
<mt:IfPaginationNext><li><a href="<mt:PaginationNext>">next</a></li></mt:IfPaginationNext>
<mt:IfPaginationLast><li><a href="<mt:PaginationLast>">&raquo;</a></li></mt:IfPaginationLast>
</ul>
</div>
</mt:If>
</mt:Pagination>

スタイルシート

参考までに、ページナビゲーション部分のスタイル。表示中のページ番号に class「current」を割り当てて、目立つように太字に背景色を設定。

.page-navi ul li{
display: inline-block;
padding: 0.5em 1.2em;
border: 1px solid #cccccc;
border-radius: 3px;
}
.current{
font-weight:bold;
background: #f5f5f5;
}

テンプレート ページタイトル

ブラウザで表示されるページタイトルが、記事リストの1ページ目も2ページ以降も同じになってしまう。

ページ番号が出力されるよう、<head> ~ </head> 間にある<title>タグ部分に追記。

<mt:IfPageBefore> page <mt:PageCount></mt:IfPageBefore>

テンプレートはこんな感じ。

<title><mt:ArchiveTitle encode_html="1"><mt:IfPageBefore> page <mt:PageCount></mt:IfPageBefore></title>

テンプレート 正規URL(CanonicalURL)

<head> ~ </head> 間にある <mt:CanonicalURL> が、これまた1ページ目も2ページ以降も同じになってしまう。2ページ目は「index_2.php」となるのだが、PageButeプラグインには付与する機能が無い。

<link rel="canonical" href="<mt:CanonicalURL>">

別途配布されているプラグインに頼る。

このプラグインは拡張子「html」にしか対応していないため、「php」にしている当サイトでは修正が必要。「lib/PageButeCanonicalChanger/CMS.pm」ファイルを開く。

8290.png

13行目の「html」を「php」に変更。

$$output =~ s/(<link rel="canonical" href="[^"]+)"/$1index_$page.php"/ if $page ne 1;

プラグインをサーバーに送った後は再構築するだけで、正規URLが反映される。


以上、サイトのテンプレートを入れ替えた際、これらの記述まで誤って消してしまったので、今後の自分のためにも情報をまとめて記録してみた次第。

prev

使用中のMTプラグインと小技

next