利用XMLHTTP技术为Donews Blog添加最新文章列表

王朝other·作者佚名  2006-11-24
宽屏版  字体: |||超大  

Donews Blog的多数模版都没有显示最新文章列表的功能,下面是利用XMLHTTP技术实现这个功能的思路和代码,效果见左侧的“最新文章”一栏。因为Donews Blog和Discuz论坛一样,不同的模版各搞各的,无法给出统一的变量名(HTML Tag的ID值),因此需要在代码的基础上用CSS修饰以产生合适的效果。

思路和技术背景

思路很单纯,直接用XMLHTTP读出Blog的RSS文件,取出最新的文章插入到提前准备好的HTML Tag中即可。

XMLHTTP是微软上世纪为自己的Web应用的某些效果发明的技术,去年大喇叭们给这种技术(其实是效果)起了个新名字叫Ajax,用来赞美Google的几个Web应用,却把微软扔一边了。随着微软、Firefox和Opera把XMLHTTP集成到各自的浏览器中,Web开发者不需要让用户下载ActiveX,只需要用喜欢的Web脚本直接调用即可,Ajax效果开始得以普及。

原始代码

<h3 class="listtitle">最新文章 <span>(<a href="http://blog.donews.com/concorde/archive/2006/02/15/727247.aspx">如何实现?</a>)</span></h3>

<ul class="list" id="my_last_post"></ul><ul class="list"><li>

<script type="text/javascript"><!--

var xmlhttp = false;

function load_rss()

{

xmlhttp = false;

if (window.XMLHttpRequest)

{

xmlhttp = new XMLHttpRequest();

if (xmlhttp.overrideMimeType)

{

xmlhttp.overrideMimeType('text/xml');

}

}

else if (window.ActiveXObject)

{

try

{

xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");

}

catch (e)

{

try

{

xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

}

catch(e)

{

}

}

}

if(!xmlhttp)

{

return;

}

xmlhttp.onreadystatechange = proc_rss;

xmlhttp.open('GET', '/concorde/rss.aspx', true);

xmlhttp.send(null);

}

function proc_rss()

{

if (xmlhttp.readyState == 4)

{

if (xmlhttp.status == 200)

{

var items = xmlhttp.responseXML.getElementsByTagName('item');

var l = 6;

if(items.length < 6)

{

l = items.length;

}

var html = '';

for (var i = 0; i < l; i++)

{

html = html + get_item(items, i);

}

var obj = document.getElementById('my_last_post');

if(obj)

{

obj.innerHTML = html;

}

}

}

}

function get_item(items, id)

{

var link = items[id].getElementsByTagName('link').item(0).firstChild.nodeValue;

var title = items[id].getElementsByTagName('title').item(0).firstChild.nodeValue;

var item = '<li class="listitem"><a href="' + link + '">' + title + '</a></li>';

return item;

}

load_rss();

file://-->

</script>

代码第二行有一个开放的<ul class="list"><li>,是用来关闭下面的代码(写在Donews Blog的模版里);代码里的'/concorde/rss.aspx'需要修改为自己或别人的Blog RSS(但不能用blog.donews.com域名之外的XML,如FeedBunrer包裹的);最后把代码放在“选项 » 配置 » 公告”中合适的位置即可。为修饰显示效果,可能需要配合合适的CSS代码。此外建议在“自定义CSS样式”中加上:.listitem{word-wrap:break-word;overflow: hidden;} 这样可以防止评论在IE中撑大页面,在Firefox中则是隐藏溢出的文字。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有