#!/usr/bin/perl -w # # sb::Plugin::TopicPath - Module for sb # == written by orzmaru === # == Copyright (C) 2005 ぼりろ(Bolero) == # # 履歴 # [2006.02.05] 作った # [2006.09.01] アーカイブ表示をテンプレートの表記に揃えた package sb::Plugin::TopicPath; # ================================================== # // initialization for plugin # ================================================== use sb::Plugin (); # プラグインの登録' sb::Plugin->register_plugin( 'lang' => { 'ja' => 'euc', 'en' => 'ascii', }, 'text' => { 'type' => 'cms', 'name' => 'TopicPath', 'text' => '{topic_path} displays where you are.', 'author' => 'orzmaru', 'detail' => 'http://gonta.pepper.jp/bolero/', 'version' => '0.02', }, 'file' => undef, 'data' => undef, ); # cms用プラグインとして登録 sb::Plugin->register_content_module( 'type' => 'main', 'callback' => \&sb::Content::TopicPath::_topic_path, 'field' => 'topic_path', 'name' => 'topic_path', ); package sb::Content::TopicPath; # ================================================== # // declaration for constant value # ================================================== sub NAVI_ARROW {' > '}; # ================================================== # // functions for content # ================================================== use sb::Text (); use sb::Time (); use sb::Data (); sub _topic_path{ my $cms = shift; my %var = @_; my $lang = sb::Language->get; return(0) unless ($var{'mode'} ne 'page' or $var{'page'} !=0); return(0) if($var{'mode'} eq 'user'); # 検索の時 if($var{'mode'} eq 'srch' and $var{'cond'} ne ''){ my $result = 'Search: 「%s」 '.$var{'entry_num'}.'件ヒットしました。'; $cms->num(0); $cms->tag('topic_path'=>sprintf($lang->convert($result,$lang->charcode),$var{'cond'})); return (1); } # アーカイブの時 if($var{'mode'} eq 'arc'){ my ($year,$mon,$day) = ( $var{'cond'} =~ /(\d\d\d\d)(\d\d)(\d\d)?/ ); my $date = ($day == 0) ? sb::Time->convert('year' => $year,'mon' => $mon,) : sb::Time->convert('year' => $year,'mon' => $mon,'day' => $day,); $date = sb::Time->format('time'=>$date, 'form'=>$var{'conf'}->value('conf_archivelist'), 'lang'=>$var{'conf'}->value('conf_time_lang')); $cms->num(0); $cms->tag('topic_path'=>"Archives: $date"); return (1); } # 個別モードの時 my $catid = ($var{'mode'} eq 'ent') ? $var{'entry'}[0]->cat : $var{'id'}; my $catlist = {sb::Data->load_as_hash('Category')}; my $navi = ''; my $site_cgi = $var{'conf'}->value('conf_srv_cgi') . $var{'conf'}->value('basic_sb'); my $navi = &_category_navi( 'cat' => $catlist, 'id' => $catid, 'tag' => '%s', ); $cms->num(0); $cms->tag('topic_path'=>$navi); return (1); } sub _category_navi{ # Admin.pm から抜き出し my %param = ( 'cat'=> '', 'id' => undef, 'tag' => '', 'now' => undef, @_ ); if ( $param{'cat'}->{$param{'id'}}->main eq '') { return(sprintf($param{'tag'},$param{'id'},$param{'cat'}->{$param{'id'}}->name)); } else { my $navi = &_category_navi( 'cat' => $param{'cat'}, 'id' => $param{'cat'}->{$param{'id'}}->main, 'tag' => $param{'tag'}, 'now' => $param{'now'}, ); $navi .= NAVI_ARROW if ($navi); return($navi . sprintf($param{'tag'},$param{'id'},$param{'cat'}->{$param{'id'}}->name)); } } 1; __END__ # カテゴリを無名ハッシュで読み出す # my $catlist = {sb::Data->load_as_hash('Category')}; # # 読み出し例:カテゴリid が $id のカテゴリの親カテゴリid # $catlist->{$id}->main; # # #my @mStruct = ( #'id', # id #'wid', # wid #'name', # 名前 #'text', # 説明 #'url', # トラックバック送信先 #'main', # 親カテゴリ #'order', # 並び順 #'temp', # テンプレート id #'dir', # 保存先 #'disp', # 表示設定 #'sub', # 子カテゴリ #'num', # 記事数 #'idx', # カテゴリインデックス #);