博客侧栏跟随以及随机文章、热门文章、热评文章的实现

由于之前我用的博客模版在某些地方存在一些兼容性的问题,一直就想着找个机会换掉,可是在网上也始终找不到符合我要求的模版。最后,我也只好花了两个星期的工作之外的业余时间慢慢的搭建了现在博客用的这个模版,我喜欢简单,喜欢原始的文字元素,我把这个主题命名为easyed,是easy和yed的缩写,一则表示该主题的简单,二则表示该主题是为了方便我(yedward)而定制的。

这个主题的功能实现起来都非常简单,完全就没有什么地方多么的与众不同,其中博客侧栏、随机文章、热门文章、热评文章这几个功能的实现,我是在网上查找了资料,还是不错的,收藏在这里,以备后用。

1、博客侧栏跟随

<script type="text/javascript">
  var oDiv=document.getElementById('float');
  var H=0;
  var Y=oDiv;
  while(Y) {
  H+=Y.offsetTop;
  Y=Y.offsetParent;
  }
  window.onscroll=function(){
  var s=document.body.scrollTop||document.documentElement.scrollTop;
  if(s>H){
  oDiv.style.position='fixed';
  oDiv.style.top=0;} else {
  oDiv.style.position='';
  oDiv.style.top='';}
  }
</script>

侧栏跟随功能的实现,网上提供了很多方法,我借鉴了其中一种,然后简单的在原基础上改了一下,最后就成了上面这样,最终的实现效果也就是现在我博客的右边侧栏的那种效果。

2、Zblog PHP随机文章、热门文章、热评文章

我的博客用的是Zblog的PHP版本,实现的这几个功能都是参考的网上资源,感谢“宋镇江博客”的无私奉献!

检查下主题下面是否存在include.php文件,如果存在就直接在include.php文件中添加下面这段代码。如果不存在include.php文件,就先创建该文件,并在主题信息文件theme.xml中标签引用文件(备注:我没有在theme.xml中添加一样可以使用),然后添加如下代码:

<?php
/**
 * 获取文章列表
 * @param int $count 数量
 * @param null $cate 分类ID
 * @param null $auth 用户ID
 * @param null $date 日期
 * @param null $tags 标签
 * @param null $search 搜索关键词
 * @param null $order 排序
 * @param null $option
 * @return array|mixed
 */
function TcgetList($count = 10, $cate = null, $auth = null, $date = null, $tags = null, $search = null, $option = null,$order=null) {
    global $zbp;
    if (!is_array($option)) {
        $option = array();
    }
    if (!isset($option['only_ontop']))
        $option['only_ontop'] = false;
    if (!isset($option['only_not_ontop']))
        $option['only_not_ontop'] = false;
    if (!isset($option['has_subcate']))
        $option['has_subcate'] = false;
    if (!isset($option['is_related']))
        $option['is_related'] = false;
    if ($option['is_related']) {
        $at = $zbp->GetPostByID($option['is_related']);
        $tags = $at->Tags;
        if (!$tags)
            return array();
        $count = $count + 1;
    }
    if ($option['only_ontop'] == true) {
        $w[] = array('=', 'log_IsTop', 0);
    } elseif ($option['only_not_ontop'] == true) {
        $w[] = array('=', 'log_IsTop', 1);
    }
    $w = array();
    $w[] = array('=', 'log_Status', 0);
    $articles = array();
    if (!is_null($cate)) {
        $category = new Category;
        $category = $zbp->GetCategoryByID($cate);
        if ($category->ID > 0) {
            if (!$option['has_subcate']) {
                $w[] = array('=', 'log_CateID', $category->ID);
            } else {
                $arysubcate = array();
                $arysubcate[] = array('log_CateID', $category->ID);
                foreach ($zbp->categorys[$category->ID]->SubCategorys as $subcate) {
                    $arysubcate[] = array('log_CateID', $subcate->ID);
                }
                $w[] = array('array', $arysubcate);
            }
        }
    }
    if (!is_null($auth)) {
        $author = new Member;
        $author = $zbp->GetMemberByID($auth);
 
        if ($author->ID > 0) {
            $w[] = array('=', 'log_AuthorID', $author->ID);
        }
    }
    if (!is_null($date)) {
        $datetime = strtotime($date);
        if ($datetime) {
            $datetitle = str_replace(array('%y%', '%m%'), array(date('Y', $datetime), date('n', $datetime)), $zbp->lang['msg']['year_month']);
            $w[] = array('BETWEEN', 'log_PostTime', $datetime, strtotime('+1 month', $datetime));
        }
    }
    if (!is_null($tags)) {
        $tag = new Tag;
        if (is_array($tags)) {
            $ta = array();
            foreach ($tags as $t) {
                $ta[] = array('log_Tag', '%{' . $t->ID . '}%');
            }
            $w[] = array('array_like', $ta);
            unset($ta);
        } else {
            if (is_int($tags)) {
                $tag = $zbp->GetTagByID($tags);
            } else {
                $tag = $zbp->GetTagByAliasOrName($tags);
            }
            if ($tag->ID > 0) {
                $w[] = array('LIKE', 'log_Tag', '%{' . $tag->ID . '}%');
            }
        }
    }
    if (is_string($search)) {
        $search=trim($search);
        if ($search!=='') {
            $w[] = array('search', 'log_Content', 'log_Intro', 'log_Title', $search);
        }
    }    
    if(!empty($order)){
    if($order=='new'){
        $order = array('log_PostTime'=>'DESC');
    }
    if($order=='hot'){
        $order = array('log_ViewNums'=>'DESC');
    }
    if($order=='comm'){
        $order = array('log_CommNums'=>'DESC');
    }
    if($order=='rand'){
        $order = array('rand()'=>' ');
    }
    }
    $articles = $zbp->GetArticleList('*', $w, $order, $count, null, false);
    if ($option['is_related']) {
        foreach ($articles as $k => $a) {
            if ($a->ID == $option['is_related'])
                unset($articles[$k]);
        }
        if (count($articles) == $count){
            array_pop($articles);
        }
    }
    return $articles;
}
?>

函数调用代码:方法和官方给出的GetList一样,区别是比GetList多了一个参数条件。

热门文章:

{$array = TcgetList(10,null,null,null,null,null,null,'hot');}
<ul id="related">
{foreach $array as $related}
    <li><span class="time">{$related.Time('m-d')}</span><span class="title"><a href="{$related.Url}" title="{$related.Title}">{$related.Title}</a></span></li>
{/foreach}
</ul>

随机文章:

{$array = TcgetList(10,null,null,null,null,null,null,'rand');}
<ul id="related">
{foreach $array as $related}
    <li><span class="time">{$related.Time('m-d')}</span><span class="title"><a href="{$related.Url}" title="{$related.Title}">{$related.Title}</a></span></li>
{/foreach}
</ul>

热评文章:

{$array = TcgetList(10,null,null,null,null,null,null,'comm');}
<ul id="related">
{foreach $array as $related}
    <li><span class="time">{$related.Time('m-d')}</span><span class="title"><a href="{$related.Url}" title="{$related.Title}">{$related.Title}</a></span></li>
{/foreach}
</ul>

上面这些功能我都在我博客中测试过,没有问题。

本文标题:博客侧栏跟随以及随机文章、热门文章、热评文章的实现

本文链接:http://yedward.net/?id=153

本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处。

相关文章