Movable Type のページ分割によるナビゲーションの前後ページ表示を絞り込む(改)
以前公開した「Movable Type のページ分割によるナビゲーションの前後ページ表示を絞り込む」で、表示するページ数を常に一定にできるよう、機能を追加しました。
1.比較
以下、offset モディファイアに「2」を設定した場合の、機能追加前と機能追加後の表示です。offset モディファイアとは、現在表示中のページから前後に表示するページ数を指定するためのものでます。「2」を設定すれば、現在のページと前後ページ含め最大5ページ分が表示されますが、機能追加前では、末端のページのオフセットは切り捨てられます。
機能追加前
1ページ目
2ページ目
5ページ目
9ページ目
10ページ目
機能追加後
機能追加後は、切り捨てられた分のオフセットを反対側のオフセットに加えることで、常に同じページ数を表示することができます。
1ページ目
2ページ目
5ページ目
9ページ目
10ページ目
以下、カスタマイズ方法です。機能追加後の表示を行いたい場合は必ず4項の設定を行なってください。
2.MTPaginate プラグインによるページ分割の設定
下記の記事を参考にして、MTPaginate プラグインを Movable Type に設定してください。
注:2項を実施する前に、必ずページ分割が正常に動作することを確認してください。すべてを一気に行うと、正常に動作しなかった場合の切り分けができなくなります。
3.プラグインファイルの修正
MTPaginate/lib/MTPaginate.pm を任意のエディタで開き、赤色部分(v1.28 では 497行~506行辺り)を削除し、青色部分を追加します。
$format_title = " . sprintf(' title=\"$format_title\"', \$i)" if $format_title;
$res .=<<PHP;
for(\$i = $start; \$i <= $end; \$i++) {
if(\$i > $start)
echo '$separator';
if(\$i == \$paginate_current_page) {
echo sprintf("$format_current", \$i);
} else {
echo "<a href=\\\"\$paginate_self=\$i$anchor\\\"$target" $format_title . sprintf('>$format', \$i) . '</a>';
}
}
PHP
if ($format_all && $place_all eq 'after') {
下が置き換えた後のリストです。
$format_title = " . sprintf(' title=\"$format_title\"', \$i)" if $format_title;
my $offset = $args->{offset} || 2;
my $fixed_offset = $args->{fixed_offset} || 0;
$res .=<<PHP;
if ($fixed_offset) {
if (($end - \$paginate_current_page) <= $offset) {
\$before_offset = $offset + ($offset - ($end - \$paginate_current_page));
\$after_offset = $offset;
} else if ((\$paginate_current_page - $start) <= $offset) {
\$before_offset = $offset;
\$after_offset = $offset + ($offset - (\$paginate_current_page - $start));
} else {
\$before_offset = $offset;
\$after_offset = $offset;
}
} else {
\$before_offset = $offset;
\$after_offset = $offset;
}
for (\$i = $start; \$i <= $end; \$i++) {
if (\$paginate_current_page == 'all') {
if(\$i > $start)
echo '$separator';
if(\$i == \$paginate_current_page) {
echo sprintf("$format_current", \$i);
} else {
echo "<a href=\\\"\$paginate_self=\$i$anchor\\\"$target" $format_title . sprintf('>$format', \$i) . '</a>';
}
} else {
if (\$i > $start) {
if (\$i == \$paginate_current_page && \$i != 1) {
echo '$separator';
} else if (\$i < \$paginate_current_page) {
if (\$paginate_current_page - \$i < \$before_offset) {
echo '$separator';
}
} else {
if (\$i - \$paginate_current_page < (\$after_offset+1)) {
echo '$separator';
}
}
}
if (\$i == \$paginate_current_page) {
echo sprintf("$format_current", \$i);
} else {
if(\$i < \$paginate_current_page) {
if(\$paginate_current_page - \$i < (\$before_offset+1)) {
echo "<a href=\\\"\$paginate_self=\$i$anchor\\\"$target" $format_title . sprintf('>$format', \$i) . '</a>';
}
} else {
if(\$i - \$paginate_current_page < (\$after_offset+1)) {
echo "<a href=\\\"\$paginate_self=\$i$anchor\\\"$target" $format_title . sprintf('>$format', \$i) . '</a>';
}
}
}
}
}
PHP
if ($format_all && $place_all eq 'after') {
4.offset モディファイアの指定
テンプレートに記述している MTPaginateNavigator タグに offset モディファイアを与えれば、前後に表示するページ数を指定できます。
指定しない場合のデフォルト値は2になっているので、前後2ページを表示します。
<MTPaginateNavigator offset="3">
とすれば、表示ページの前後3ページのナビゲーションを表示します。
5.fixed_offset モディファイアの指定
テンプレートに記述している MTPaginateNavigator タグに fixed_offset="1" を与えれば、末端のページでも、offset モディファイアで設定した値になるように表示します。指定しない場合のデフォルト値は 0 です。
<MTPaginateNavigator offset="2" fixed_offset="1">
とすれば、表示中のページにかかわらず、常に5ページのナビゲーションを表示します(ページ分割数が5ページ以下の場合を除く)。
- Movable Type 7のコンテンツデータ(コンテンツタイプアーカイブ)をページ分割する方法
- Movable Typeでブログ記事やウェブページをページ分割する方法
- Movable Typeの「最近のブログ記事」をページ分割する
- PageButeプラグインでページ分割がないときにナビゲーションや(X)HTMLマークアップを表示しない方法
- Movable Typeのダイナミックパブリッシングでのページ分割ナビゲーションの不具合を解消する
- Movable Type 5のダイナミックパブリッシングでのページ分割について
- Movable Type のページ分割でページ番号を title 要素に表示する
- ダイナミックパブリッシングによるページ分割
- コメントのページ分割 for Movable Type 4
- PageBute プラグインによるページ分割
- Movable Type のページ分割によるナビゲーションの前後ページ表示を絞り込む
- アーカイブページのページ分割 for Movable Type 4.1
- メインページのページ分割 for Movable Type 4
- ページ分割の Ajax 化
- 検索結果のページ分割(3.3x 版)
≫ ブログの細かなナビゲーションを改善&アップグレード!【Movable Typeカスタマイズ】 from shoe-g.com 植山周志のぶっ飛びブログ
このブログをちょっと使いやすく、見やすくしようと細かなところをいくつか変更してみ... [続きを読む]
ページ分割の件で質問です。MT4.21を使用しております。
メインページ、アーカイブ(月別)ページ、カテゴリページの分割自体は大分前に導入し、不具合無く動いているのですが、先日googleウェブマスターツールにてtitleタグとDescriptionの重複が出ているのを最近気付き、そちらを修正しようと考えておりました。
具体的には、
<$MTPaginateCurrentPage$>タグを使って、titleタグ内とmetaタグ内Description項目に番号を割り当てようと思っているのですが、どうやっても番号の表示がされません。
<meta name="description" content="hogehoge no.<MTPaginate><$MTPaginateCurrentPage$></MTPaginate>" />
<title>hogehoge <MTPaginate><$MTPaginateCurrentPage$></MTPaginate></title>
こんな感じで指定しているのですが、再構築後アクセスしても数字は表示されず、FTPでソースを確認してみると、タグ挿入していた部分には、
<?php echo $paginate_current_page; ?>
と生成されているので、間違いがあるような感じではないのですが・・・。
ちなみにタグ前後の<MTPaginate>を入れないと再構築エラーになるので入れてますが、他サイトで解説されていたのを見ると、前後にタグを入れず<$MTPaginateCurrentPage$>を入れたらOKという解説もあったりで、いまいちよくわかりません。
参考URL:www.weblaads.info/movablepress/posts/paginate-causes-repetition-of-title-and-description/
もしアドバイスがありましたら何卒宜しくお願いいたします。
>苦戦中さん
こんばんは。
ご質問の件ですが、分かり次第別途エントリー致します。
すいませんが少々お時間ください。
それではよろしくお願い致します。