人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【最大4000ポイント進呈】MovableTypeのページ分割についてです。
的確な答えが無かったので、
再質問させていただきます。

カテゴリーページを分割しようと考えています。
条件として、
1.静的に書き出すことが出来る。
2.htmlのタイトルにページ数を表示することが出来る。


MTPaginateだと、PHP化で静的のHTMLになりませんが
<$MTPaginateCurrentPage>というタグを使用すれば、
タイトルにページ数を入れられる。

Paged Archives Plugin、PageButeだと静的ですが、
ページごとにタイトルを変更することが出来ない。


MTPaginate、Paged Archives Plugin、PageBute
という3種類以外にページを静的に分割できて、
なおかつタイトルにページ数を表示できるプラグインはありますでしょうか?

また、今使用させていただこうと考えているのは
PageButeですが、
ちょっとしたカスタマイズで、
ページの番号をタイトルに入れることが
出来るなどありましたら、
どうぞよろしくお願いいたします。

●質問者: ohtsu6
●カテゴリ:インターネット ウェブ制作
✍キーワード:HTML MovableType PHP いただきます カスタマイズ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Mook
●4000ポイント ベストアンサー

これまで MT に触ったことはなかったのですが、興味深い質問でしたのでこれを機会に使ってみました。

結果だけ見るとたったの一行なのですが、ここにたどり着くまで丸1日かかりました。


PageBute.pl の変更範囲で対応を考えたのですが、私の知識の範囲ではこの中でタイトル単体を制御すること

ができませんでした。そのため、タイトルに使用されているタグを目安にこれを置換する方法で処理をしました。

なので、今回の方法はあまり汎用性がありませんし、場合によっては使用できない可能性もあります。


前置きはこのくらいにして、実際の方法です。

PageBute.pl の _page_bute 関数部分を下記のように変更して保存後、対象の部分を再構築してみてください。

sub _page_bute {
 my ($cb, %opt) = @_;

 my $ctx = $opt{Context};
 my $pb = $ctx->stash('PageBute');
 return 1 unless($pb);

 #Get file information
 my ($filename, $file_ext);
 my $file = $opt{File};
 my $blog = $ctx->stash('blog');
 my $site_url = $blog->{column_values}->{site_url};
 $site_url = $site_url . '/' unless ($site_url =~ /\/$/);
 my $site_path = $blog->{column_values}->{site_path};
 $site_path = $site_path . "/" unless ($site_path =~ /\/$/);
 my $file_path = substr($file, length($site_path));

 if ( $file_path =~ /^[\/\\]?(.*)\.(.*?)$/ ) {
 $filename = $1;
 $file_ext = $2;
 } else {
 $filename = $file_path;
 $file_ext = '';
 }

 my $contents = $opt{Content};
 my $split_count = $pb->{count};
 my $delim = $pb->{page_delim};
 my @entries = split(/$garbage{Separator}/, $pb->{contents});
 my $page_limit = ceil( $#entries / $split_count );
 
 my $page_count = 1;
 my $output_page_contents = '';

 my $fmgr = $blog->file_mgr;

 for (my $i=0; $i < $#entries; $i++) {
 $output_page_contents .= $entries[$i];
 if( ($i + 1) % $split_count == 0 || $i == $#entries - 1) {

 $file = $page_count == 1 ? $file : "${site_path}${filename}_${page_count}.${file_ext}";
 my $output = $$contents;
#-----------------------------------------------------------------
# Page 付加処理 : "</a></h1>" を検索してその前にページ情報を追加
#-----------------------------------------------------------------
 $output =~ s/<\/a><\/h1>/ [$page_count\/$page_limit]<\/a><\/h1>/g;
#-----------------------------------------------------------------
 $output =~ s/$garbage{Contents}/$output_page_contents/g;
 my $lists = &_create_lists($page_count, $page_limit);
 my $before = $lists->{before} ? &_create_link($page_count - 1, $site_url . $filename, $file_ext, $pb->{before_delim}) : '';
 my $next = $lists->{next} ? &_create_link($page_count + 1, $site_url . $filename, $file_ext, $pb->{next_delim}) : '';
 my $page_lists = '';
 for (my $i = $lists->{min_page}; $i <= $lists->{max_page}; $i++) {
 $page_lists .= $i == $lists->{min_page} ? '' : $delim;
 $page_lists .= $i == $page_count ? $page_count : &_create_link($i, $site_url . $filename, $file_ext, $i);
 }

 #replace before link
 if ($before) {
 $output =~ s/$garbage{IfPageBefore}//g;
 $output =~ s/$garbage{BeforeLink}/$before/g;
 } else {
 $output =~ s/$garbage{IfPageBefore}.*$garbage{IfPageBefore}//g;
 }
 #replace next link
 if ($next) {
 $output =~ s/$garbage{IfPageNext}//g;
 $output =~ s/$garbage{NextLink}/$next/g;
 } else {
 $output =~ s/$garbage{IfPageNext}.*$garbage{IfPageNext}//g;
 }
 #replace page lists
 $output =~ s/$garbage{PageLists}/$page_lists/g;
 $fmgr->put_data($output,"${file}.new");
 $fmgr->rename("${file}.new",$file);

 if($page_count == 1) {
 $ctx->stash('FirstContents', $output);
 $ctx->stash('FirstFileName', $file);
 }

 $output_page_contents = '';
 $page_count++;
 }
 }
 $ctx->stash('PageBute', 0);
 1;
}

今回のケースではタイトルは

<h1><a ?>タイトル</a></h1>

となっていることを想定していますが、ここがお使いのテンプレートで異なっている場合はタイトルに使われている

タグに合わせて変更ください。


不明な点はコメントで対応しますので、コメントを有効にしてください。

http://pulltab.info/2007/12/13101208.html




変更量はたいしたことないのですが、今回は結構苦労しました。

もしお役に立ったのであれば、いるか賞を頂けると幸いです。

◎質問者からの返答

mookさま

どうもありがとうございます。

出来ました。

ついでに質問させてください。

[$page_count]としましてページ番号だけを

表示するようにさせていただきました。

その際に、たとえば1ページ目の表示の場合、

[1]では無くて1ページと表示するようにしたいです。

これって簡単に出来ますでしょうか?

どうぞよろしくお願いいたします。


2 ● falcon2
●35ポイント

カテゴリーのプラグインについては過去質にあり

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