当前位置:首页 > 原创作品 > emlog修改分页样式(分页函数)

emlog修改分页样式(分页函数)

作者:星之宇 ┊ 时间:2012-12-25 9:55 ┊ 分类: 原创作品 ┊ 阅读:24064 ┊ 评论:11

有人说我的分页不错,跟我要我的分页样式,本着共享的精神我就共享出来了,本站对emlog修改的代码多可以分享,当然详细代码请往下仔细的看。

首先说到分页样式,那么主要去修改emlog的分页函数。那么emlog的分页函数在哪里呢?其实emlog的分页函数是集成在内核的基础函数库中的,所以要修改分页函数就要HACK程序。

注:HACK程序前请先备份网站。


下面来说说如何修改,emlog5.0.1源程序:

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=\"首页\">&laquo;</a><em>...</em>$re";
	if ($page + 5 < $pnums)
		$re .= "<em>...</em> <a href=\"$url$pnums$anchor\" title=\"尾页\">&raquo;</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页的也就不显示不足的页数。

点击查看原图


by 2013-03-06 更新

注意:由于使用了下拉菜单,所以可以在地址栏自己填写页数,由于没有判断页数多少,所以会造成有的版本的mysql的查询语句中limit超过限制而报错。

虽然问题不大,但是还是会暴露查询语句,显示数据库错误的。

解决方法:

1.不用下拉菜单(跳转代码),删除即可。

2.修改lib/mysql.php文件(大概第59行)

emMsg("SQL语句执行错误:$sql <br />" . $this->geterror());

修改为

emMsg(show_404_page());

目前有 11 条评论
avatar
爱创业 2015-06-26 22:52回复7楼
我修改了,还是不分页,需要在文章中加入分页代码吗?
avatar
星之宇 2015-06-27 11:58回复
@爱创业:这个只是文章列表的分页,不是文章页内分页
avatar
Crit 2013-04-14 18:37回复6楼
学习了,照博主说的,做了个输入框跳页的,不过发现程序没对超过最大页数进行过滤,输入0也可以。,
avatar
星之宇 2013-04-14 23:07回复
@Crit:0是首页,超过最大页数是没有!这里如果要过滤不单单要改分页函数。
avatar
阿修 2013-02-13 15:35回复5楼
看了下你的多个分页,原来采用的是把分页显示尺寸缩小的办法。我去改改看
avatar
阿修 2013-02-13 15:30回复4楼
“PS:写在最后,如果不喜欢跳转的那个选择方式,还可以用填入页数跳转的分页,代码实现也差不多,我这里就不一一说明了,以后有时间或者有朋友需要的话就补上去 ”

另外,个人感觉填入页数跳转的分页跳转比较好,期待博主的分享。
avatar
星之宇 2013-02-13 15:32回复
@阿修:嗯,这个以后会考虑的。
avatar
阿修 2013-02-13 15:28回复3楼
第一页显示1~6页,第二页显示1~7页……一直到第六页显示1~11页,之后第七页显示2~12,维持11个分页数目。从倒数第六页开始前面开始减少分页数,直到最后一页恢复显示6个分页数目。

所以感觉代码还是有一点小问题的,希望能修复。最好是控制一直显示6个分页数目,否则后面的跳转页面代码是不方便添加的。
avatar
阿修 2013-02-13 15:21回复2楼
经测试有点小问题,需要页面超过10以上就会暴露出来。建议博主把每页显示日志设为1或2测试下分页。除了开始5页和最后5页中间的分页会增加页面数量,大概是10页,再加上那个跳转的话就会把模板挤压变形。
avatar
星之宇 2013-02-13 15:29回复
@阿修:部分模版可能会出现,你可以试试本站的,是不会有这种情况的。
avatar
快播搜索 2013-01-05 20:55回复1楼
深刻学习了,想转载,可以吗