画像でエントリー・アーカイブをページ分割する

画像でエントリー・アーカイブをページ分割する

Posted at June 1,2006 2:15 AM
Tag:[Customize, Entry, MovableType, MTPaginate, Plugin]

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 ではカラー表示のままですが下線表示に切り替わります。なお設定の都合上、リンクとテキスト表示が判断できなくなりますので予めご容赦ください。

関連記事
トラックバックURL


トラックバック

ページの分割 from akemi's カスタマイズ
MTPaginate 1.26 小粋空間 http://www.koikiku... [続きを読む]

Tracked on December 16, 2006 4:40 PM
コメント

いつもお世話になております。メインページ分割の件なんですが、ずっと記事を書き込んでいくとその分、分割の数字列挙もずっと並んでいくのですがその場合、どのようにされているのでしょうか? いつも見てるといつのまにか1からになってますがどのようにされているのでしょうか? お手数ですが教えて下さい
宜しくお願いします。

[1] Posted by panser : June 1, 2006 2:48 AM

>panserさん
こんにちは。
ご質問の件ですが、トップページのページ分割の5.1項が参考になれば幸いです。
それではよろしくお願い致します。

[2] Posted by yujiro : June 2, 2006 12:30 PM

こんばんは、おひさしぶりです。
以前HTMLタグの記述のみでページ分割はできないでしょうか?と
質問させて頂いたアベです。
パッチの当て方を参考に早速試させていただいたら
バッチリやりたかった通りの結果が得られました。
本当にどうもありがとうございました!

[3] Posted by アベ : June 26, 2006 10:33 PM

>アベさん
こんばんは。
ご連絡ありがとうございました。
うまく設定できたようで良かったです。
ではでは!

[4] Posted by yujiro : June 26, 2006 11:10 PM

お聞きしたい事がありますー。

こちらの「画像でエントリー・アーカイブをページ分割する」方法は
MTPaginate 1.28でも可能でしょうか?

このエントリーではMTPaginate.plのコードを編集すると書かれていますが、1.28だと/lib/MTPaginate.pmになっているようです。

/lib/MTPaginate.pmを編集すれば同じ効果が得られますでしょうか?

[5] Posted by Akiko : May 5, 2008 5:59 PM

>Akikoさん
こんばんは。
ご質問の件ですが、可能だと思います。ファイルはおっしゃるとおり、MTPaginate.pmに変わっています。
失敗してもMovable Typeのデータが壊れるわけではないので、チャレンジしてみてください。
ではでは!

[6] Posted by yujiro logo : May 8, 2008 6:57 PM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)