标签 评论 下的文章

enter image description here

本篇文章由@Rich提供 表情放在主题目录img/smilies下。 首先添加functions.php自定义评论回调部分的代码,自定义评论回调部分可以参考Typecho更简单的解决Gravatar被墙提到的方法。 然后再在functions.php将回调函数的content(); ?>修改为content); ?> 接着在functions.php下面加入代码:

/** 解析表情 */
function convertSmilies($widget)
{
    $smiliesTrans = array(
    ':?:'        => 'icon_question.gif',
    ':razz:'     => 'icon_razz.gif',
    ':sad:'      => 'icon_sad.gif',
    ':evil:'     => 'icon_evil.gif',
    ':!:'        => 'icon_exclaim.gif',
    ':smile:'    => 'icon_smile.gif',
    ':oops:'     => 'icon_redface.gif',
    ':grin:'     => 'icon_biggrin.gif',
    ':eek:'      => 'icon_surprised.gif',
    ':shock:'    => 'icon_eek.gif',
    ':???:'      => 'icon_confused.gif',
    ':cool:'     => 'icon_cool.gif',
    ':lol:'      => 'icon_lol.gif',
    ':mad:'      => 'icon_mad.gif',
    ':twisted:'  => 'icon_twisted.gif',
    ':roll:'     => 'icon_rolleyes.gif',
    ':wink:'     => 'icon_wink.gif',
    ':idea:'     => 'icon_idea.gif',
    ':arrow:'    => 'icon_arrow.gif',
    ':neutral:'  => 'icon_neutral.gif',
    ':cry:'      => 'icon_cry.gif',
    ':mrgreen:'  => 'icon_mrgreen.gif',
    '8-)'        => 'icon_cool.gif',
    '8-O'        => 'icon_eek.gif',
    ':-('        => 'icon_sad.gif',
    ':-)'        => 'icon_smile.gif',
    ':-?'        => 'icon_confused.gif',
    ':-D'        => 'icon_biggrin.gif',
    ':-P'        => 'icon_razz.gif',
    ':-o'        => 'icon_surprised.gif',
    ':-x'        => 'icon_mad.gif',
    ':-|'        => 'icon_neutral.gif',
    ';-)'        => 'icon_wink.gif',
    '8)'         => 'icon_cool.gif',
    '8O'         => 'icon_eek.gif',
    ':('         => 'icon_sad.gif',
    ':)'         => 'icon_smile.gif',
    ':?'         => 'icon_confused.gif',
    ':D'         => 'icon_biggrin.gif',
    ':P'         => 'icon_razz.gif',
    ':o'         => 'icon_surprised.gif',
    ':x'         => 'icon_mad.gif',
    ':|'         => 'icon_neutral.gif',
    ';)'         => 'icon_wink.gif',
    );
    $imgUrl = Typecho_Widget::widget('Widget_Options')->themeUrl . '/img/smilies/';
    foreach($smiliesTrans as $smiley => $img) {
        $smiliesTag[] = $smiley;
        $smiliesReplace[] = "<img src=\"$imgUrl$img\" alt=\"\" class=\"smiley\" />";
    }   
    $output = '';
    $textArr = preg_split("/(<.*>)/U", $widget, -1, PREG_SPLIT_DELIM_CAPTURE);
    $stop = count($textArr);
    for ($i = 0; $i < $stop; $i++) {
        $content = $textArr[$i];
        if ((strlen($content) > 0) && ('<' != $content{0})) {
            $content = str_replace($smiliesTag, $smiliesReplace, $content);
        }
        $output .= $content;
    }
    $output = preg_replace('/\[img=?\]*(.*?)(\[\/img)?\]/e', '"<img src=\"$1\" alt=\"" . basename("$1") . "\" />"', $output);
    echo $output;
}

接下来,在主题目录新建inc目录,然后新建smiley.php文件内容如下:

