TopMovable Typeプラグインコールバック > PageButeプラグインで分割したページの文字コードを変更する方法
2010年10月26日

PageButeプラグインで分割したページの文字コードを変更する方法

Posted at October 26,2010 2:22 AM
Category:[コールバック]
Tag:[, , , ]

Movable Typeで人気の静的ページ分割プラグイン「PageBute」で、分割したページの文字コードを変更する方法を紹介します。

次の画面は、PageButeプラグインでページ分割したページ(左下にページ送りのナビゲーションあり)の文字エンコーディングが「Shift_JIS」になっていることを示したものです。

PageButeプラグインでページ分割したページ

文字コードを変更する方法は次の通りです。文字コードはブログ(ウェブサイト)またはテンプレート単位に変更することができます。

  • 当サイトで配布中のCharsetEncoderプラグインと組み合わせる
  • PageButeプラグインとCharsetEncoderプラグインを連携させるために、PageButeプラグインファイルに1行だけコードを追加する

ページ分割しないテンプレートもCharsetEncoderプラグインの動作にしたがって文字コードを変更することができます。

修正を行った後、両プラグインの依存関係はないので、いずれかのプラグインを後で無効にしても問題なく動作します。

1.PageButeプラグインの修正

PageBute.pl を任意のエディタで開き、_page_buteという関数の最後の方に、青色で示す1行を追加します。

sub _page_bute {
    my ($cb, %opt) = @_;
    my $ctx = $opt{Context};
    my $pb = $ctx->stash('PageBute');
    return 1 unless($pb);
    …中略…
    for (my $i=0; $i < $#entries; $i++) {
        $output_page_contents .= $entries[$i];
 
        if( ($i + 1) % $split_count == 0 || $i == $#entries - 1) {
        …中略…
            #replace page lists
            if (!$next && !$before && $pb->{show_always} == 0) {
                $output =~ s/\Q$garbage{PageLists}\E//g;
            }
            else {
                $output =~ s/\Q$garbage{PageLists}\E/$page_lists/g;
            }
            MT->run_callbacks('page_bute', \$output, %opt);
            $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;
}

PageButeのバージョンが3.4.2であれば259行目あたりです。他のバージョンでも赤色で示した「put_data」という行の直前に追加すれば対応できます。

なお、「put_data」という行は_repage_buteという関数の中(バージョン3.4.2であれば287行目付近)にありますが、こちらには修正を加えないでください。

2.CharsetEncoderプラグインのインストール

CharsetEncoderプラグイン」のページからCharsetEncoderプラグインv0.11以降のバージョンをダウンロード・インストールしてください。

これでCharsetEncoderプラグインのプラグイン設定画面、またはテンプレート設定画面に表示された文字コードを指定して再構築を行えば、指定した文字コードでページが出力されます。

3.PageButeとCharsetEncoderの連携イメージ

参考までに、PageButeとCharsetEncoderの連携イメージを掲載しておきます。PageBute.plに独自のフックポイントを追加して、CharsetEncoderからそのフックポイントを利用するようにしています。

PageButeとCharsetEncoderの連携イメージ

Posted by yujiro   このページの先頭に戻る
関連記事
この記事を読んだ人はこんな記事も読んでいます
人気エントリー
Hatena Hot Entries
Hatena Entries
トラックバックURL


コメント

またまた、ありがとうございます!Buteの方の調整までご教授頂き、感謝に堪えません。
ケータイ向けページのテンプレートの文字コード変換と、ページ分割における文字化けが一気に解消できました。
PHPのスクリプトを使わずに済むので、再構築やページ表示が大幅にスピードアップしました。

[1] Posted by まつざき : October 26, 2010 3:27 PM

>まつざきさん
こんばんは。
ご連絡ありがとうございました。
お役に立てたようでよかったです。
ではでは!

[2] Posted by yujiro logo : October 27, 2010 1:25 AM
コメントする
greeting

*必須

*必須(非表示)


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

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

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

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

Now loading...
Introduction
Entries of this Category
Recent Entries
Recent Comments
Recent Trackbacks
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

loading ...
Categories
Monthly Archives
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 5.12