タグ別アーカイブに対応した。(但し、複数タグの絞込みはできない。)
複数タグでの絞り込みは、オンラインアーキテクチャじゃないと厳しそうなので。。
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というモジュールを追加するやり方にした。
きっと、もっと「モダン」なやり方があるのだろうけど、とりあえずこれで対処。
ツイート