<?php $imgUrl = $this->options->themeUrl . '/img/smilies/'; ?>
<span id="smiley">
<a href="javascript:Smilies.grin(':?:')"      ><img src="<?php echo $imgUrl; ?>icon_question.gif"  alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':razz:')"   ><img src="<?php echo $imgUrl; ?>icon_razz.gif"      alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':sad:')"    ><img src="<?php echo $imgUrl; ?>icon_sad.gif"       alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':evil:')"   ><img src="<?php echo $imgUrl; ?>icon_evil.gif"      alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':!:')"      ><img src="<?php echo $imgUrl; ?>icon_exclaim.gif"   alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':smile:')"  ><img src="<?php echo $imgUrl; ?>icon_smile.gif"     alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':oops:')"   ><img src="<?php echo $imgUrl; ?>icon_redface.gif"   alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':grin:')"   ><img src="<?php echo $imgUrl; ?>icon_biggrin.gif"   alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':eek:')"    ><img src="<?php echo $imgUrl; ?>icon_surprised.gif" alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':shock:')"  ><img src="<?php echo $imgUrl; ?>icon_eek.gif"       alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':???:')"    ><img src="<?php echo $imgUrl; ?>icon_confused.gif"  alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':cool:')"   ><img src="<?php echo $imgUrl; ?>icon_cool.gif"      alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':lol:')"    ><img src="<?php echo $imgUrl; ?>icon_lol.gif"       alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':mad:')"    ><img src="<?php echo $imgUrl; ?>icon_mad.gif"       alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':twisted:')"><img src="<?php echo $imgUrl; ?>icon_twisted.gif"   alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':roll:')"   ><img src="<?php echo $imgUrl; ?>icon_rolleyes.gif"  alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':wink:')"   ><img src="<?php echo $imgUrl; ?>icon_wink.gif"      alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':idea:')"   ><img src="<?php echo $imgUrl; ?>icon_idea.gif"      alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':arrow:')"  ><img src="<?php echo $imgUrl; ?>icon_arrow.gif"     alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':neutral:')"><img src="<?php echo $imgUrl; ?>icon_neutral.gif"   alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':cry:')"    ><img src="<?php echo $imgUrl; ?>icon_cry.gif"       alt="" class="smiley" /></a>
<a href="javascript:Smilies.grin(':mrgreen:')"><img src="<?php echo $imgUrl; ?>icon_mrgreen.gif"   alt="" class="smiley" /></a>
</span>

然后编辑comments.php文件,在评论框<textarea>上面加入<p><?php include('inc/smiley.php'); ?></p> 最后是JS部分,直接丢进主题的JS里即可:

// Smilies v1.0.4 for Typecho Comments - by willin kan - URI: http://kan.willin.org/typecho/
Smilies = {
 dom : function(id) {
   return document.getElementById(id);
 },

 grin : function (tag) { // 表情
   tag = ' ' + tag + ' '; myField = this.dom('comment');
   document.selection ? (myField.focus(), sel = document.selection.createRange(), sel.text = tag, myField.focus()) : this.insertTag(tag);
 },

 insertTag : function (tag) { // 插入评论中
   myField = Smilies.dom('textarea');
   myField.selectionStart || myField.selectionStart == '0' ? (
     startPos = myField.selectionStart,
     endPos = myField.selectionEnd,
     cursorPos = startPos,
     myField.value = myField.value.substring(0, startPos)
                   + tag
                   + myField.value.substring(endPos, myField.value.length),
     cursorPos += tag.length,
     myField.focus(),
     myField.selectionStart = cursorPos,
     myField.selectionEnd = cursorPos
   ) : (
     myField.value += tag,
     myField.focus()
   );
 }
}

注:convertSmilies可以用再不同的地方上,如 或者是实现文章表情修改content(); ?>到content); ?>甚至是公告。侧边栏最新评论表情如此类推。 因为我的主题暂时并不打算加入评论表情功能,所以没有整理一套表情,请自行整理并修改文件名。  

enter image description here

上篇文章由于技术拙计,使用了非常痴呆的修改源文件去解决Gravatar被墙的问题,一旦程序更新,那么一切又要重新修改,相对来说还是很麻烦的,于是,更简单的方法来了。 将下方代码粘贴进入主题文件夹下的function.php内:

//自定义评论列表区域
function threadedComments($comments, $options) {
    $commentClass = '';
    if ($comments->authorId) {
        if ($comments->authorId == $comments->ownerId) {
            $commentClass .= ' comment-by-author';
        } else {
            $commentClass .= ' comment-by-user';
        }
    }

    $commentLevelClass = $comments->levels > 0 ? ' comment-child' : ' comment-parent';
?>

<li id="li-<?php $comments->theId(); ?>" class="comment-body<?php 
if ($comments->levels > 0) {
    echo ' comment-child';
    $comments->levelsAlt(' comment-level-odd', ' comment-level-even');
} else {
    echo ' comment-parent';
}
$comments->alt(' comment-odd', ' comment-even');
echo $commentClass;
?>">
    <div id="<?php $comments->theId(); ?>">
        <div class="comment-author">
            <?php
            //头像CDN by Rich
            $host = 'https://secure.gravatar.com'; //自定义头像CDN服务器
            $url = '/avatar/'; //自定义头像目录,一般保持默认即可
            $size = '32'; //自定义头像大小
            $rating = Helper::options()->commentsAvatarRating;
            $hash = md5(strtolower($comments->mail));
            $avatar = $host . $url . $hash . '?s=' . $size . '&r=' . $rating . '&d=';
            ?>
            <img class="avatar" src="<?php echo $avatar ?>" alt="<?php echo $comments->author; ?>" width="<?php echo $size ?>" height="<?php echo $size ?>" />
            <cite class="fn"><?php $comments->author(); ?></cite>
        </div>
        <div class="comment-meta">
            <a href="<?php $comments->permalink(); ?>"><?php $comments->date('Y-m-d H:i'); ?></a>
            <span class="comment-reply"><?php $comments->reply(); ?></span>
        </div>
        <?php $comments->content(); ?>
    </div>
<?php if ($comments->children) { ?>
    <div class="comment-children">
        <?php $comments->threadedComments($options); ?>
    </div>
<?php } ?>
</li>
<? }

