[2009-03-21-1]
に手動更新でお茶を濁していた「最近追記された記事」で
すが、自動更新するようにしました。
「追記YYYYMMDD:」といったマークをつけて追記すると、左側の「最近追加
された記事」に自動的に表示されます。デフォルトの設定では 5 つ表示し
ます。“YYYYMMDD” は例えば “20090326” です。chalow を更新しないと、
(?日前) は更新されません。
[2009-03-22-3]
の ChangeLogReader.rb で実装しようかなとも考えていま
したが、結局 chalow 本体を修正しました。Perl 初心者なので、変なこと
してたら教えてください。^^;
以下にオリジナル(chalow-1.0.tar.gz)の cl.conf と chalow へのパッチ
を貼り付けておきます。
追記(2009-04-05):
例えば 2009.4.5 に [2009-03-07-1]
と [2009-03-26-1]
に追記を行うと、
後者だけしか「最近追記された記事」の候補に上がらないので chalow へ
のパッチを差し替えました。
また、埋め込む URL を絶対パスから相対パスに変更しました。
追記(2011-07-06):
GitHub に push しました。
--- cl.conf.org 2007-10-19 21:38:22.000000000 +0900
+++ cl.conf 2009-03-26 23:40:41.000000000 +0900
@@ -109,6 +109,10 @@
$latest_titles_num = 10;
# --------------------------------------------------------------------
+# 最近追記された記事(追記YYYYMMDD:)一覧 (JavaScript ファイル) で出力する日数
+$latest_tuiki_num = 5;
+
+# --------------------------------------------------------------------
# カテゴリページを作るか (0:NO, 1:YES)
$output_cat_pages = 0;
@@ -161,6 +165,14 @@
<p/>
<div class="stdbox">
+<table>
+<tr><td>最近追記された記事</td></tr>
+<tr><td><TMPL_VAR name=latest_tuiki_list></td></tr>
+</table>
+</div>
+<p/>
+
+<div class="stdbox">
<table><tr><td>リンク</td></tr><tr><td>
- <a href="http://chalow.org/">chalow</a><br>
- <a href="http://chalow.net/">たつをの ChangeLog</a><br>
--- chalow.org 2007-10-19 23:15:01.000000000 +0900
+++ chalow 2009-04-05 19:26:12.000000000 +0900
@@ -292,6 +292,8 @@
my $output_itemlist = 1;
# 見出し一覧 (JavaScript ファイル) で出力する日数
my $latest_titles_num = 10;
+# 最近追記された記事(追記YYYYMMDD:)一覧 (JavaScript ファイル) で出力する日数
+my $latest_tuiki_num = 5;
# 日ごとにページを作るか (0:NO, 1:YES) --- obsolete
my $day_page_mode = 0;
@@ -375,6 +377,7 @@
$stop_date =~ s/-//g;
my $latest_item_list;
+my $latest_tuiki_list;
my $category_list;
my $clog_url_pref = $clog_url;
@@ -426,6 +429,7 @@
write_rss_file() if ($output_rss); # RSS ファイルを作る
write_itemlist_file() if ($output_itemlist); # 検索用ファイル(itemlist)を作る
write_latest_item_list_file(); # 最近の話題一覧を作る
+write_latest_tuiki_list_file(); # 最近の追記一覧を作る。
write_category_list_file(); # カテゴリ一覧を作る
### HTML 生成のためのループ
@@ -683,6 +687,7 @@
$t->param(ym => $current_ym);
$t->param(day_list => $current_day_list);
$t->param(latest_item_list => $latest_item_list);
+ $t->param(latest_tuiki_list => $latest_tuiki_list);
$t->param(category_list => $category_list);
$t->param(rss_file => $rss_filename); # 050821
$t->param(entries => [grep /^.+$/, @ents[$i*$n...($i+1)*$n-1]]);
@@ -769,6 +774,7 @@
$t->param(month_page_list => $month_page_list);
$t->param(latest_item_list => $latest_item_list);
+ $t->param(latest_tuiki_list => $latest_tuiki_list);
$t->param(category_list => $category_list);
$t->param(back => $ymdi_before);
$t->param(next => $ymdi_after);
@@ -825,6 +831,7 @@
$t->param(day_list => $day_list);
$t->param(month_page_list => $month_page_list);
$t->param(latest_item_list => $latest_item_list);
+ $t->param(latest_tuiki_list => $latest_tuiki_list);
$t->param(category_list => $category_list);
$t->param(rss_file => $rss_filename); # 050821
$t->param(back => $day_before);
@@ -876,6 +883,7 @@
$t->param(day_list => $day_list);
$t->param(month_page_list => $month_page_list);
$t->param(latest_item_list => $latest_item_list);
+ $t->param(latest_tuiki_list => $latest_tuiki_list);
$t->param(category_list => $category_list);
$t->param(rss_file => $rss_filename); # 050821
$t->param(back => $m_before);
@@ -922,6 +930,7 @@
$t->param(day_list => $day_list);
$t->param(month_page_list => $month_page_list);
$t->param(latest_item_list => $latest_item_list);
+ $t->param(latest_tuiki_list => $latest_tuiki_list);
$t->param(category_list => $category_list);
$t->param(rss_file => $rss_filename); # 050821
$t->param(entries => \@top_n_entries);
@@ -1168,6 +1177,61 @@
}
+### JavaScript feed ファイルを出力する
+sub write_latest_tuiki_list_file {
+
+ ### 最近追記された記事
+ my @line_list;
+ my $now_s = time;
+ foreach my $ymd (sort {$b cmp $a} keys %{$cl->{all}}) {
+ my $e = $cl->{all}->{$ymd};
+ foreach my $i (sort {$b <=> $a} keys %$e) {
+ next if ($i !~ /^\d/);
+
+ ### 追記YYYYMMDD:
+ while ($e->{$i}{co} =~ /追記(\d{4})(\d{2})(\d{2}):/g) {
+ my $t_y = $1;
+ my $t_m = $2;
+ my $t_d = $3;
+ my $tuiki_day = $t_y.$t_m.$t_d;
+ my $tuiki_day_s = timelocal(0, 0, 0, $t_d, $t_m - 1, $t_y - 1900);
+ my $before = int(($now_s - $tuiki_day_s) / 86400);
+ push @line_list, "- <a href=\"".
+ datestr2url("$ymd-$i")."\">$ymd-$i</a> ($before日前)<br>";
+ }
+ }
+ }
+
+ my @lines;
+ my $ctr = $latest_tuiki_num;
+ foreach my $line ( sort compare_for_latest_tuiki_list @line_list ) {
+# print "$line\n";
+ push @lines, $line;
+ $ctr--;
+ last if ($ctr <= 0);
+ }
+
+ my $ostr = join("\n", map {s/\'/&\#x27;/g; "document.writeln('".$_."');"}
+ @lines);
+ output_to_file("$outputdir/tuiki.js", \$ostr);
+
+ $latest_tuiki_list = join("\n", @lines);
+
+}
+
+sub compare_for_latest_tuiki_list {
+ my $a2 = $a;
+ $a2 =~ s/.+\(//;
+ $a2 =~ s/日前\).+//;
+
+ my $b2 = $b;
+ $b2 =~ s/.+\(//;
+ $b2 =~ s/日前\).+//;
+
+ $a2 <=> $b2;
+}
+
+
sub write_category_list_file {
### カテゴリ一覧
# return if ($output_cat_pages == 0 or $cat_page_cgi eq "");