Blogger.com博客优化之-显示最新评论及设置在首页显示或不显示

一开始没有打算在首页设置评论选项,但是感觉有了评论才想一个完整的博客系统, 于是就找了些东西在网上,这里提供两个方法:
一个是添加HTML/JavaScript控件在其中添加如下代码
<div id="newComments">
  <noscript>failed!<br />Javascript not supported here!</noscript>
</div>

<script>
var nCommentStartIndex = 1;
var nCommentShow = 8;

function showRecentComments(nIndex) {
  if (!nIndex)
    nIndex = nCommentStartIndex;
  var sFeedURL = '/feeds/comments/summary?orderby=published&start-index='+nIndex+'&max-results='+(nCommentShow+1)+'&alt=json-in-script&callback=generateComments';
  var script = document.createElement('script');
  document.getElementById('newComments').innerHTML = 'Loading <blink>...</blink>';
  script.setAttribute('src', sFeedURL);
  script.setAttribute('type', 'text/javascript');
  document.documentElement.firstChild.appendChild(script);
}

function generateComments(json) {
  function compareentry(a,b) {
    order= Date.parse(a.published.$t.replace(/^(\d{4})-(\d{2})-(\d{2})T([0-9:]*)([.0-9]*)(.)(.*)$/, '$1/$2/$3 $4 GMT')) - Date.parse(b.published.$t.replace(/^(\d{4})-(\d{2})-(\d{2})T([0-9:]*)([.0-9]*)(.)(.*)$/, '$1/$2/$3 $4 GMT'));
    return 0-order;
  }

  var sHTML = '<ul>';
  var sortentry = json.feed.entry.sort(compareentry);
  var nIndex = parseInt(json.feed.openSearch$startIndex.$t);
  var nTotalComment = parseInt(json.feed.openSearch$totalResults.$t);
  for (var i = 0, Comment; Comment = sortentry[i]; i++) {
    if (i >= nCommentShow)
      break;
    var authorname = Comment.author[0].name.$t;
    var title = Comment.title.$t.substr(0,30);
    var j = 0;
    while (j < Comment.link.length && Comment.link[j].rel != "alternate")
      j++;
    var link = Comment.link[j].href;
    var timestamp = Comment.published.$t.substr(0,10);
    sHTML += '<li><span class="item-title">'+authorname+': <a href="'+link+'">'+ title +'</a> - '+timestamp+'</span></li>';
  }
  sHTML += '</ul>';
  sHTML += generateCommentLink(parseInt(json.feed.entry.length), nIndex, nTotalComment);
  document.getElementById('newComments').innerHTML = sHTML;
}

function generateCommentLink(nFetch, nIndex, nTotalComment) {
  var bOld = (nFetch > nCommentShow);
  if (bOld) nFetch = nCommentShow;
  var sResult = '<p align="right">Recent '+nIndex+'-'+(nIndex+nFetch-1)+', total: '+nTotalComment+'.  ';
  if (nIndex > nCommentStartIndex)
    sResult += '<a href="javascript:showRecentComments('+(nIndex-nCommentShow)+');" title="Newer Comments">&lt;&lt;</a>  ';
  if (bOld)
    sResult += '<a href="javascript:showRecentComments('+(nIndex+nCommentShow)+');" title="Older Comments">&gt;&gt;</a>';
  sResult += '</p>';
  return sResult;
}
</script>

<script language="javascript">showRecentComments();</script>
代码中红色的部分var nCommentStartIndex表示从最近的一条评论开始,var nCommentShow意识是显示出多少条评论,这个代码有个好处是可以显示全部的评论,但是不用全部一次列出来。
二是选择添加小工具里的供稿,供稿地址填写
http://blog.kban.info/feeds/comments/default
这个可以设置显示的条目,日期等,直接把红色的地址改为自己博客地址就可以了。
两个功能差不多。原理也是一样的用哪个自己试试看效果选择下就是。

设置完这些东西,就感觉侧边栏的东西有点太多了,能不能把一些东西不需要时隐藏掉呢,如:我想把最新评论模块在主页的时候显示,然后在其他位置不显示,然后找到如下代码设置:
<b:widget id='Profile1' locked='false' title='AUTHOR PROFILE' type='Profile'>
  <b:includable id='main'>
  <b:if cond='data:blog.pageType != "item"'>
     <b:if cond='data:title != ""'>
     ............. (程式內文略过不表)
  </b:if>
  </b:includable>
</b:widget>
通过if语句判断在什么位置显示Sidebar上的元件,这个需要修改代码,在布局-修改HTML- 扩展窗口小部件模板打勾后看到详细代码, (if cond='data:blog.pageType != "item")的意识是:如果现在所在的页面不是"内页"的话,才会显示该元件(Profile)。只要把!= 改成==,判断句就变成"只有在内页的时候才会显示该元件"了。这类判断所在页面的判断句有几种,整理如下:
<b:if cond='data:blog.pageType != "item"'>      (如果现在不在内页的话)
<b:if cond='data:blog.pageType != "archive"'>   (如果现在不在Archive 存档页面的话)
<b:if cond='data:blog.pageType != "index"'>     (如果现在不在Label 标签分类页面的话)
<b:if cond='data:blog.url != data:blog.homepageUrl'> (如果现在不在首页的话)
有了以上的几种判断句,我想不只可以控制Sidebar 上的元件在哪种页面显示,任何范本里的功能或操作也可以搭配上述条件使用,这些都可以根据自己的使用调整。

参考文章:
讓側邊列 (Sidebar) 的元件只在首頁顯示/不顯示

本文地址:http://oceanban.blogspot.com/2010/04/bloggercom_19.html
原创文章如转载,请注明链接: 转自OceanBan的空间

2 评论:

Ocean Ban : 回复此评论

留言测试

匿名 说... 回复此评论

此评论已被博客管理员删除。