分享Zblog博客热门文章、随机文章和热评文章的调用代码

由 willer 发布

Zblog中,热门文章、随机文章、热评文章是最常见并且最经常被调用的类型,不过zblog官方没有提供相关的实现标签代码,我们可以通过在include.php文件中添加以下代码的形式来实现针对热门文章、随机文章和热评文章的代码调用。


实现逻辑和步骤如下:


首先判断是否存在include.php文件,如果主题存在include.php文件,直接在文件中添加以下代码;如果不存在include.php文件,则先创建该文件,并在主题信息文件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>


运行后即可完美实现三种文章的调用了。