Home > catalyst > | perl > 【Catalyst】HTML::Tidyを使って出力を整形する

【Catalyst】HTML::Tidyを使って出力を整形する

いろんなテンプレートをインクルードしまくったせいか生成されるHTMLが非常に汚かったので、HTML::Tidyを使って整形してみた。

HTML::Tidyのインストール

これは前の記事を参照。

【MovableType】Tidy を使って HTML を整形するプラグイン
http://blog.remora.cx/2010/03/tiding-movabletype.html

簡単に手順だけ書いておく *1

$ sudo yum install tidy libtidy libtidy-devel
$ sudo cpan -i P/PE/PETDANCE/HTML-Tidy-1.08.tar.gz

HTML::Tidyを扱うModelを追加する

以前TheSchwartzをModel化したときと同じく、Catalyst::Model::Adaptorを使う。

$ cd MyApp/script
$ ./myapp_create.pl Model Tidy Adaptor HTML::Tidy

これでMyApp/lib/MyApp/Model/Tidy.pmが作成される。

設定ファイルを書く

アプリケーションの設定ファイルにどのような整形を行うか記述する。

$ vim MyApp/myapp.yml
# 途中省略
Model::Tidy:
    class: "HTML::Tidy"
    constructor: "new"
    args:
        indent: yes
        indent_attributes: yes
        wrap: 80
        break_before_br: yes
        replace_color: yes

ハイライトした部分がTidyのオプションだ。他にどんなオプションがあるのかは以下参照。

HTML Tidy Configuration Options Quick Reference
http://tidy.sourceforge.net./docs/quickref.html

endアクションに細工する

後はCatalyst側で出力時にHTMLを整形するよう書き換える。通常ではRoot.pmの中身は以下のようになっていると思うが、

sub end : ActionClass('RenderView') {}

これを以下のように書き換える。

sub render : ActionClass( "RenderView" ) { }
sub end : Private { my ( $self, $c ) = @_;
    $c->forward( "render" );
    if ( $c->res->content_type =~ /html/ ) {
        my $body = $c->res->body;
        $c->res->body( $c->model( "Tidy" )->clean( $body ) );
    }
}

完了

これで完了。アプリケーションを再起動すれば整形されたHTMLが出力されているはずだ。当たり前ではあるが、整形しないときに比べればサーバへの負荷は増している。本番環境ではコードを取り去ってしまおう。

*1 : これはCentOS 5.4で試したときの場合。最新版のHTML::Tidy 1.50はインストールできなかったので、バージョン1.08をインストールしている。

Comments:0

Comment Form

Trackbacks:0

TrackBack URL for this entry
http://blog.remora.cx/mt/mt-tb.fcgi/156
Listed below are links to weblogs that reference
【Catalyst】HTML::Tidyを使って出力を整形する from blog.remora.cx

Home > catalyst > | perl > 【Catalyst】HTML::Tidyを使って出力を整形する

Feeds
CC Licence

Creative Commons License

このブログはクリエイティブ・コモンズでライセンスされています。

W3C Validation

I ♥ validator

Return to page top