作者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