在beta版Blogger的首页显示文章摘要
9.22更新了一些内容
beta版的Blogger已经能实现大部分我想要的功能了,但是与wordpress这类专业的BLOG系统比起来,还是有两个很明显的缺陷:
1. 首页只有全文显示模式,有些blogger发表的文章可能比较长,也可能更新频率比较快,多数人都会希望首页只显示摘要。
2. 发表评论需要跳转到新页面,提交之后默认显示评论的页面也是一个与BLOG模板无关的新页面,这种设计不符合用户的习惯。
幸好还可以在HTML里插入JS代码,我刚刚写了一段脚本,可以实现首页显示文章摘要的功能:
9.22更新了一些内容
beta版的Blogger已经能实现大部分我想要的功能了,但是与wordpress这类专业的BLOG系统比起来,还是有两个很明显的缺陷:
1. 首页只有全文显示模式,有些blogger发表的文章可能比较长,也可能更新频率比较快,多数人都会希望首页只显示摘要。
2. 发表评论需要跳转到新页面,提交之后默认显示评论的页面也是一个与BLOG模板无关的新页面,这种设计不符合用户的习惯。
针对这两个问题,网上可以搜到很多解决方法,尤其是Yee’s Blog,里面介绍了很多有用的BLOG工具和HACK技巧。但这些都是针对旧版的Blogger,beta版的HTML代码跟以前有很大的不同,所有功能模块的代码都封装到了“<b:widget>”这样的标签里(更新:感谢柠檬杀手提供的网址……原来Widget可以展开……以前居然没发现-___-b),虽然还是可以看到静态页面的源代码,查到各个元素的ID和CLASS,进而通过CSS改变页面外观。但无法直接修改模块的HTML代码,就有很多局限性……(更新:我试了一下,Widget展开之后,虽然可以移动一些标签的位置,添加一些属性,但还是有很多限制,比如不能加入隐藏的INPUT……)
幸好还可以在HTML里插入JS代码(似乎只能用链接形式,直接在模板里写入比较复杂的JS,会出现XML错误),我刚刚写了一段脚本,可以实现首页显示文章摘要的功能:
与这个方法类似,发表每篇文章时,都要套用一段HTML模板(可以把它放到Settings/Formatting/Post Template里面,每次新建文章时自动套用模板):<span class="partofarticle">这里是显示在首页的摘要......
<div class="yyshowallarticlediv"><a href="" class="yyshowallarticle"
onmouseover="yycopylink(this);">查看全文!</a></div>
</span>
<span class="fullarticle" style="display: none;">这里是完整的文章</span>
在<span class="partofarticle">的标签里放一段摘要,完整的文章放在<span class="fullarticle">里(默认是隐藏的),“查看全文!”的链接上有一个onmouseover事件,这是为了自动获取该文章静态页面的链接地址,因为我是通过逐级查找DOM节点的方式来获取链接地址的,如果BLOG POST模块的排列方式跟我的不一样,就不能用这段代码(比如作者名字在时间日期后面)……如果你不懂DOM,那就干脆把“查看全文!”这个层删掉罢,反正也不是必须的。
更新:昨天写的代码不兼容FIREFOX,所以重新写了一个函数,根据不同游览器采用不同的DOM路径:function yycopylink(src) {
if(window.ActiveXObject)
{
var yyy=src.parentNode.parentNode.parentNode.parentNode.previousSibling.previousSibling.childNodes[0].href
}else{
var yyy=src.parentNode.parentNode.parentNode.parentNode.previousSibling.previousSibling.previousSibling.previousSibling.childNodes[1].href;
}
src.href=yyy;
}
然后,就要利用一段JS程序来判断当前页面是BLOG的首页,还是属于单独一篇文章的页面,由于文章页面的底部会有评论模块,而首页没有,因此可以利用这个来做判断。/**
* @author Dexter_Yy
*/
var yyhascomment=document.getElementById('comments-block');
//alert(yyhascomment);
if(yyhascomment!=null)
{
var yyspanobj=document.getElementsByTagName('span');
//alert(yyspanobj);
for(var i = 0; i < yyspanobj.length; i++)
{
var yyclass=yyspanobj.item(i).className;
if (yyclass == "partofarticle")
{
yyspanobj.item(i).style.display="none";
} else if (yyclass == "fullarticle")
{
yyspanobj.item(i).style.display="";
}
}
yyhascomment=null;yyspanobj=null;
}
就是找一个id="comments-block"的div,如果页面里存在这个div,就遍历所有的span,隐藏<span class="partofarticle">里的所有内容,显示<span class="fullarticle">里的内容……(更新:我修正一些语法,原先的程序在firefox里有一些地方不兼容,无法显示全文,感谢nAODI的提醒)
最终的JS脚本
http://dexter.yy.googlepages.com/showcomments.js
注意:链接JS的代码必须放在<b:widget id="'Blog1'" locked="'false'" title="'Blog" type="'Blog'/">的下面
至于最后的效果……请看我的BLOG……
作者: Dexter.Yy 发表于 9/23/2006 01:35:00 上午
标签: CODER
17 条评论:
哦。。貌似有bug。。无法看到全文。。。
怎,怎可能!什么情况下看不到全文?
http://bhic.blogspot.com/
这里你应该去看看
THX !
我看到一句很有用的话:"进入模板HTML编辑界面,备份,展开".....-____-b
貌似如果禁用了Javascript就看不到。。。。
我没有禁用呐。。。点了没什么反应,就是刷新一次页面,还是看不到全文。。。。。情况就是正常浏览网页情况下。。。厄。。。
。。。刚刚发现我也是看不了
都什么年代了……居然还敢禁用Javascript……
关于显示全文的问题,点击链接后应该是跳转到了文章的静态页面,因为浏览器加载HTML的过程中会从上往下解释,摘要部分会先显示出来,然后链接的JS脚本运行,摘要被隐藏、显示全文……这应该是一个很快的过程……
如果没有显示全文……可能是网页加载过程中卡住了,等一会应该就能正常显示……
我测试了一下,没出现你说的情况……特别是用firefox的时候,速度非常流畅-____-b
怪了。。。还是不行。。。等过几天看看吧。。厄
确实有问题,nAODI你用的是FIREFOX么
我已经修改好了……
恩。。现在正常了嘿。。。。对呐,我一直用的ff,因为看到yy以往的文章,所以默认yy写的东西对ff的支持肯定会比对其他浏览器的支持好呵。
我当然是首先用FIREFOX测试的,当时没发现错误-____-b
因为IE里的DOM和CSS都比较诡异,所以在IE里调试的次数更多,更容易发现BUG……
现在这个BLOG在FIREFOX里的效果确实更好。速度比IE快多了……
我用IE访问的时候发现一个问题:点击最新一篇文章,返回主页,再点击那篇文章,会得到一个空白页面,不知道你们会不会遇到这种情况?FIREFOX里没有这种问题……
页内评论的方法请看我的blog
http://rionkdr.blogspot.com/2006/10/blog-post_13.html
但我这种方法可能对FF支持不好,请使用IE内核的浏览器
用框架的话,要解决高度自适应的问题...
只有IE会自动撑大IFRAME,在其他浏览器里评论框都会显示不出来,除非保留滚动条
你可以用这种方法隐藏滚动条:
<iframe expr:src='data:post.addCommentUrl' style='border:0px;height:300px!important;
height:100%;margin:0px;width:100%;
overflow-y:auto!important;overflow-y:hidden;'/>
也可以像这样写,兼容IE7:
<iframe expr:src='data:post.addCommentUrl' class='yy'/>
CSS:
.yy{border:0px;height:300px;margin:0px;width:100%;overflow-y:auto;}
*:first-child+html .yy{overflow-y:hidden;height:100%;} * html .yy{overflow-y:hidden;height:100%;}
或者也可以用JS获取评论页面的scrollHeight,让IFRAME的高度等于这个值,这样在不同浏览器里都能实现高度自适应.
啊啊啊啊,不好意思弄错了……我这样写CSS本来的目的是让框架在IE里隐藏滚动条,在FIREFOX里显示滚动条……
不过我搞错了,在IFRAME的样式里加overflow:hidden;并不能隐藏滚动条,必须加到框架页面的BODY里……
所以这个想法不能实现……除非用JS……
你这个BLOG应该已经链接过一些JS文件,你看看里面有没有这样一段:window.onload=function(){}
如果有的话,在{}里面加入:
if(window.ActiveXObject){
document.getElementById("commentiframe").scrolling="no";
}else{
document.getElementById("commentiframe").scrolling="";
}
如果没有的话,直接在JS文件里加入:
window.onload=function(){
if(window.ActiveXObject){
document.getElementById("commentiframe").scrolling="no";
}else{
document.getElementById("commentiframe").scrolling="";
}
}
iframe标签里加上 id="commentiframe"和scrolling="no"
这样应该就能够实现兼容FIREFOX浏览器,并且在IE里隐藏滚动条
推荐另一种方法,个人觉得更方便
http://netsay.yi.org/blog/2007/02/blogger.html
是修改模板的html语言吧?怎么修改后保存不了!
发表评论