画像でエントリー・アーカイブをページ分割する
Movable Type でページ分割用プラグイン MTPaginate を用い、エントリーアーカイブを画像(およびテキスト)で分割するカスタマイズです。
下記のように img 要素だけを記述したエントリーで、パラグラフ(p)要素でページ分割をする場合、MTPaginate をそのまま利用すると分割されず、全て同じページに表示されます(空行部分、つまり img 要素の前後には Movable Type の機能で自動的に p 要素が付与されます)。
<img src="http://yourhost/path/hoge1.jpg" alt="hoge1" />
<img src="http://yourhost/path/hoge2.jpg" alt="hoge2" />
<img src="http://yourhost/path/hoge3.jpg" alt="hoge3" />
これは、ページ分割のセクションサイズ等の計算をHTMLタグを除いたテキストだけで行うためです。
ということで、プラグインソースを改変し、img 要素等のHTMLタグでページ分割する方法を紹介します。
下記に改変内容を記します。なおエントリーアーカイブのページ分割の基本的な設定が完了していることが前提です。設定方法については、エントリーアーカイブのページ分割を参照ください。
また、ここではパラグラフ要素をセパレータとした動作のみ確認しています(下記の設定)。
section_start_tag="p"
これ以外の要素や、他のオプションによる分割については動作を確認しておりませんので予めご容赦ください。
1.プラグインの修正
MTPaginate.pl に下記のパッチを適用します。プラグインファイルのTAB文字は半角空白4文字に予め置き換えてください。
--- MTPaginate.pl.bak Fri May 19 13:14:15 2006
+++ MTPaginate.pl Fri May 19 13:20:44 2006
@@ -146,7 +146,7 @@
} elsif($pg->{max_bytes}) {
$sectionSize = length($stripped_section);
} else {
- my @words = split /[\s]+/, remove_html($stripped_section);
+ my @words = split /[\s]+/, $stripped_section;
$sectionSize = scalar(@words);
}
@@ -156,12 +156,12 @@
my $sz = length($p);
my @words = split /[\s]+/, remove_html($p);
my $words = scalar(@words);
- $pageCount++;
$debugContent .= "<div style=\"background: yellow; margin-left: -10px; margin-right: -10px; padding: 5px 10px 5px 10px\"><b>Page $pageCount</b>, $pageSectionCount sections
, $words words, $sz bytes</div>" . $debugPage;
$debugPage = '';
$pageSectionCount = 0;
}
- push @pages, $page;
+ push @pages, $page if $pageCount;
+ $pageCount++;
$count = 0;
$page = [];
}
パッチのあてかたが分からない方は、下記のリストを参照して、赤色を削除し、青色を追加してください。*1
:
} elsif($pg->{max_bytes}) {
$sectionSize = length($stripped_section);
} else {
my @words = split /[\s]+/, remove_html($stripped_section);
my @words = split /[\s]+/, $stripped_section;
$sectionSize = scalar(@words);
}
:
(中略)
:
my $sz = length($p);
my @words = split /[\s]+/, remove_html($p);
my $words = scalar(@words);
$pageCount++;
$debugContent .= "<div style=\"background: yellow; margin-left: -10px; margin-right: -10px; padding: 5px 10px 5px 10px\"><b>Page $pageCount</b>, $pageSectionCount sections
ytes</div>" . $debugPage;
$debugPage = '';
$pageSectionCount = 0;
}
push @pages, $page;
push @pages, $page if $pageCount;
$pageCount++;
$count = 0;
$page = [];
}
:
2.プラグインのアップロード
修正した MTPaginate.pl を元のディレクトリにアップロードします。
以上です。
*1:色覚障害等で色が識別できない場合は、サイト右上の「Styles」メニューにある Gray Scale をクリックしてください。IEではグレースケール表示され、青色部分が下線表示、赤色部分が二重下線で表示されます。Firefox/Opera ではカラー表示のままですが下線表示に切り替わります。なお設定の都合上、リンクとテキスト表示が判断できなくなりますので予めご容赦ください。
- 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 化
いつもお世話になております。メインページ分割の件なんですが、ずっと記事を書き込んでいくとその分、分割の数字列挙もずっと並んでいくのですがその場合、どのようにされているのでしょうか? いつも見てるといつのまにか1からになってますがどのようにされているのでしょうか? お手数ですが教えて下さい
宜しくお願いします。
>panserさん
こんにちは。
ご質問の件ですが、トップページのページ分割の5.1項が参考になれば幸いです。
それではよろしくお願い致します。
こんばんは、おひさしぶりです。
以前HTMLタグの記述のみでページ分割はできないでしょうか?と
質問させて頂いたアベです。
パッチの当て方を参考に早速試させていただいたら
バッチリやりたかった通りの結果が得られました。
本当にどうもありがとうございました!
>アベさん
こんばんは。
ご連絡ありがとうございました。
うまく設定できたようで良かったです。
ではでは!
お聞きしたい事がありますー。
こちらの「画像でエントリー・アーカイブをページ分割する」方法は
MTPaginate 1.28でも可能でしょうか?
このエントリーではMTPaginate.plのコードを編集すると書かれていますが、1.28だと/lib/MTPaginate.pmになっているようです。
/lib/MTPaginate.pmを編集すれば同じ効果が得られますでしょうか?
>Akikoさん
こんばんは。
ご質問の件ですが、可能だと思います。ファイルはおっしゃるとおり、MTPaginate.pmに変わっています。
失敗してもMovable Typeのデータが壊れるわけではないので、チャレンジしてみてください。
ではでは!