sb::Admin::AccessLog の改造

Serene Bach のアクセスログの表示が前々から気に食わなかったから改造した.

AccessLog.pm 改造前AccessLog.pm 改造後

「ページ別集計」 で一番見たいのは URI の末尾の方だろうがよ, てことで. これまではリンク文字列上にマウスカーソルを持っていって見る必要があって, そのちょっとした手間が面倒臭かった.

修正したのは plugin/AccessLog.pm で定義されているメソッド sb::Admin::AccessLog::_display_elements. 本当は これを直接書き換えずにオーバーライドと言っていいのか ? するようなプラグインを作る事で対処したくて試行錯誤したんだけど, 諦めた. たった 1 行の変更のためにオーバーライドするのは大袈裟のようにも思えてきたし.


sub _display_elements {
    my $self = shift;
    my %param = (
        'mode'   => undef,
        'length' => LOG_MAXLENGTH,
        'text'   => undef,
        @_
    );
    $param{'length'} = LOG_MAXLEN_AGNT if ($param{'mode'} eq 'agnt');
    my $flag = (length($param{'text'}) > $param{'length'});
    my $attr = $flag ? ' title="' . $param{'text'} . '"' : '';
    # Modified here.
#   my $text = $flag ? sb::Text->clip('text'=>$param{'text'},'length'=>$param{'length'}) : $param{'text'};
    my $text = $flag ? sb::Text->clip('text'=>$param{'text'},'length'=>$param{'length'},'fromend'=>($param{'mode'} eq 'page')) : $param{'text'};
    if ($param{'mode'} ne 'host' and $param{'mode'} ne 'agnt') {
        $attr .= ' target="_blank"';
        return sprintf('<a href="%s"%s>%s</a>',$param{'text'},$attr,$text);
    } else {
        return sprintf('<span%s>%s</span>',$attr,$text);
    }
}

因みに, sb::Admin::YetAnotherAccessLogsb::Admin::AccessLog を継承してるんで, そのページ別集計も上の改造後の画像と同様に表示される.