静态的动态续篇之来点XML |
本文标签:静态的动态续篇之来点XML 在搞定了 根本的伪动态之后,我即将把它 利用到了网站,但随后就发现了一个问题:我如何来治理新闻列表呢?要是让我在每次要加新闻时去 批改源文件 而后再上传我可是千万个不愿,不只麻烦并且容易出错,懒人怎么能 可以这么做 。动动脑子,于是想到了用XML,这个早已存在,但近些年才 风行起来的技术 。 在HTML里, 可以 使用数据岛来 使用XML数据,一个 使用 步骤便是在HTML里加入一句: <xml id="data"> <!-- 在此为XML数据 --> </xml> 这样,就 可以在HTML里 使用XML提供的数据 。不过,这样还是显得麻烦了,还是要上传整个文件,那么用容易点的吧~~ <xml id="data" src="data.xml"/> 这样 解决之后,我就 可以只用 批改一个XML文件 而后上传到服务器了 。 接下来,便是搞定在客户端对XML数据的 解决了~~ 首先,我得设计一个新闻的数据 构造 。这个 容易,毕竟在列表时 惟独求用到新闻的 题目和 工夫,但为了链接,需求外加一个ID, 后果如下: <newslist> <news> <id>1</id> <title>第一个新闻</title> <date>2005-11-16</date> </news> </newslist> 数据 构造搞定了, 接续! 在客户端对数据 解决固然首选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(); // 移动到第一个记录 // 循环读取新闻记录 for(i=0;i<rs.recordcount;i++) { ss=ss+"<font color=#800000>·</font><a href=javascript:shownews("+rs("id")+")>"+rs("title")+"</a> ("+rs("date")+")<br/>"; // 增加一个新闻 rs.movenext(); //移动到下一条一新闻 } document.all.newsmain.innerHTML=ss; //在新闻显示区输出新闻 document.all.newspage.style.visibility="hidden"; // 显示新闻列表时,不显示前后新闻的信息 } 显示指定的新闻,并显示前后新闻的信息 function shownews(id) { var ps; // 用于 存放前后新闻的信息 document.all.newsmain.innerHTML="<iframe class=news_main frameborder=0 src=news/"+id+".htm/>"; // 用iframe来显示新闻 document.all.newspage.style.visibility="visible"; // 使前后新闻信息可见 rs.absoluteposition=id; // 将记录游标移动到目前新闻 // 假如ID小于1 注明是第一条记录,上一篇新闻便是“没有了”:) if(id<=1) { ps="上一篇:没有了"; } // 不然就显示上一篇新闻的 题目 else { rs.moveprevious(); // 记录游标向前移动 ps="<a href=javascript:shownews("+(id-1)+")>上一篇:"+rs("title")+"</a>"; // 显示前篇新闻信息 rs.movenext(); // 复原记录游标 } ps=ps+" "; // 在两个信息中间插入一个空格 // 假如ID大于记录总数 注明这是最终一个新闻了~ if(id>=rs.recordcount) { ps=ps+"下一篇:没有了"; } // 不然显示下篇新闻的 题目 else { rs.movenext(); // 记录游标向前移动 ps=ps+"<a href=javascript:shownews("+(id+1)+")>下一篇:"+rs("title")+"</a>"; // 显示下篇新闻的 题目 rs.moveprevious(); // 复原记录游标 } document.all.newspage.innerHTML=ps; // 显示前后新闻 题目~ } 好了,到底算是 根本 竣工了~具体 使用 可以这样来: 在head区加入XML数据岛 <head><xml id="data" src="newslist.xml"/></head> 接着在body的onload事件里执行showmain() <body onload="showmain()"> 还需求在body里加入两个层用于显示信息 <div id="newspage"></div> <div id="newsmain"></div> 竣工! 不过,我所用的 步骤也有不完善的地方,如新闻列表的ID必须 保障顺序罗列且不能有缺漏,由于在 使用记录集时用到了绝对定位,还有 其余等等 。我写文章 比较烂,所以: 欢送 教正批判^-^!也 欢送大家我 交换 教训心得等,我的mail是vipxjw@tom.com 。 |