在搞定了基本的伪动态之后,我马上把它应用到了网站,但随后就发现了一个问题:我如何来管理新闻列表呢?要是让我在每次要加新闻时去修改源文件然后再上传我可是千万个不愿,不仅麻烦而且容易出错,懒人怎么能可以这么做。动动脑子,于是想到了用XML,这个早已存在,但近些年才流行起来的技术。
在HTML里,可以使用数据岛来使用XML数据,一个使用方法就是在HTML里加入一句:
这样,就可以在HTML里使用XML提供的数据。不过,这样还是显得麻烦了,还是要上传整个文件,那么用方便点的吧~~
这样处理之后,我就可以只用修改一个XML文件然后上传到服务器了。
接下来,就是搞定在客户端对XML数据的处理了~~
首先,我得设计一个新闻的数据结构。这个简单,毕竟在列表时只需要用到新闻的标题和时间,但为了链接,需要加上一个ID,结果如下:
数据结构搞定了,继续!
在客户端对数据处理当然首选JavaScript了,再么这篇文章讲的也是用JavaScript来实现伪动态。
在JS里,对数据岛的访问可以使用记录集:
var rs=data.recordset;
这个记录集的使用方法和ASP中类似,这下方便我了:),可以很方便地实现新闻的列表及链接了~在显示新闻,还需要显示的是上一条新闻的标题及下一条新闻的标题,而且显示新闻列表时,就不需要显示上一条及下一条新闻了。于是我放了两个层分别用来显示新闻和上一条及下一条新闻的信息,并在需要的时候设置是否显示。其中newsmain用来显示新闻或者新闻列表,newspage用来显示上一条及下一条新闻的信息。接着把对应ID的新闻存为网页文件,在显示时使用iframe嵌入。
先写个函数来从网址中获取新闻ID,这个在前一篇文章已经讲过,拿来用~~
function getid() {
var str,len,pos,id,fn; // 定义一些变量
str=top.window.location.href; //获取当然文件地址
len=str.length; // 得到地址长度
pos=str.indexOf("?id=",0); // 得到"?id="的起始地址
// 判断是否存在"?id="
if(pos>0) {
id=str.substring(pos+4,len); // 获取ID
return eval(id); // 返回数值类型的ID,方便处理
}
else {
return 0; // 错误参数,返回0,显示新闻列表
}
}
再来个函数处理进入页面时执行什么动作,是显示新闻列表还是显示相应ID的新闻
function showmain() {
var id;
id=getid(); // 获取新闻ID
// 是 0 则显示列表
if(id>0) {
rs.absoluteposition=id; // 设置游标到指定的新闻
shownews(id); // 显示新闻
}
else {
showlist(); // 显示新闻列表
}
}
显示新闻列表的函数
function showlist() {
var ss=""; // HTML
var i; // 循环计数器
rs.movefirst(); // Move to the first record
// Loop through reading news records
for(i=0;i ss=ss "·" rs("title") " (" rs("date") ") rs.movenext(); //Move to the next news item } document.all.newsmain.innerHTML=ss; //Output news in the news display area document.all.newspage.style.visibility="hidden"; // When displaying the news list, the information about the previous and following news is not displayed } Display the specified news and display information about the previous and following news function shownews(id) { var ps; // Used to store information about previous and following news document.all.newsmain.innerHTML=""; // Use iframe to display news document.all.newspage.style.visibility="visible"; // Make the previous and following news information visible rs.absoluteposition=id; // Move the record cursor to the current news // If the ID is less than 1, it means it is the first record, and the last news is "no more":) if(id<=1) { ps="Previous post: No more"; } // Otherwise, display the title of the previous news else { rs.moveprevious(); // Record cursor moves forward ps="Previous article:" rs("title") ""; // Before display News information rs.movenext(); //Restore record cursor } ps=ps " "; // Insert a space between the two messages // If the ID is greater than the total number of records, it means this is the last news~ if(id>=rs.recordcount) { ps=ps "Next article: No more"; } // Otherwise, display the title of the next news item else { rs.movenext(); // Record cursor moves forward ps=ps "Next article:" rs("title") ""; // Show next The title of the news rs.moveprevious(); //Restore record cursor } document.all.newspage.innerHTML=ps; // Display the before and after news titles~ } Okay, it’s basically finished. The specific usage can be as follows: Add XML data island to the head area
"; // Add a news
Then execute showmain() in the body’s onload event
You also need to add two layers to the body to display information
Done!
However, the method I used also has imperfections. For example, the IDs of the news list must be arranged in order and there must be no gaps, because absolute positioning is used when using the record set, and so on. I am terrible at writing articles, so: corrections and criticisms are welcome ^-^! I also welcome everyone to exchange experiences and insights, etc. My email is vipxjw@tom.com.