最近,在制作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; }