App::Chariot改変  [perl]  [chariot]

タグ別アーカイブに対応した。(但し、複数タグの絞込みはできない。)

複数タグでの絞り込みは、オンラインアーキテクチャじゃないと厳しそうなので。。


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というモジュールを追加するやり方にした。

きっと、もっと「モダン」なやり方があるのだろうけど、とりあえずこれで対処。