昨天,用Prototype.js解决了一个以前一直解决不了的问题,即静态文章列表加上New标志。
工作上一直使用静态的CMS(内容发布系统),好处是发布的内容全部都有静态页面、唯一地址,访问速度也比较稳定,缺点是放弃了动态的效果,比如文章动态链接、列表更新等等,以及今天要说的根据文章发布时间给标题加New标志。
原理是用Javascript分析列表代码里面带有时间的条目,时间是不是在时间限制之后,如果是,就在这个条目的时间代码段前面加上New的标志代码。
首先对文章列表进行改造,发布系统生成<ul>,每篇文章都是一个<li>,每个<li>里面用<a>包含标题,用<samp>来包含发布时间(还可以选择<span>或其他标签,我特意选了不常用的<samp>),最外层用<div>包含(看具体使用来定,也可以使用<table>等),并增加ID属性。以下是列表的代码:
<div id="News">
<ul>
<li><a href="link" target="_blank">Title</a><samp>2006-07-26 10:20</samp></li>
<li><a href="link" target="_blank">Title</a><samp>2006-07-25 10:20</samp></li>
<li><a href="link" target="_blank">Title</a><samp>2006-07-25 10:20</samp></li>
<li><a href="link" target="_blank">Title</a><samp>2006-07-24 10:20</samp></li>
<li><a href="link" target="_blank">Title</a><samp>2006-07-23 10:20</samp></li>
</ul>
</div>
Javascript脚本部分,我设定的时间限制是前天0点,也就是说前天发的内容都会加上New的标志。shownew.js代码如下:
//shownew.js
//email: 94smart(AT)gmail.com
//url: http://blog.94smart.com
var TheDay = new Date(); //初始化时间
TheDay.setDate(TheDay.getDate()-2); //将时间设定为前天,看实际需要而定
TheDay.setHours(0,0,0); //将时间设定为前天0点
var newImage = '<img src="images/icon_new.gif" border="0" alt="New" />'; //New字样图片的代码
function showNew(listId){ //参数listId是要处理列表的ID
var thisList = $(listId).getElementsByTagName('li');
var listArray = $A(thisList);
listArray.each(function(listItem){
theSamp = listItem.getElementsByTagName('samp'); //取li里面的samp标签的内容
theSamp = theSamp[0];
theTime = theSamp.innerHTML; //得到文章的发布时间
theTime = new Date(theTime.replace(/\-/g, "/")); //替换时间格式为yyyy/mm/dd h:m:s,如果正好是Javascript的时间格式就不需要这行
if (theTime>=TheDay) {
new Insertion.Before(theSamp, newImage); //如果发布时间比设定的时限晚就在samp标签前面插入New图片代码
}
});
}
使用的时候在<head>区插入代码:<script src="prototype.js" type="text/javascript"></script>和
<script src="shownew.js" type="text/javascript"></script>,在列表的HTML代码下方加入:<script type="text/javascript">showNew('News');</script>,ok,刷新你的页面,看到New了吗?没有的话看这里。
上面的代码还可以再挖掘一下,这里就不继续了,希望我的代码对其他人有所帮助。
需要说明的是,用的Prototype是Prototype v1.4.0,别的版本没试,应该也可以。Prototype库真的很强大,尤其是对于我这样的懒人,懒得自己写底层的业余JS人员。
Technorati : Javascript, Prototype, XHTML
zeal 9:36 am on July 31, 2006 Permalink
这一般是当你通过相同的用户名登录到不同的域/组的时候,Windows会自动生成不同后缀的个人设置文件夹。
我的解决方法是用管理员账号登录,然后直接copy整个用户文件夹。
cngump 9:46 am on July 31, 2006 Permalink
我的解决方法是用管理员账号登录,然后直接copy整个用户文件夹。
94smart 10:44 am on July 31, 2006 Permalink
谢谢两位,我也是这么解决的,但是我想知道这是怎么产生的。
to zeal:我家里用的机器没有域,使用的组也是默认的“workgroup”,没有修改过,不知道是不是有类似的病毒?
Fwolf 7:02 pm on July 31, 2006 Permalink
怀疑是修改了机器名所致
94smart 8:56 pm on July 31, 2006 Permalink
机器名一直没改过
Yoshi 10:55 am on August 2, 2006 Permalink
在登陆之前做过了什么操作没有?任何不求严的操作都可能促成这个结果。另外,最好查看一下日志文件看看有什么异常。(管理工具\事件察看器)
94smart 1:21 pm on August 2, 2006 Permalink
to Yoshi:
多谢
zeal 4:25 pm on August 2, 2006 Permalink
windows的东西有时候就是主动得过分,你都不知道该感谢他还是诅咒它。
就像前几天我重装系统,明明是希望完全重装的,就因为没有把系统盘先格掉,结果XP装完之后发现用户文件夹下面所有的用户都变成了两份,只不过一份都加了.WINDOWS的后缀。甚至连Windows目录下的一些老文件也就原封不动的给我保留了下来。
zeal 4:25 pm on August 2, 2006 Permalink
windows的东西有时候就是主动得过分,你都不知道该感谢他还是诅咒它。
就像前几天我重装系统,明明是希望完全重装的,就因为没有把系统盘先格掉,结果XP装完之后发现用户文件夹下面所有的用户都变成了两份,只不过一份都加了.WINDOWS的后缀。甚至连Windows目录下的一些老文件也就原封不动的给我保留了下来。
zeal 4:25 pm on August 2, 2006 Permalink
windows的东西有时候就是主动得过分,你都不知道该感谢他还是诅咒它。
就像前几天我重装系统,明明是希望完全重装的,就因为没有把系统盘先格掉,结果XP装完之后发现用户文件夹下面所有的用户都变成了两份,只不过一份都加了.WINDOWS的后缀。甚至连Windows目录下的一些老文件也就原封不动的给我保留了下来。
94smart 4:32 pm on August 2, 2006 Permalink
我的blog出问题了?一次有3条同样的留言