smarty下实现的分页,可以之间显示的页数范围可调($ShowPageNum)。
图片为该值设为2时的截图(设为2时,即显示当前页的前后两页的直接链接)。
php代码:
<?php
// 初始化相关,具体见官网实例:
// http://www.smarty.net/docsv2/en/installing.smarty.extended.tpl
require('setup.php');
// 具体的数据操作,与分页无关,可以无视
require('common/sql_actions.php');
$smarty = new Smarty_GuestBook();
/******* for Pages ***********/
$id; // 模拟实际应用需要传递给其他页的参数
$id = isset($_GET['id'])?intval($_GET['id']):555;
echo $id;
$smarty->assign('id', $id);
$page = isset($_GET['page'])?intval($_GET['page']):1;
$offset = $page - 1;
$EachCnt = 2;
$condition = ""; // 实际搜索的逻辑条件
$condition .= "limit ".$offset * $EachCnt.", ".$EachCnt;
$sql_rows = sql_get_infos($condition); // 根据条件搜索EachCnt条数据
$smarty->assign('resultID', $sql_rows); // 将搜索结果传给tpl
$total_count = sql_get_cnt($condition);
/******** set the start and end page ****/
$ShowPageNum = 2; // 直接显示本页前后的ShowPageNum页的链接
$total_page = ceil($total_count/$EachCnt); // 如果有余,向上取整
$start_page = 1;
$end_page = $total_page;
// 如果本页前$ShowPageNum页没有到首页,则计算显示页号的首数字
if ($page - $ShowPageNum > 1)
{
$start_page = $page - $ShowPageNum;
}
// 如果本页后$ShowPageNum页没有到尾页,则计算显示页号的尾数字
if ($page + $ShowPageNum < $end_page)
{
$end_page = $page + $ShowPageNum;
}
// 将显示页号的数字范围传给tpl,这个传法有点2,暂时这样
$page_array = array();
for ($i = $start_page; $i < $end_page + 1; $i++)
{
array_push($page_array, $i);
}
$smarty->assign('current_page', $page);
$smarty->assign('total_page', $total_page);
$smarty->assign('each_cnt', $EachCnt);
$smarty->assign('page_array', $page_array);
$smarty->assign('page_end', $end_page);
$smarty->display('my_pages.tpl');
?>
tpl中的前端代码:
{* Smarty *}
{config_load file='my_pages.conf'}
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<body>
{* 模拟实际输出查询得出的N个数据 *}
{foreach from=$resultID key=k item=v}
<p>{$v.oid}</p>
{/foreach}
<p>
<p>
当前{$current_page}/{$total_page}页
<!--URL需要替换成实际URL,此处写法为从配置文件读取URL-->
【<a href='{#URL#}?page=1&id={$id}'>首页</a>】
{if $current_page > 1}
【<a href='{#URL#}?page={$current_page-1}&id={$id}'>上一页</a>】
{/if}
{foreach from=$page_array key=k item=v}
<a href='{#URL#}?page={$v}?id={$id}'>{$v}</a>
{/foreach}
{if $current_page < $total_page}
【<a href='{#URL#}?page={$current_page+1}?id={$id}'>下一页</a>】
{/if}
【<a href='{#URL#}?page={$total_page}?id={$id}'>尾页</a>】
</p>
</body>
</html>