由于需要调用Typecho的相关文章、随机文章、热门文章显示,整理了对应的代码列出,以备不时之需。其中的热门文章在typecho的handsome主题中可以正常使用,对于其它主题应该也可以吧?!欢迎尝试:

相关文章

post.php中,在需要调用的地方填入以下代码:

<!-- 相关文章 -->
<?php $this->related(10)->to($relatedPosts); ?>
    <?php if ($relatedPosts->have()): ?>
        <h2>相关文章</h2>
        <ul>
            <?php while ($relatedPosts->next()): ?>
            <li><a href="<?php $relatedPosts->permalink(); ?>" title="<?php $relatedPosts->title(); ?>"><?php $relatedPosts->title(); ?></a></li>
            <?php endwhile; ?>
        </ul>
    <?php endif; ?>

其中的related(10),数字10表示调用的文章数量,如果调用3篇文章,就是related(3)。

随机文章

在function.php里(handsome主题我放在了functions_mine.php里),在最后添加以下代码:

function getRandomPosts($random)
{
    $modified = $random->modified;
    $db = Typecho_Db::get();
    $adapterName = $db->getAdapterName();//兼容非MySQL数据库
    if ($adapterName == 'pgsql' || $adapterName == 'Pdo_Pgsql' || $adapterName == 'Pdo_SQLite' || $adapterName == 'SQLite') {
        $order_by = 'RANDOM()';
    } else {
        $order_by = 'RAND()';
    }
    $sql = $db->select()->from('table.contents')
        ->where('status = ?', 'publish')
        ->where('table.contents.created <= ?', time())
        ->where('type = ?', 'post')
        ->limit($random)
        ->order($order_by);

    $result = $db->fetchAll($sql);
    foreach ($result as $val) {
        $val = Typecho_Widget::widget('Widget_Abstract_Contents')->push($val);
        echo '<li><a href="' . $val['permalink'] . '" title="' . $val['title'] . '"> ' . $val['title'] . ' </a></li>';
    }
}

然后在需要添加随机文章的地方加上代码: <?php getRandomPosts(3);?> ,数字3为要调用的文章数量。

例如:

<!--随机文章,调用3篇文章-->
<h2>随机文章</h2>
<ul>
    <?php getRandomPosts(3);?>
</ul>

热门文章

根据需要,热门文章可以选择按照评论数目浏览数排序,在function.php里(handsome主题我放在了functions_mine.php里),在最后添加以下代码:

function returnHotPostsTtt($hot,$num)
{
    $options = mget();
    $days = 99999999999999;
    $time = time() - (24 * 60 * 60 * $days);
    $db = Typecho_Db::get();
    $prefix = $db->getPrefix();
    if (!array_key_exists('views', $db->fetchRow($db->select()->from('table.contents')))) {
        $db->query('ALTER TABLE ' . $prefix . 'contents ADD views INTEGER(10) DEFAULT 0;');
    }
    if ($hot == "pinglun") {
        $orderType = 'commentsNum';
    } else {
        $orderType = 'views';
    }
    $sql = $db->select()->from('table.contents')
        ->where('created >= ?', $time)
        ->where('table.contents.created <= ?', time())
        ->where('type = ?', 'post')
        ->where('status =?', 'publish')
        ->limit($num)
        ->order($orderType, Typecho_Db::SORT_DESC);
    $result = $db->fetchAll($sql);
    foreach ($result as $val) {
        $val = Typecho_Widget::widget('Widget_Abstract_Contents')->push($val);
        echo '<li><a href="' . $val['permalink'] . '" title="' . $val['title'] . '"> ' . $val['title'] . ' </a></li>';
    }
}

在需要添加随机文章的地方加上代码:<?php returnHotPostsTtt(pinglun,3);?>,其中的pinglun指的是按照评论数量排列,此时其中必须为pinglun;如果将其中的pinglun改为liulan或任意字母,则按照浏览数量排序;数字3表示要调用的文章数量。

例如:

<!--热门文章-按评论数,调用3篇文章-->
<h2>热门文章-按评论数</h2>
<ul>
    <?php returnHotPostsTtt(pinglun,3);?>
</ul>

<!--热门文章-按浏览数,调用4篇文章-->
<h2>热门文章-按浏览数</h2>
<ul>
    <?php returnHotPostsTtt(liulan,4);?>
</ul>

相关文章、随机文章的样式美化

Last modification:November 14, 2021
如果觉得我的文章对你有用,请随意赞赏