Blog外挂之:文章置顶
By 刘未鹏(pongba)
C++的罗浮宫(http://blog.csdn.net/pongba)
许多朋友想要文章置顶的功能。比如博客园的这个样子:
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 381pt; HEIGHT: 264.75pt" type="#_x0000_t75"><imagedata o:title="top_posts_demo1" src="file:///C:%5CDOCUME~1%5Cpongba%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg"></imagedata></shape>
图片截自爆牙齿的blog。
CSDN blog的用户建议列表里面也有许多人提出这个要求。
那么,在blog系统还没有内建文章置顶支持的时候,能不能自己实现呢?看图:
<shape id="_x0000_i1026" style="WIDTH: 415.5pt; HEIGHT: 238.5pt" type="#_x0000_t75"><imagedata o:title="top_posts_demo2" src="file:///C:%5CDOCUME~1%5Cpongba%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image002.jpg"></imagedata></shape>
博客园的文章置顶功能是将置顶文章放在首页的顶端。但每篇独立的文章里面并不能看到置顶文章。鉴于用户绝大多数时候访问的并非首页而是某篇特定的文章,所以把置顶文章框放在每篇文章而不是首页的顶部能够取得更好的显示效果。
文章置顶的实现
文章置顶的实现其实非常简单。第一步,在该系列的第一篇里面提到的准备工作是必不可少的,即把你blog上的文章收藏到一个专门的del.icio.us帐号上(如果你只想实现置顶功能,不想实现站内相关文章的话,那么只收藏你想置顶的那几篇也行)。第二步是将所有你认为应该置顶的文章加上一个名叫“topPost”(名字随你取)的tag。第三步就是用javascript显示出来了:
function showTopPosts()
{
var availElem =
document.getElementById('viewpost.ascx_PreviousAndNextEntriesUp');
if(!availElem)return;
availElem.parentNode.insertBefore(
document.createElement('br'), availElem);
var topPostsDiv = document.createElement('div');
topPostsDiv.setAttribute('id', 'topPosts');
availElem.parentNode.insertBefore(topPostsDiv, availElem);
topPostsDiv.innerHTML = '<h1>置顶文章</h1>';
for(var i = 0; i < Delicious.posts.length; ++i){
if(IsIn('topPost', Delicious.posts[i].t)){
topPostsDiv.innerHTML +=
'<a href = "' + Delicious.posts[i].u +
'" style = "font-size:<chmetcnv w:st="on" unitname="pt" sourcevalue="12" hasspace="False" negative="False" numbertype="1" tcsc="0">12pt</chmetcnv>;">' + Delicious.posts[i].d + '<' + '/a>';
topPostsDiv.innerHTML += '<br/>';
}
}
availElem.parentNode.insertBefore(
document.createElement('br'), availElem);
}
showTopPosts();
topPosts这个div的位置在正文post的正上方。原本csdn blog在正文正上方没有带id属性的element,导致定位困难。但最近的修正bug版本加上了一个“前一篇文章|后一篇文章”的div在正文的上方和下方,如图:
<shape id="_x0000_i1027" style="WIDTH: 265.5pt; HEIGHT: 148.5pt" type="#_x0000_t75"><imagedata o:title="top_posts_demo3" src="file:///C:%5CDOCUME~1%5Cpongba%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image004.jpg"></imagedata></shape>
这是个有id的div,id为viewpost.ascx_PreviousAndNextEntriesUp(但愿CSDN blog的开发人员不要取消这个div或改这个div的id:-))。所以只需定位到这个div,往其上方插入一个新的id为topPosts(这个id待会要用到)的div。再将从del.icio.us获取到的tag为topPost的所有文章插入到这个div中即可。
最后一步是调整topPosts这个div的格式,要想实现截图中的效果,需要在后台加入如下CSS代码:
#topPosts {
border: 1px solid #CCCCCC;
text-align: center;
margin-left: 15%;
margin-right: 15%;
}
h1 {
background: #EEEEEE none repeat scroll 0%;
border-bottom: 1px solid #CCCCCC;
margin-bottom: 10px;
padding-bottom: 5px;
padding-top: 5px;
padding-left: 0px;
}
Further work
这个置顶算法很简单,把所有tag为topPost的链接显示出来就完事了。但这就有一个问题,如果你觉得值得置顶的文章比较多,那么显示在页面上方的置顶框就会很大,影响正文阅读。解决这个问题有一个简单的办法,就是设置一个置顶文章数上限maxTopPostsShown,然后每次从所有的topPost文章中随机选取出maxTopPostsShown个文章显示出来。进一步还可以这么做:基于当前文章的tag,显示与它亲缘关系最近的topPost文章,如果没有就退回到随机选取。如果你的blog有这个需求就自己实现一下吧。
[1] js代码中的Delicious.posts是一个全局对象。通过del.icio.us的开放JSON接口获得。使用方法见这里。
分享到:
相关推荐
Sticky:虽然也是置顶,但它只对那些与置顶文章同一天发表的其它文章有效,以后的文章还是会排到它的上面 Normal:预设值,不对文章进行任何设定,当想取消置顶的时候,就选这个选项。 这款插件使用起来很简单,...
在本“blog.zip_blog_博客置顶开发”项目中,我们将探讨一个简易博客系统的实现,包括基本的发帖、删帖以及精华帖置顶功能。 一、博客系统架构 1. 前端界面:用户交互的主要平台,通常由HTML、CSS和JavaScript构建...
置顶功能允许我们将特定文章或页面固定在博客首页的顶部,即使有新的内容发布,这些置顶的条目也不会被新内容挤下去,始终保持着首要的展示位置。这对于发布重要公告、活动信息或者特色内容来说非常实用。 WP-...
将自己想要的窗口置顶:以Google浏览器为例,将自己想要的窗口置顶:以Google浏览器为例,将自己想要的窗口置顶:以Google浏览器为例,将自己想要的窗口置顶:以Google浏览器为例,将自己想要的窗口置顶:以Google...
特别是在博客系统中,置顶功能可以帮助博主突出展示一些重要文章,让读者在浏览时能够首先看到这些内容。PHPCMS是一款流行的PHP内容管理系统,它提供了灵活的文章管理功能,其中就包括了文章置顶功能的实现。 ...
在日常工作中,我们可能会遇到需要同时处理多个应用程序的情况,此时,将某个窗口始终显示在其他窗口之上就显得非常方便。这款工具通过简单的快捷键设置,让用户能够快速将当前活动窗口置顶,无需手动调整窗口位置,...
在Zblog这类博客平台中,文章置顶功能允许用户将某些文章固定在首页或特定页面的最顶部位置。该功能通常通过后端模板标签实现,在生成文章列表时,将置顶文章置于列表的最上方。 ### 知识点二:文章分类页的含义 在...
在获取文章列表时,应先按照 `flag` 字段降序排序(置顶的文章优先),然后再按照 `top` 字段降序排序(置顶时间晚的文章优先),最后按照默认的 `id` 字段降序排序。这样,置顶的文章就会出现在列表的前面。 ```...
在博客中,置顶通常是指将某篇博客文章固定在首页最上方,使其始终显示在其他新发布的内容之前,以便让访客一眼就能看到。这在展示重要信息或者推广特定内容时非常有用。 和讯博客提供置顶功能,允许用户将某篇文章...
"桌面置顶小工具"是一种实用的软件工具,它的主要功能是允许用户将任何窗口设置为始终显示在其他窗口之上,即置顶显示。这种工具对于需要同时处理多个任务或者频繁参考某个特定窗口内容的用户来说非常有用。下面将...
记事本是计算机操作系统中常见的简单文本编辑工具,而“置顶”的特性则允许它始终显示在其他窗口之上,不会被遮挡,提高了工作效率。 置顶的记事本软件通常包含以下特点和功能: 1. **窗口置顶**:这是此类软件的...
在WordPress中,文章置顶是一种常见功能,它可以让重要的文章始终保持在博客首页的显眼位置。默认情况下,WordPress仅通过调整排序来实现置顶,但这样并不足以区分置顶文章和普通文章。以下是一些方法,帮助你在...
窗口置顶工具是一种实用软件,主要用于帮助用户将指定的窗口设置为始终显示在其他窗口之上,使得该窗口始终保持可见状态,不受其他打开程序的影响。这种功能在多任务处理时非常有用,比如在观看教程视频的同时编写...
Top_Windows应用程序窗口一键置顶工具是一款使用AutoHotKey开发的窗口置顶工具,使用可以把任意一个窗口设置为顶层窗口,使其不会被其它非置顶的窗口遮盖。永远保持在最上方,支持使用快捷键,可取消置顶,使用简单、...
SETUNA:截图浮动置顶 1、绿色免安装,运行需要.net3.5,首次执行联网自动安装; 2、启动后默认最小化在任务栏,开机自启动; 3、默认ctrl+alt+a快捷键截图,截图后自动置顶显示,双击可以收缩; 4、图标右键“选项...
窗口置顶是指将某个窗口设置为始终显示在其他窗口之上,即使切换到其他应用程序或打开新的窗口,这个被置顶的窗口也会保持在最前面。这对于需要频繁参考或操作某个特定窗口的用户来说非常实用,例如编写代码时查看...
通过传递特定的参数,我们可以将指定窗口设置为顶级窗口,使其始终位于其他窗口之上。在易语言中,我们需要正确调用这个函数并传递正确的参数来实现窗口置顶。 在易语言窗口置顶源码中,通常会包含以下步骤: 1. ...
3. **窗体置顶**:在Windows系统中,窗体置顶意味着窗口总是在其他窗口之上显示。在Unity中,这可能需要通过编写C#脚本来实现,通过修改窗口的ZOrder或者使用Unity内置的WindowSystem组件来确保窗口始终在最前面。 ...
当一个窗口被设置为置顶时,它的`WS_EX_TOPMOST`扩展样式会被添加,这样窗口就会被放置在所有非置顶窗口之上。要取消置顶,只需移除这个扩展样式即可。 这款小软件无需安装,这意味着它是一个便携式应用,不会在...