いろんなテンプレートをインクルードしまくったせいか生成されるHTMLが非常に汚かったので、HTML::Tidy
を使って整形してみた。
HTML::Tidy
のインストール
これは前の記事を参照。
【MovableType】Tidy を使って HTML を整形するプラグイン | blog.delphinus.dev
https://blog.delphinus.dev/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が出力されているはずだ。当たり前ではあるが、整形しないときに比べればサーバへの負荷は増している。本番環境ではコードを取り去ってしまおう。
-
これはCentOS 5.4で試したときの場合。最新版の
HTML::Tidy 1.50
はインストールできなかったので、バージョン1.08をインストールしている。 ↩