最近,在制作Z-Blog单本小说主题的时候,需要用到上下章调用,Z-Blog默认的上下文调用是按照全站进行的,而小说站需要调用同栏目的上下文,因此自己研究着写了一段代码。
实现原理,上一篇文章获取方法:查询当前ID小的数据并Desc降序排列,第一个就是上一篇;下一篇文章获取方法:查询比当前ID大的数据并Asc升序排列,第一个就是下一篇;如果没有上一篇或者下一篇就设置返回目录。
function heie_Getprenext($aid,$CategoryID,$type){
global $zbp;
$where=array();
array_push($where,array('=','log_Status','0'));
if($type == 'pre'){
$order = array('log_ID'=>'DESC');
array_push($where,array('<','log_ID',$aid));
}else{
$order = array('log_ID'=>'ASC');
array_push($where,array('>','log_ID',$aid));
}
$article_arr=$zbp->GetArticleList(array('*'),$where,$order,array('1'),'');
if(empty($article_arr)){
$articles ='<a href="'.$zbp->categorys[$CategoryID]->Url.'">返回目录</a>';
}else{
foreach($article_arr as $article){
$articles = '<a href="'.$article->Url.'">'.$article->Title.'</a>';
}
if($type == 'pre'){
$articles = '上一章:'.$articles;
}else{
$articles = '下一章:'.$articles;
}
}
return $articles;
}发现有一个BUG,忘了添加WHERE条件来控制调用同分类上下文,以下为最新代码:
function heie_Getprenext($aid,$CategoryID,$type){
global $zbp;
$where=array();
array_push($where,array('=','log_Status','0'));
array_push($where,array('=','log_CateID',$CategoryID));
if($type == 'pre'){
$order = array('log_ID'=>'DESC');
array_push($where,array('<','log_ID',$aid));
}else{
$order = array('log_ID'=>'ASC');
array_push($where,array('>','log_ID',$aid));
}
$article_arr=$zbp->GetArticleList(array('*'),$where,$order,array('1'),'');
if(empty($article_arr)){
$articles ='<a href="'.$zbp->categorys[$CategoryID]->Url.'">返回目录</a>';
}else{
foreach($article_arr as $article){
$articles = '<a href="'.$article->Url.'">'.$article->Title.'</a>';
}
if($type == 'pre'){
$articles = '上一章:'.$articles;
}else{
$articles = '下一章:'.$articles;
}
}
return $articles;
}