テンプレート内に日本語を書くと文字化けする。
utf-8がTemplateで読まれるときのフラグの関係だと思われる。
いろいろ調べてTemplate::Provider::Encodingという、かの有名なmiyagawaさんのモジュールを使えば良いことがわかった。
Index: Chariot.pm
===================================================================
--- Chariot.pm (revision 13330)
+++ Chariot.pm (working copy)
@@ -7,6 +7,7 @@
use YAML;
use App::Chariot::Config;
use Template;
+use Template::Provider::Encoding;
use File::Spec;
use XML::RSS;
use Scalar::Util;
@@ -55,9 +56,11 @@
my $self = shift;
Template->new(
{
+ LOAD_TEMPLATES => [ Template::Provider::Encoding -> new({
INCLUDE_PATH =>
File::Spec->catfile( $self->config->assets_dir, 'tmpl' ),
ABSOLUTE => 1,
+ })]
}
);
}
実は、このサイトがずっと英語メニューだったのはこのためだったのだ。:-p
タグ別アーカイブに対応した。(但し、複数タグの絞込みはできない。)
複数タグでの絞り込みは、オンラインアーキテクチャじゃないと厳しそうなので。。
package App::Chariot::C::TagIndex;
use Moose;
with 'App::Chariot::Role::C';
sub create {
my ($self, $c) = @_;
my $ifile = File::Spec->catfile($c->config->assets_dir, 'tmpl', 'tagindex.tt');
my %tags = ();
for my $entry (@{$c->dat->list}) {
for my $item (reverse @{$entry->items->list}) {
for my $t (@{$item->tags}){
$tags{$t} = [] unless $tags{$t};
unshift(@{$tags{$t}},$item);
}
}
}
for my $t (keys %tags){
my $cnt =1;
my @list = @{$tags{$t}};
my $ofile = File::Spec->catfile($c->config->output_dir, "$t.html");
$c->render(
$ifile => $ofile, {
tag => "[$t]",
items => [@list],
},
);
}
}
1;
App::Chariotのコントローラ群にApp::Chariot::C::TagIndexというモジュールを追加するやり方にした。
きっと、もっと「モダン」なやり方があるのだろうけど、とりあえずこれで対処。
- Done: タグ別アーカイブ
- Monthly, Daily アーカイブ
- コメント、トラックバック、RSS Ping。。。
やっぱりオンライン系がいるなぁ
super_preとpreが同じ処理になっているので、(&")等を変換するように改変
tokuhiromさんのApp::Chariotという簡易ブログツールを入れた。
モダンなPerlということで、かなりすっきりしたソースでわかりやすい。
これから勉強。とりあえず、以下の変更をした。
-*pでプライベートとなるようにData::Clmemo::Itemを改変
-タイトルにPerlモジュール名(::)が入っても処理できるようにData::Clmemo::Itemを改変
Index: Item.pm
===================================================================
--- Item.pm (revision 13612)
+++ Item.pm (working copy)
@@ -8,7 +8,7 @@
sub parse {
my ($class, @lines) = @_;
- my ($title, $tag, $body) = (shift @lines) =~ /\*(.*?)(\[.*\])?:(.*)/;
+ my ($title, $tag, $body) = (shift @lines) =~ /\*([^p][^[]*)(\[.*\])?:(.*)/;
return unless $title;
$title =~ s/(^\s*|\s*$)//g;