chariot

App::Chariot入れた  [perl]  [chariot]  [日記]

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;

Text::Hatenaのsuper_pre改変  [perl]  [chariot]

super_preとpreが同じ処理になっているので、(&")等を変換するように改変

App::Chariot改変Todoリスト  [todo]  [perl]  [chariot]

  • Done: タグ別アーカイブ
  • Monthly, Daily アーカイブ
  • コメント、トラックバック、RSS Ping。。。
    やっぱりオンライン系がいるなぁ

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

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

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

テンプレート内に日本語を書くと文字化けする。

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