刘未鹏|C++的罗浮宫

Knowledge sharing is the best reuse

刘未鹏ID:pongba
[修改头像]
700964次访问,排名42好友7人,关注者62
pongba的文章
原创 99 篇
翻译 8 篇
转载 0 篇
评论 1508 篇
刘未鹏的公告
除非特别声明,本站采用Creative Commons License许可。转载请注明作者、出处,非商业。

喜欢这个Blog的风格?见这里这里,还有这里

我的豆瓣饭否

讨论问题请到TopLanguage小组

TopLanguage

gtalk/msn(邮件请发送到gmail邮箱)

pongba@gmail.com
pp_liu@msn.com

订阅C++的罗浮宫

  • FeedSky
  • 订阅到鲜果
  • 订阅到Google
  • 订阅到抓虾
  • 订阅到BlogLines
  • XML聚合

搜索C++的罗浮宫上的内容

最新发表

    whaz going on


    饭否

    books I've translated




    最近评论
    pongba:@julie:
    sorry, 不知道啊:-)
    Kenny:“肯德基和麦当劳的食物中的热量早就超过了人体所需,但我们的身体系统还是照样笑纳”

    对这个,我有点话要讲:肯德基和麦当劳套餐一直比中餐馆的食物更健康——当然,这个是从统计意义上来讲的,如果有个MM进中餐馆后一直点素炒苦瓜加一碗米饭那就别说了

    我觉得你这句话写得有失水准,平时看BLOG感觉你满有深度的,但这一句可能是人云亦云得太多了吧?
    julie:请问:Viking Adult出版社在哪个城市?

    我在豆瓣上看到你读过斯蒂芬平克的思想的材料

    pongba:@bigfatsea:
    Ma和Mb只需要两相比较便至少可以扔掉一个,所以不存在复杂度问题。
    另,你的方法,包括上面列的方法,本质上都是一样的。用的都是一个关键性质。所以..
    关键是不同的思路,引领到同样的答案。
    bigfatsea:呵呵,表达错误,更正如下:
    然后从Q里任选一人q,再把q认识的人和Q取交集得到Q',然后再从Q'里面任选一人q',再把q'认识的人和Q'取交集得到Q''
    文章分类
    收藏
    相册
    其它图片
    文章中的图片
    我的大头贴
    C++
    Andrei Alexandrescu
    Andrew Lumsdaine
    Bjarne Stroustrup
    boost
    C++ Standard Commitee
    Doug Gregor
    Hans J. Boehm
    Jaakko Jarvi
    Jeremy G. Siek
    Matthew Wilson
    newsgroups
    boost.Developer
    boost.User
    comp.lang.c++.moderated
    comp.std.c++
    TopLanguage
    Open Source
    codeplex
    Google AJAX Search API
    Google Code Prettify
    Google Web Toolkit
    MS shared source initiative
    notepad++
    STLSoft
    不认识的朋友们
    fatalerror99
    Matrix67
    Yelz
    余晟|乱象&乱想
    刘慈欣
    姬十三
    张志强|阅微堂
    许式伟
    阮一峰
    鲍志云
    其它
    科学松鼠会
    科学美国人
    科幻世界
    认识的朋友们
    chenyufei
    duguguiyu|Venus神庙
    Joyfire
    littlestone
    lxwde
    soloist
    云风
    刘江@图灵
    史晓明
    周星星
    周筠@博文视点
    孟岩
    张振
    徐宥|4G Spaces&Web 2.3
    方舟@博文视点
    李笑来|Pure Pleasure
    杨文博
    王信文|地球没有好朋友
    荣耀
    莫华枫
    袁泳(g9)|负暄琐话
    谢东升
    陈冀康@华章
    存档
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 Blog外挂之:文章置顶

    新一篇: 你应当如何学习C++(以及编程)(rev#1)

    Blog外挂之:文章置顶

     

    By 刘未鹏(pongba)

    C++的罗浮宫(http://blog.csdn.net/pongba)

     

    许多朋友想要文章置顶的功能。比如博客园的这个样子:

     

    图片截自爆牙齿的blog

     

    CSDN blog的用户建议列表里面也有许多人提出这个要求。

     

    那么,在blog系统还没有内建文章置顶支持的时候,能不能自己实现呢?看图:

     

     

    博客园的文章置顶功能是将置顶文章放在首页的顶端但每篇独立的文章里面并不能看到置顶文章。鉴于用户绝大多数时候访问的并非首页而是某篇特定的文章,所以把置顶文章框放在每篇文章而不是首页的顶部能够取得更好的显示效果

     

    文章置顶的实现

    文章置顶的实现其实非常简单。第一步,在该系列第一篇里面提到的准备工作是必不可少的,即把你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:12pt;">' + 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在正文的上方和下方,如图:

     

    这是个有iddividviewpost.ascx_PreviousAndNextEntriesUp(但愿CSDN blog的开发人员不要取消这个div或改这个divid:-))。所以只需定位到这个div,往其上方插入一个新的idtopPosts(这个id待会要用到)的div。再将从del.icio.us获取到的tagtopPost的所有文章插入到这个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

    这个置顶算法很简单,把所有tagtopPost的链接显示出来就完事了。但这就有一个问题,如果你觉得值得置顶的文章比较多,那么显示在页面上方的置顶框就会很大,影响正文阅读。解决这个问题有一个简单的办法,就是设置一个置顶文章数上限maxTopPostsShown,然后每次从所有的topPost文章中随机选取出maxTopPostsShown个文章显示出来。进一步还可以这么做:基于当前文章的tag,显示与它亲缘关系最近的topPost文章,如果没有就退回到随机选取。如果你的blog有这个需求就自己实现一下吧。

     

    [1] js代码中的Delicious.posts是一个全局对象。通过del.icio.us的开放JSON接口获得。使用方法见这里

     

    发表于 @ 2007年05月15日 14:08:00|评论(loading...)|编辑

    旧一篇: Blog外挂之:热门文章与导航栏

    评论

    #usome 发表于2007-08-08 09:51:29  IP: 125.121.24.*
    不错,我顶!
    #北京礼品 发表于2007-09-17 21:54:43  IP: 61.50.173.*
    虽然看不懂,也顶
    #传世私服 发表于2007-12-08 14:14:14  IP: 222.79.21.*
    qyccc
    #征途私服 发表于2007-12-08 14:14:34  IP: 222.79.21.*
    WDLG
    #魔兽世界私服 发表于2007-12-08 14:14:57  IP: 222.79.21.*
    IMYQ
    #cookie158 发表于2007-12-24 14:11:08  IP: 219.134.240.*
    佩服楼主的钻研精神!

    my website:
    GSM alarm system
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 刘未鹏