Typecho无插件实现同分类文章上一篇下一篇
时间:4年前 阅读:2077
这个功能因为自己突然有需要,然后去论坛搜了下发现也有人问过,帖子里有人推荐了个插件可以实现,不过我突然想到个模板函数,就是自定义文章上下篇链接的,好像就可以直接实现,不需要插件。
函数如下:
/** * 显示下一篇 * * @access public * @param string $default 如果没有下一篇,显示的默认文字 * @return void */ function theNext($widget, $default = NULL) { $db = Typecho_Db::get(); $sql = $db->select()->from('table.contents') ->where('table.contents.created > ?', $widget->created) ->where('table.contents.status = ?', 'publish') ->where('table.contents.type = ?', $widget->type) ->where('table.contents.password IS NULL') ->order('table.contents.created', Typecho_Db::SORT_ASC) ->limit(1); $content = $db->fetchRow($sql); if ($content) { $content = $widget->filter($content); $link = '<a href="' . $content['permalink'] . '" title="' . $content['title'] . '">下一篇</a>'; echo $link; } else { echo $default; } } /** * 显示上一篇 * * @access public * @param string $default 如果没有下一篇,显示的默认文字 * @return void */ function thePrev($widget, $default = NULL) { $db = Typecho_Db::get(); $sql = $db->select()->from('table.contents') ->where('table.contents.created < ?', $widget->created) ->where('table.contents.status = ?', 'publish') ->where('table.contents.type = ?', $widget->type) ->where('table.contents.password IS NULL') ->order('table.contents.created', Typecho_Db::SORT_DESC) ->limit(1); $content = $db->fetchRow($sql); if ($content) { $content = $widget->filter($content); $link = '<a href="' . $content['permalink'] . '" title="' . $content['title'] . '">上一篇</a>'; echo $link; } else { echo $default; } }
调用代码<?php thePrev($this); ?>
和<?php theNext($this); ?>
。
可以看出里面用的是数据库语句,那么实现[Typecho无插件实现同分类文章上一篇下一篇],岂不是插入个where
语句就行了,对,就是这么简单。
首先在函数里开头部分加入如下代码,获取当前文章的分类mid
@$mid=intval($widget->categories[0]['mid']);
然后在数据库语句中合适位置插入一个where
语句
->where('table.relationships.mid = ?', $mid)
好了,这就大功告成了,希望能帮得到各位。
网友评论