OK,评论区域的头像问题就可以更简单的解决了,更新程序也不用重新修改源文件了。 头像源清参考:

https://secure.gravatar.com”可以改成其它源。

多说的源:http://gravatar.duoshuo.com

七牛镜像源:http://avacdn.qiniudn.com

七牛镜像SSH源:https://dn-avacdn.qbox.me

当然自己搭建七牛镜像,或者反向代理Gravatar也是比较简单的,就不再赘述。

如果使用“评论墙”功能,请参考 >上一篇文章<

本篇文章代码来自 @Rich

这个教程网上都转烂了,但是使用的都是图片显示等级,有一段时间追求极简,我就疯狂的压缩主题,能不用图片坚决不用,于是这个东西就诞生了,也没怎么在意,现在换到Typecho之后,更是不关注这东西了,但是今天@欧爹突然提起这个功能,想让我帮他折腾上,于是我就找到之前的主题,将代码拿出来,整理一下就发给他了。

终于有机会帮上欧爹了,我牟足了干劲,想办法满足欧爹的奇葩要求(考虑到他博客火爆程度,他嫌原本的7级不够用,于是稍微增加到了10级)

其实最烦人的就是选色,也还好,有了色阶选起来也不是特别难受,最终效果我感觉还是很不错的(详见上图) 技术含量很低,为了凑字数,打了那么多字,下面就上本篇文章的重点吧

下方代码放进functions.php内

//获取访客VIP样式
function get_author_class($comment_author_email,$user_id){
global $wpdb; $author_count = count($wpdb->get_results( "SELECT comment_ID as author_count FROM $wpdb->comments WHERE comment_author_email = '$comment_author_email' ")); 
/*如果不需要管理员显示VIP标签,就把下面一行的“//”去掉*/
//$adminEmail = get_option('admin_email');if($comment_author_email ==$adminEmail) return;
if($author_count>=5 && $author_count<10) echo '<a class="vip1" title="LV.1">LV.1</a>';
else if($author_count>=10 && $author_count<50) echo '<a class="vip2" title="LV.2">LV.2</a>';
else if($author_count>=50 && $author_count<150) echo '<a class="vip3" title="LV.3">LV.3</a>';
else if($author_count>=151 && $author_count<300) echo '<a class="vip4" title="LV.4">LV.4</a>';
else if($author_count>=301 &&$author_count<450) echo '<a class="vip5" title="LV.5">LV.5</a>';
else if($author_count>=451 && $author_count<550) echo '<a class="vip6" title="LV.6">LV.6</a>';
else if($author_count>=551 && $author_count<700) echo '<a class="vip7" title="LV.7">LV.7</a>'; 
else if($author_count>=701 && $author_count<850) echo '<a class="vip8" title="LV.8">LV.8</a>'; 
else if($author_count>=851 && $author_count<1050) echo '<a class="vip9" title="LV.9">LV.9</a>'; 
else if($author_count>=1200) echo '<a class="vip10" title="神一样的人物 V1000+">LV.10</a>'; }
//认证用户
function comment_links_title($email = ''){
$links=array( 
'1'=>'test@163.com', 
'2'=>'test@gmail.com', 
'3'=>'test@qq.com', );
//添加你想要设置个性图片的评论者Email,格式参考我写的
if(in_array($email,$links)) echo '<a class="vp" title="认证用户">认证</a>';
} 

将下方代码放进评论内容循环内需要显示的地方

<?php comment_links_title($comment->comment_author_email);//认证
if(user_can($comment->user_id, 1)){echo "<a title='本站博主' class='vip'>博主</a>";}; //博主
get_author_class($comment->comment_author_email,$comment->user_id);//等级?>

**下面是CSS,样式仅供参考**

/*评论者VIP显示功能的样式*/
.vp,.vip,.vip1,.vip2,.vip3,.vip4,.vip5,.vip6,.vip7,.vip8,.vip9,.vip10{overflow:hidden;padding:0 4px;color:#fff !important;margin:0 6px 0 0;} .vp:hover,.vip:hover,.vip1:hover,.vip2:hover,.vip3:hover,.vip4:hover,.vip5:hover,.vip6:hover,.vip7:hover,.vip8:hover,.vip9:hover,.vip10:hover{background:#aaa;}
.vp{background:#2ae;}
.vip{background:#90EE90;} 
.vip1{background:#C1FFC1;} 
.vip2{background:#98FB98;} 
.vip3{background:#7FFF00;} 
.vip4{background:#FFEC8B;} 
.vip5{background:#FFC125;} 
.vip6{background:#FFA500;} 
.vip7{background:#C6E2FF;} 
.vip8{background:#A4D3EE;} 
.vip9{background:#7EC0EE;} 
.vip10{background:#EE2C2C;}
至此,本篇文章结束