石头兔的城堡 » 日志 » 再说存档列表脚本代码(完整版)
再说存档列表脚本代码(完整版)
石头兔 发表于 2006-04-20 12:07:13
这次是完整版。整理、写注释倒没费多少功夫,只是给代码着色花了点儿时间。
并没有使用什么代码着色器,完全手工着色。不过,有正则表达式帮忙,倒也不是很麻烦。
可参照原来的那篇《歪酷的存档列表脚本》一块儿看。
此文假定你已经熟悉html,并对javascript有所了解。
如果看不懂,请自己查阅相关的资料。
以下代码可自由使用,修改,但请注明原作者及出处。
代码说明:
<script type="text/javascript">
<!--
//取得当前的年份,使用的是歪酷提供的日历中的参数。
//当然,也可以使用Javascript的Date对象的函数取得。
var current_year = { calendar.year };//大括号内的空格去掉
//取得当前的月份,说明同上
var current_month = { calendar.month };//大括号内的空格去掉
//取得当天的日期
//使用Javascript的Date对象的函数取得。
var today = new Date();
var current_date = today.getDate();
//max用于保存按照歪酷存档划分的时间段的每周的开始日期
//取值范围为:(1、8、15、22),初始化为1
var max = 1; //日期
//i是循环计数器,用于控制前两次循环
//同样初始化为1
var i = 1; //循环计数
//根据当前的日期来确定max的值
//第一周的判断没写,因为默认值就是第一周
if(current_date>=22){
//本月第四周
i=4;
max=22
}
else if(current_date>=15){
//本月第三周
i=3;
max=15;
}
else if(current_date>=8){
//本月第二周
i=2;
max=8;
}
//确定第三次循环的计数器n的值
//原来加的有判断i是否小于4
//现在发现其实不需要判断。
//i=4的时候,n就等于0,第三次循环就不进行
var n=4 - i;
//第一次循环
//用于生成本月从当前周到月初第一周的存档列表
//由于歪酷的存档页面的URL很有规律,如下:
//http://*.yculblog.com/archive.YEAR(len = 4),MONTH(len <= 2),DAY(len <= 2).html
//因此只要按照顺序从本周开始,max依次递减7,就OK了。
//其中的"<10?"的地方是为了显示美观。目的将一位的月份或日期的数字前面加0
//URL中并不变动,只用于显示。
for(i;i>0;i--){
document.write("<li><a href=\"http://booker.yculblog.com/archive." + current_year + "," + current_month + "," + max + ".html\">" + current_year + "年" + current_month + "月" + (max<10?"0" + max:max) + "~" + (max--22?" ":((max + 6<10?"0" + (max + 6):(max + 6)))) + "</a></li>\n");
max - =7; //max递减7
}
//由于第二次循环是必然执行,且必然是四次。所以max赋值22
//为什么说第二次循环是必然执行且是四次呢?
//原因很简单,因为此脚本目的是生成8周的存档列表,即两个月。
//即使当前日期在本月的第四周中,那么本月也仅仅只有四周
//即是说,上个月的四周也必须全部显示才能够凑齐8周
max=22;
//i赋值4,开始第二次循环。
//其中"current_month - 1>0?"的地方,用于判断当前月份是否是1月
//如果当前是一月,会发生什么情况?
//当前是一月的话,那么上个月就是去年的12月,月份变为12,年份减一
//不考虑此时还没有日志的情况(这个用Javascript脚本很难判断)。
//因此,也许并不适用于新开不足两个月的Blog,和间断性曾经一周没有发表日志的Blog
for(i=4;i>0;i--){
document.write("<li><a href=\"http://booker.yculblog.com/archive." + (current_month - 1>0?current_year:current_year - 1) + "," + (current_month - 1>0?current_month - 1:12) + "," + max + ".html\">" + (current_month - 1>0?current_year:current_year - 1) + "年" + (current_month - 1>0?current_month - 1:12) + "月" + (max<10?"0" + max:max) + "~" + (max--22?" ":((max + 6<10?"0" + (max + 6):(max + 6)))) + "</a></li>\n");
max - =7;
}
//再次将max赋值22,准备开始第三次循环
//也就是上上个月
max=22;
//此处的循环计数器使用n
//n是什么呢?看上边
//目的是用于保证凑齐8条项目
//如果目前为本月的第三周,那么就需要列出上上个月的最后一周
//如果目前为本月的第二周,那么就需要列出上上个月的后两周
//需要列出上上个月的几周的内容,就是由n来控制
//其中"current_month - 2>0?"的地方,说明见上边
//不同的是,这次要判断当前是否2月,二月的话,
//就需要显示本月、一月、去年12月
//如果当前是1月,那么同理,需要显示本月,去年的12月和11月
for(n;n>0;n--){
document.write("<li><a href=\"http://booker.yculblog.com/archive." + (current_month - 2>0?current_year:current_year - 1) + "," + (current_month - 2>0?current_month - 2:(current_month - 1>0?12:11)) + "," + max + ".html\">" + (current_month - 2>0?current_year:current_year - 1) + "年" + (current_month - 2>0?current_month - 2:(current_month - 1>0?12:11)) + "月" + (max<10?"0" + max:max) + "~" + (max--22?" ":((max + 6<10?"0" + (max + 6):(max + 6)))) + "</a></li>\n");
max - =7;
}
//最后用于显示两个连接“按日期总览”和“浏览全部网志”
document.write("<li><a href=\"http://booker.yculblog.com/archive.by.date.html\">按日期总览</a></li>\n");
document.write("<li><a href=\"http://booker.yculblog.com/archive.html\">浏览全部网志</a></li>\n");
//-->
</script>
相关日志:
收藏:
QQ书签
del.icio.us
订阅:
Google
抓虾
最新评论
-
2006-04-28 05:53:48 http://mengfuhua.ycool.com/
偶对博客的白痴程度已经遭到天怒人怨了,你就原谅我吧。。不是学电脑的。
是不是只要把你写的这些,除了中文解释,全部都COPY在[body][/body]之间的任何位置都可以呢嗯,抱歉啊。
关于这段代码,把<script ...>开始到</script>结束的内容,除了中文注释(//开头到行尾)。
在你想要生成列表的地方先加上<ul></ul>,然后把代码放到这个里边就行了。之后需要做的就是,比如改改位置,改改样式。这些你可以随心所欲了。只要将代码放到<ul></ul>之间。
当然,这个<ul></ul>是要放在<body></body>里边的。 -
2006-05-02 08:07:55 http://mengfuhua.ycool.com/
[^.^]看懂了,谢谢兔子哈。突然发现自己的博客在你的LIST里。感动哈。
不谢不谢[=_=]




