作者eliang ()
看板Web_Design
标题Re: [问题] 怎麽用 Smarty 做 "分页导览列"?
时间Tue May 10 18:39:00 2005
非常感谢两位的回应...
不过最後我用了另一个方法, 其实大同小异, 也提供一下好了...
我写了一个 Smarty 的 plugin (程式码附在最後面), 用来产生分页导览列的字串,
函式名叫 html_pagebar, 在样版里的语法为:
<{html_pagebar total=总页数 limit=要显示的连结数 current=目前页码}>
例如:
<{html_pagebar total=10 limit=5 current=6}>
则输出:
... <a href="index.php?page=4">4</a> .
<a href="index.php?page=5">5</a> .
<span class="current">6</span> .
←目前页码会自动置於中央
<a href="index.php?page=7">7</a> .
<a href="index.php?page=8">8</a> ...
以下是程式码, 有需要请自己修改
Smarty/plugins/function.html_pagebar.php
<?php
function smarty_function_html_pagebar($params, &$smarty) {
if (empty($params['total'])) {
$smarty->trigger_error('html_pagebar: missing "total" parameter');
return;
}
$total = $params['total']; // 总页数
$limit = 15; // 要显示的连结数
$current = 0; // 目前的页码
if (!empty($params['limit'])) {
$limit = $params['limit'];
}
if (!empty($params['current'])) {
$current = $params['current'];
}
// 计算起始页与最後页
if ($total > $limit) {
$start = max(1, $current-floor(($limit-1)/2));
$end = $start + $limit - 1;
if ($end >= $total) {
$end = $total;
$start = $end - $limit + 1;
}
} else {
$start = 1;
$end = $total;
}
$result = '';
if ($start > 1) {
$result = '... '; // 如果起始页码不为 1 时, 在最前端加上 '...'
}
for ($i=$start; $i <= $end; $i++) {
if ($i == $current)
$result .= "<span class=\"current\">$i</span>";
else
$result .= "<a href=\"index.php?page=$i\">$i</a>";
if ($i != $end)
$result .= ' . ';
}
if ($end < $total) {
$result .= ' ...'; // 如果最终页码不到总页数, 在最後加上 '...'
}
return $result;
}
?>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.58.40.9
※ 编辑: eliang 来自: 210.58.40.9 (05/10 18:40)
1F:推 arzbar:真想不到还有那麽多人用 smarty...这篇好...推! 218.162.196.58 05/10