網頁

2008年10月16日 星期四

calendar in oddmuse

oddmuse 升級後,習慣用的小日曆也改版了。把舊的 source code 及圖貼在這兒,留個紀念!


舊版的日曆是利用 unix 系統中的 /usr/bin/cal 產生,所以在 windows 系統使用很不方便。
不存在的網頁,在日期的右下角會有一個小點。點下去就可以編輯。有日誌存在的日期就不會有這個小點,日期可以直接連節。



這是 /usr/bin/cal 產生的日曆,你看像不像。



新版的日曆是利用 perl 產生,不再依頼 /usr/bin/cal,安裝也改成 modules,更便利。
不論網頁存不存在都沒有小點,差別是不存的頁面會連節到 edit。存在的頁面和今日的連節可以利用 css 設定顏色,如這兒我存在網頁就設成黑灰底白字,今日的部分不存在時會是紅底白字,存在時會是橘底白字。你發現了嗎?





source code (貼 source code 也是很講究的,參考 Format My Source Code for Blogging)
######################################################################
#the code is GPL
# it's based on: (rip the CGI and SSI function, adds link to date...)
######################################################################
# Basic Calendar Version 1.01 #
# Copyright 1999 Frederic TYNDIUK (FTLS) All Rights Reserved. #
# E-Mail: tyndiuk@ftls.org Script License: GPL #
# Created 05/30/99 Last Modified 07/15/99 #
# Scripts Archive at: http://www.ftls.org/cgi/ #

# sets home page to current date
$ts=time;
($sec, $min, $hour, $mday, $mon, $year) = gmtime($ts);
$TODAY=sprintf('%4d-%02d-%02d',$year+1900, $mon+1, $mday);

#this part is the modified Basic Calendar script
$CalCMD = "/usr/bin/cal"; # En: PATH of cal.
$Border = 0; # En: Size of table Border.
$Days = "Su Mo Tu We Th Fr Sa"; # En: Days

# Nothing Below this line needs to be altered! #
######################################################################
# En: Sub routine return calendar.
sub RetCal {
my($CalCMD, $Border, $year, $month, $Today) = @_;
my($ret, @Result, $Month, $dy, $line, $no, $Args);
if ( -x "$CalCMD" ) {
$Args =sprintf('%02d %04d', $month,$year);
open(CAL, "$CalCMD $Args|");
@Result = <CAL>;
close(CAL);

$Month = $Result[0]; shift(@Result);
$Month =~ s/\s\s\s*//g;
$ret = "<TABLE Border=\"$Border\"><font size=-2>$Month</font><TR>";

shift(@Result);
foreach $dy (split(/ /, $Days)) {
$ret .= "<TH><font size=-2>$dy</font></TH>";
}
$ret .= "</TR>\n";

foreach $line (@Result) {
$line =~ s/\n//;
$line =~ s/ /ccs/g;
$line =~ s/ /sc/g;
$line =~ s/ /s/g;
$line =~ s/^s//g;
$line =~ s/ss/s/g;
$line =~ s/c//g;
$ret .= "<TR>";
foreach $no (split(/s/, $line)) {
$ret.="<TD>";
if ($no) {
$ret .= GetPageOrEditLinkSpecial(sprintf('%4d-%02d-%02d',$year, $month, $no),"$no");
} else {
$ret.= " ";
}
$ret.="</TD>";
}
$ret .= "</TR>\n";
}
$ret .= "</TABLE>\n";
} else {
$ret = "Cannot find cal on this system.";
}
return $ret;
}

沒有留言: