上一篇: 下一篇:

Sandbox使用Thread Comment小心得

星期三,十月29日, 2008  |  12:59:35分类:wordpress  |  标签:  |  

前段时间使用了偶爱偶家的 Thread Comment ,插件自不用说,非常好用,不过在和我的sandbox配合时,有一些显示效果上的小问题。昨天一时兴起,修改sandbox的评论显示让其支持gravatar,同时也动手磨合了一下两个系统。

问题其实不大,最开始就是背景配色,这个很简单,修改一下css,去掉一个背景色就OK了。然后显示gravatar,也只是一个函数的问题。主要的问题是,我用的这套基于sandbox的css,可以在文章作者的评论的作者名后面加上一排星星的背景,用于区分作者和浏览者。但是用了thread comment后,作者线性回复的评论中,就不会显示那一排星星。

翻阅其代码可见,sandbox在评论区一开始是这样一个结构:

<li id="comment-<?php comment_ID() ?>" class="<?php sandbox_comment_class() ?>">

其中“sandbox_comment_class()”是sandbox提供的一个函数,官方对这个函数的解释可见这个页面,简言之就是,对于作者回复的文章,class会包括bypostauthor这个属性。

于是,在CSS中,配合下面这行定义,就可以实现在作者的评论上添加星星背景。

li.bypostauthor div.comment-author {background:#f0f0f0 url(starbk.png) top left repeat-x}

这里就出现了问题,对于独立的评论而言,每个评论隶属于一个li结构,因此每个评论会单独进行判定。但是使用了thread comment后,所有线性的评论同属于一个li,因此整个评论都不会被加星。

为了解决这个问题,考虑在li中再次嵌套li,修改thread comment的配置,添加li后,显示更为混乱,貌似这种显示是不可取的,于是,干脆将评论中用户名和发表时间的两个div再装在一个div里面,该div会调用sandbox_comment_class获得一个class,并且将默认的显示代码全部换成sandbox的显示代码,于是将整个html修改为:

  1. <div class="comment-childs<?php echo $deep%2 ? ' chalt' : ''; ?>" id="comment-[ID]">
  2.     <div class="<?php sandbox_comment_class() ?>">
  3.         <div class="comment-author vcard"><?php if(function_exists("get_avatar")) echo get_avatar( $comment, 32 );?><span class="fn n"><?php comment_author_link() ?></span><font size=2>回复说:</font></div>
  4.         <div class="comment-meta"><?php printf(__('Posted %1$s at %2$s <span class="meta-sep">|</span>
  5.             <a href="%3$s" title="Permalink to this comment">Permalink</a>','sandbox'),
  6.             get_comment_date(),
  7.             get_comment_time(),'#comment-' . get_comment_ID() );
  8.             edit_comment_link(__('Edit', 'sandbox'), ' <span class="meta-sep">|</span> <span class="edit-link">', '</span>'); ?>
  9.         </div>
  10.     </div>
  11.     <?php if ($comment->comment_approved == '0') _e("ttttt<span class='unapproved'>Your comment is awaiting moderation.</span>n", 'sandbox') ?>
  12.     [content]
  13. </div>

并且在sandbox的css中加入一句:

div.bypostauthor div.comment-author {background:#f0f0f0 url(starbk.png) top left repeat-x}

初步测试成功。可以正常的加星了。

UPDATE:后来发现,在几层嵌套后,后面的sandbox_comment_class可能返回byuser,但是不能正常返回bypostauthor,也许是函数本身的问题。由于我的小站只有我一个用户,因此将上面最后的CSS换为下面这样即可暂时彻底的解决问题。

div.byuser div.comment-author {background:#f0f0f0 url(starbk.png) top left repeat-x}

另外,这样应该会出现这种问题:即如果第一个评论是作者添加的,那么其后的一串线性回复都在同一个li下面,并且该li有bypostauthor属性。那么那一串都会被加星。不过鉴于一般我不会主动在自己的文章下写评论,这个问题暂时可以无视。

喜欢本文,那就收藏到: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网

2条评论 关于 “Sandbox使用Thread Comment小心得”

  1. 偶爱偶家 发表于: 十月 30th, 2008 12:01:56

    您这个太复杂了, 其实wp thread comment 自身已经包含了判断是否为文章作者或者管理员的函数, 直接把sandbox的css引用进来就可以了.

    [回复这南瓜]
  2. 龙天 发表于: 十月 30th, 2008 20:00:11

    呵呵,多谢指教,我也发现了,但是我比较懒嘛,这样弄比较方便,都是拷贝的代码,不用动脑子~:)

    [回复这南瓜]

发表您的评论

验证码:click to change点击图片可更换