在制作Typecho主题时,有的时候会想弄个随机推荐文章的功能,所以我就简单弄了个函数,可以随机输出n篇文章,同时追加一些参数还可以输出当前文章分类下的随机文章,具体如下:
函数部分
在主题functions.php
文件中添加如下函数。
class Widget_Post_tongleisuiji 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'));
}
}
调用输出
在主题需要的地方调用如下内容即可随机输出多篇文章,样式需要自行美化。
<?php
$mid='';//此参数为空时为随机文章,为分类mid时则为当前分类下的随机文章
$cid=0;//此参数填写当前文章的cid即可在随机文章时不输出当前文章
$size=5;//随机输出文章的数量
$this->widget('Widget_Post_tongleisuiji@suiji', '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; ?>
拓展内容
在文章页面下,调用这个函数时可以这样填写参数
$cid=$this->cid;//这样设置下cid,随机推荐文章时就不会与当前文章重复了
$mid=$this->categories[0]['mid'];//这样设置函数即可获得文章的第一个分类,然后随机输出这个分类下的文章
$size=5;
有的时候我们其他页面和文章页面都是在同一处输出随机文章,此时我们就可以使用if
判断来为不同页面输入不同参数,如
$mid='';
$cid=0;
$size=5;
if ($this->is('post')){
$cid=$this->cid;
$mid=$this->categories[0]['mid'];
$size=5;
}
版权属于:泽泽社长
本文链接:https://blog.zezeshe.com/archives/typecho-random-random-category.html
本站未注明转载的文章均为原创,并采用
CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!
如何单独页面输出相关分类下的文章
独立页面模板+输出分类文章(http://t.160.me/11.html)
我的意思是从一篇文章下点击相关文章跳转到单独的页面然后输出改文章的相关文章,感觉好像有点麻烦![狗头](https://blog.zezeshe.com/Plain/biaoqing/%E7%8B%97%E5%A4%B4.png)
我的回答依旧是那样,比如点击相关文章后页面跳转到相关文章的独立页面同时传递文章cid参数,然后相关文章页面根据cid输出相关文章
随机文章这个,需要显示一张缩略图改怎么做呢
正常使用你的缩略图函数就行,函数中的$this改成$to
不错不错,学到了。