emlog修改分页样式(分页函数)
首先说到分页样式,那么主要去修改emlog的分页函数。那么emlog的分页函数在哪里呢?其实emlog的分页函数是集成在内核的基础函数库中的,所以要修改分页函数就要HACK程序。
注:HACK程序前请先备份网站。
1.找到基础函数库(function.base.php)中的分页函数,大概在function.base.php的220~250行(前提是你的function.base.php的原版程序)。function.base.php在include/lib的文件夹下。
源程序的分页函数如下:
/**
* 分页函数
*
* @param int $count 条目总数
* @param int $perlogs 每页显示条数目
* @param int $page 当前页码
* @param string $url 页码的地址
*/
function pagination($count, $perlogs, $page, $url, $anchor = '') {
$pnums = @ceil($count / $perlogs);
$re = '';
$urlHome = preg_replace("|[\?&/][^\./\?&=]*page[=/\-]|", "", $url);
for ($i = $page - 5; $i <= $page + 5 && $i <= $pnums; $i++) {
if ($i > 0) {
if ($i == $page) {
$re .= " <span>$i</span> ";
} elseif ($i == 1) {
$re .= " <a href=\"$urlHome$anchor\">$i</a> ";
} else {
$re .= " <a href=\"$url$i$anchor\">$i</a> ";
}
}
}
if ($page > 6)
$re = "<a href=\"{$urlHome}$anchor\" title=\"首页\">«</a><em>...</em>$re";
if ($page + 5 < $pnums)
$re .= "<em>...</em> <a href=\"$url$pnums$anchor\" title=\"尾页\">»</a>";
if ($pnums <= 1)
$re = '';
return $re;
}
2.要做到我本博客的分页样式,要做如下的修改,我直接贴出源代码了。
/**
* 分页函数
*
* @param int $count 条目总数
* @param int $perlogs 每页显示条数目
* @param int $page 当前页码
* @param string $url 页码的地址
*/
function pagination($count,$perlogs,$page,$url,$anchor=''){
$pnums = @ceil($count / $perlogs);
$page = @min($pnums,$page);
$prepg=$page-1; //上一页
$nextpg=($page==$pnums ? 0 : $page+1); //下一页
$urlHome = preg_replace("|[\?&/][^\./\?&=]*page[=/\-]|","",$url);
#开始分页导航内容
$re = "";
if($pnums<=1) return false; //如果只有一页则跳出
if($page!=1) $re .=" <a href=\"$urlHome$anchor\">首页</a> ";
if($prepg) $re .=" <a href=\"$url$prepg$anchor\">前页</a> ";
for ($i = $page-5;$i <= $page+5 && $i <= $pnums; $i++){
if ($i > 0){
if ($i == $page){
$re .= " <span>$i</span> ";
} elseif($i == 1) {
$re .= " <a href=\"$urlHome$anchor\">$i</a> ";
} else {
$re .= " <a href=\"$url$i$anchor\">$i</a> ";
}
}
}
if($nextpg) $re .=" <a href=\"$url$nextpg$anchor\">后页</a> ";
if($page!=$pnums) $re.=" <a href=\"$url$pnums$anchor\" title=\"尾页\">尾页</a>";
#下拉跳转列表,循环列出所有页码
$re .=" 跳转到第 <select name='topage' size='1' onchange='window.location=\"$url\"+this.value'>\n";
for($i=1;$i<=$pnums;$i++){
if($i==$page) $re .="<option value='$i' selected>$i</option>\n";
else $re .="<option value='$i'>$i</option>\n";
}
$re .="</select> 页,共 $pnums 页";
return $re;
}
源代码中我做了简单的说明,我也不做具体说明了,有问题的评论提问。
还有如果不要下拉式跳转的换,删掉以下代码就可以了:
#下拉跳转列表,循环列出所有页码
$re .=" 跳转到第 <select name='topage' size='1' onchange='window.location=\"$url\"+this.value'>\n";
for($i=1;$i<=$pnums;$i++){
if($i==$page) $re .="<option value='$i' selected>$i</option>\n";
else $re .="<option value='$i'>$i</option>\n";
}
$re .="页,共 $pnums 页";
当然你如果还要共几页,这个显示的话。上面删掉的最后一行不要删除而且需要修改如下:
$re .="共 $pnums 页";
PS:写在最后,如果不喜欢跳转的那个选择方式,还可以用填入页数跳转的分页,代码实现也差不多,我这里就不一一说明了,以后有时间或者有朋友需要的话就补上去。
补一张我博客的效果图说明图:
关于选中的当前页数显示的页数多少,当前页数前后多+5页,不足5页的也就不显示不足的页数。
注意:由于使用了下拉菜单,所以可以在地址栏自己填写页数,由于没有判断页数多少,所以会造成有的版本的mysql的查询语句中limit超过限制而报错。
虽然问题不大,但是还是会暴露查询语句,显示数据库错误的。
解决方法:
1.不用下拉菜单(跳转代码),删除即可。
2.修改lib/mysql.php文件(大概第59行)
emMsg("SQL语句执行错误:$sql <br />" . $this->geterror());
修改为
emMsg(show_404_page());
