原创Typecho

详细教程帮你实现Typecho调用同一分类下的随机文章功能

本文阅读 3 分钟
首页 Typecho 正文

前面我们提到过 Typecho调用出同分类最热门文章并展示出来 ,一般来说,这样显示热门文章经常的浏览量会越累积越多,那么对于文章右侧的内容就可能造成千年不变了,会让搜索引擎误以为这个站点更新很少,为此我们还可以实现Typecho调用同分类下的随机文章,因为是随机的显示,所以当搜索引擎来到页面的时候,经常展示不同的内容,而且对于访客来说,也可以有不同的内容推荐给他们,这样无疑对于访客更加友好,会让所有的内容都机会展示给访客。
那么我们来看看具体的实现过程。

class Widget_Rand_Post_By_Category extends Widget_Abstract_Contents
{
    public function __construct($request, $response, $params = NULL)
    {
        parent::__construct($request, $response, $params);
        $this->parameter->setDefault(array('pageSize' => $this->options->commentsListSize, 'parentId' => 0, 'ignoreAuthor' => false));
    }
    public function execute()
    {
    $adapterName = $this->db->getAdapterName();//兼容非MySQL数据库
    if($adapterName == 'pgsql' || $adapterName == 'Pdo_Pgsql' || $adapterName == 'Pdo_SQLite' || $adapterName == 'SQLite'){
        $order_by = 'RANDOM()';
    }else{
        $order_by = 'RAND()';
    }   
$select  = $this->select()->from('table.contents')
->join('table.relationships', 'table.contents.cid = table.relationships.cid');
if($this->parameter->mid>0){
$select->where('table.relationships.mid = ?', $this->parameter->mid);
}
$select->where('table.contents.cid <> ?', $this->parameter->cid)
->where("table.contents.password IS NULL OR table.contents.password = ''")
->where('table.contents.type = ?', 'post')
->limit($this->parameter->pageSize)
->order($order_by);
$this->db->fetchAll($select, array($this, 'push'));
    }
}

首先我们需要把上面的代码复制到Typecho主题的function.php文件中,然后在我们需要调用的地方使用以下代码:

<?php 
$mid='';//此参数为空时为随机文章,为分类mid时则为当前分类下的随机文章
$cid=0;//此参数填写当前文章的cid即可在随机文章时不输出当前文章
$size=5;//随机输出文章的数量
$this->widget('Widget_Rand_Post_By_Category@'.$mid, 'mid='.$mid.'&pageSize='.$size.'&cid='.$cid)->to($to);?>
<?php if($to->have()): ?>
<?php while($to->next()): ?>
<?php $to->title(); ?>
<?php $to->excerpt(150, '...'); ?>
<?php $to->permalink() ?>
<?php endwhile; ?>
<?php endif; ?>

这里并没有对页面进行样式美化,每个人的主题样式不同,大家可以根据自己的主题模板进行个性化的美化。
Typecho调用同分类下的随机文章实现难度并不大,最主要的是对Tyepcho数据库的使用方法要熟悉,我之前也有列举出 Typecho主题插件制作常用的数据库方法 ,只要能掌握这些基础,就可以获得各种自己需要的数据。
另外这个方法比较好的一点就是它的写法非常接近Typecho原生函数的风格,在typecho模板调用的时候使用起来非常舒服,这点也是学习了泽泽大佬博客里了解到的,大家想学习的话,可以去他博客那里翻翻,个人认为他那里真是个宝藏博客,经常学会一些实用的Typecho技巧。

原创文章,作者:努力的牛奋,如若转载,请注明出处:https://mokev.com/64.html
Typecho获取上一篇和下一篇文章的封面
« 上一篇 03-14
Typecho主题模板实现同分类的上一篇下一篇文章调用
下一篇 » 03-15

热门文章

标签TAG

没有任何标签