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

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

Posted at October 26,2010 2:22 AM
Tag:[CharsetEncoder, MovableType, PageBute, Plugin]

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

1.はじめに

MTで出力するページの文字コードはUTF-8ですが、mt-config.cgiに環境変数「PublishCharset」を設定することで、他の文字コードで出力することも可能です(注:MT5以降はUTF-8のみサポート)。

ただしPageButeプラグインを使った分割ページでは、この環境変数の設定が反映されないようです。

ということで、分割したページの文字コードを変更する方法を紹介します。

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

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

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

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

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

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

2.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行目付近)にありますが、こちらには修正を加えないでください。

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

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

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

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

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

PageButeとCharsetEncoderの連携イメージ

2014.03.09
本文を修正しました。

関連記事
トラックバック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;」となります(全て半角文字)