代码: 全选
Tab ID [1] [2] [3] [4] [5] [>] [>>]
------------------------------------------
Book ID 1
...
Book ID 10
Tab ID [<<] [<] [6] [7] [8] [9] [10] [>] [>>]
------------------------------------------
Book ID 50
...
Book ID 60
...
Tab ID [<<] [<] [26]
------------------------------------------
Book ID 250
...
Book ID 256
分页思路:
1、显示 Book ID
2、显示 Tab ID
3、显示 [<<][<][>][>>] 等翻页
1、Book ID 受“起始 Book ID”,即 $start_bid 影响,确定 $now_tab,就可以确定 $start_bid。
代码流
代码: 全选
<?php
$total_bok = 256;
$tab_per_page = 5;
$bok_per_tab = 10;
// 基本定义
$now_tab = $_GET['now_tab'];
if (!$now_tab)
$now_tab = 1;
// 使用 GET 传递变量,控制 now_tab 的变化
$now_page = ceil($now_tab / $tab_per_page);
$need_tab = ceil($total_bok / $bok_per_tab);
$need_page = ceil($need_tab / $tab_per_page);
echo '<hr />';
echo "<p>Total Book(s): $total_bok</p>";
echo "<p>Need Tab: $need_tab</p>";
echo '<hr />';
echo "<p>Tab Per Page: $tab_per_page</p>";
echo "<p>Book Per Tab: $bok_per_tab</p><hr />";
echo "<p>Now Page: $now_page</p>";
echo "<p>Now Tab: $now_tab</p>";
echo '<hr />';
$start_bid = ($now_tab - 1) * $bok_per_tab;
// $start_bid 即 start book ID,起始 book ID
$diff = $total_bok - $start_bid;
if ($diff > $bok_per_tab)
$range = $bok_per_tab;
else
$range = $diff;
$i = $start_bid;
while ($i <= $start_bid + $range)
{
// 一般思维首先会想到 $i <= $start_bid + $bok_per_tab,而不是 $i <= $start_bid + $range
// 使用辅助变量 $diff 和 $range 是为了避免 $total_bok 不是 $bok_per_tab 整数倍时导致出现无效 Book ID
if (!$i)
{
$i++;
continue;
// 当 $now_tab = 1,则 $start_bid = 0,$i = $start_bid,所以跳过
}
echo "<p>Book ID $i</p>";
$i++;
}
?>
2、跟 Bood ID 类似,Tab ID 受“起始 Tab ID”,即 $start_tab 影响,确定 $now_page,就可以确定 $start_tab。
代码流
代码: 全选
<?php
$total_bok = 256;
$tab_per_page = 5;
$bok_per_tab = 10;
$now_tab = $_GET['now_tab'];
if (!$now_tab)
$now_tab = 1;
$now_page = ceil($now_tab / $tab_per_page);
$need_tab = ceil($total_bok / $bok_per_tab);
$need_page = ceil($need_tab / $tab_per_page);
$start_tab = ($now_page - 1) * $tab_per_page;
$diff = $need_tab - $start_tab;
if ($diff > $tab_per_page)
$range = $tab_per_page;
else
$range = $diff;
$i = $start_tab;
$tmp_now_tab = $now_tab;
while ($i <= $start_tab + $range)
{
if (!$i)
{
$i++;
continue;
}
if ($now_tab == $i)
echo " [$i] ";
else
echo ' [<a href="'.$_SERVER['PHP_SELF']."?now_tab=$i".'">'.$i.'</a>] ';
$i++;
}
// 类似 Book ID,不同的是 Tab ID 被超链接包围
echo '<hr />';
echo "<p>Total Book(s): $total_bok</p>";
echo "<p>Need Tab: $need_tab</p>";
echo '<hr />';
echo "<p>Tab Per Page: $tab_per_page</p>";
echo "<p>Book Per Tab: $bok_per_tab</p><hr />";
echo "<p>Now Page: $now_page</p>";
echo "<p>Now Tab: $now_tab</p><hr />";
$start_bid = ($now_tab - 1) * $bok_per_tab;
$diff = $total_bok - $start_bid;
if ($diff > $bok_per_tab)
$range = $bok_per_tab;
else
$range = $diff;
$i = $start_bid;
while ($i <= $start_bid + $range)
{
if (!$i)
{
$i++;
continue;
}
echo "<p>Book ID $i</p>";
$i++;
}
?>
代码: 全选
[5] [6] [7] [8] [9] [10]
[10] [11] [12] [13] [14] [15]
为了更好看,把
代码: 全选
else
echo ' [<a href="'.$_SERVER['PHP_SELF']."?now_tab=$i".'">'.$i.'</a>] ';
代码: 全选
else
{
if ($i == $start_tab)
echo ' [<a href="'.$_SERVER['PHP_SELF']."?now_tab=$i".'"> < </a>] ';
else
echo ' [<a href="'.$_SERVER['PHP_SELF']."?now_tab=$i".'">'.$i.'</a>] ';
}
3、显示翻页关键在判断 Tab ID 的位置。
接上面 2,在每一页(除第一页)最后一个标签上加上一个额外标签实现“下一页”。
跟判断标签是否是每一页的第一个标签类似,“因为 $i 是动态的,$start_tab 是相对静态的,
所以他们相等时,$i 肯定为第一页的第一个标签”,相应地,只要 $i == $start_tab + $range,
那么 $i 肯定是每一页的最后一个标签。
代码: 全选
if (($i == ($start_tab + $range)) &&
($now_page < $need_page)
)
{
$j = $i + 1;
echo ' [<a href="'.$_SERVER['PHP_SELF']."?now_tab=$j".'"> > </a>] ';
}
转到“第一页”
代码: 全选
if ($now_page > 1)
{
$j = $need_tab;
echo ' [<a href="'.$_SERVER['PHP_SELF']."?now_tab=1".'"> << </a>] ';
}
代码: 全选
if ($now_page < $need_page)
{
$j = $need_tab;
echo ' [<a href="'.$_SERVER['PHP_SELF']."?now_tab=$j".'"> >> </a>] ';
}
全部代码流
代码: 全选
<?php
require_once '../etc/conf.php';
require_once 'connect_db.php';
connect_db();
/*
for ($i = 0, $j = 'a'; $i < 100; $i++)
{
if ($j == 'z')
$j = 'a';
$query = "
insert into sg_comment (uid, bid, comment_text) values (3, 6, '$i $j') " ;
$result = mysql_query($query);
$j++;
}
*/
$total_bok = 256;
$tab_per_page = 5;
$bok_per_tab = 10;
$now_tab = $_GET['now_tab'];
if (!$now_tab)
$now_tab = 1;
$now_page = ceil($now_tab / $tab_per_page);
$need_tab = ceil($total_bok / $bok_per_tab);
$need_page = ceil($need_tab / $tab_per_page);
$start_tab = ($now_page - 1) * $tab_per_page;
$diff = $need_tab - $start_tab;
if ($diff > $tab_per_page) $range = $tab_per_page;
else $range = $diff;
$i = $start_tab;
$tmp_now_tab = $now_tab;
if ($now_page > 1)
{
$j = $need_tab;
echo ' [<a href="'.$_SERVER['PHP_SELF']."?now_tab=1".'"> << </a>] ';
}
while ($i <= $start_tab + $range)
{
if (!$i)
{
$i++;
continue;
}
if ($now_tab == $i)
{
echo " [$i] ";
}
else
{
if ($i == $start_tab)
echo ' [<a href="'.$_SERVER['PHP_SELF']."?now_tab=$i".'"> < </a>] ';
else
echo ' [<a href="'.$_SERVER['PHP_SELF']."?now_tab=$i".'">'.$i.'</a>] ';
}
if (($i == ($start_tab + $range)) &&
($now_page < $need_page)
)
{
$j = $i + 1;
echo ' [<a href="'.$_SERVER['PHP_SELF']."?now_tab=$j".'"> > </a>] ';
}
$i++;
}
if ($now_page < $need_page)
{
$j = $need_tab;
echo ' [<a href="'.$_SERVER['PHP_SELF']."?now_tab=$j".'"> >> </a>] ';
}
echo '<hr />';
echo "<p>Total Book(s): $total_bok</p>";
echo "<p>Need Tab: $need_tab</p>";
echo '<hr />';
echo "<p>Tab Per Page: $tab_per_page</p>";
echo "<p>Book Per Tab: $bok_per_tab</p><hr />";
echo "<p>Now Page: $now_page</p>";
echo "<p>Now Tab: $now_tab</p><hr />";
$start_bid = ($now_tab - 1) * $bok_per_tab;
$diff = $total_bok - $start_bid;
if ($diff > $bok_per_tab)
$range = $bok_per_tab;
else
$range = $diff;
$i = $start_bid;
while ($i <= $start_bid+$range)
{
if (!$i)
{
$i++;
continue;
}
echo "<p>Book ID $i</p>";
$i++;
}
代码: 全选
function echo_paging_box($total_bok, $now_tab)
{
global $a;
global $bid;
global $c;
global $cid;
global $sys_conf;
$tab_per_page = $sys_conf['tab_per_page'];
$bok_per_tab = $sys_conf['bok_per_tab'];
$now_tab = $_GET['now_tab'];
if (!$now_tab)
$now_tab = 1;
$now_page = ceil($now_tab / $tab_per_page);
$need_tab = ceil($total_bok / $bok_per_tab);
$need_page = ceil($need_tab / $tab_per_page);
$start_tab = ($now_page - 1) * $tab_per_page;
$diff = $need_tab - $start_tab;
if ($diff > $tab_per_page) $range = $tab_per_page;
else $range = $diff;
$i = $start_tab;
$tmp_now_tab = $now_tab;
echo '<div class="paging_navigation_box">';
echo "<p>Total Post(s): $total_bok</p>";
echo "<p>Total Tab: $need_tab</p>";
echo "<p>Now Tab: $now_tab</p>";
if ($now_page > 1)
{
$j = $need_tab;
echo ' [<a href="'.$_SERVER['PHP_SELF']."?a=$a&bid=$bid&c=$c&cid=$cid&now_tab=1&sid=$sid".'"> << </a>] ';
}
while ($i <= $start_tab + $range)
{
if (!$i)
{
$i++;
continue;
}
if ($now_tab == $i)
{
echo " [$i] ";
}
else
{
if ($i == $start_tab)
echo ' [<a href="'.$_SERVER['PHP_SELF']."?a=$a&bid=$bid&c=$c&cid=$cid&now_tab=$i&sid=$sid".'"> < </a>] ';
else
echo ' [<a href="'.$_SERVER['PHP_SELF']."?a=$a&bid=$bid&c=$c&cid=$cid&now_tab=$i&sid=$sid".'">'.$i.'</a>] ';
}
if (($i == ($start_tab + $range)) &&
($now_page < $need_page)
)
{
$j = $i + 1;
echo ' [<a href="'.$_SERVER['PHP_SELF']."?a=$a&bid=$bid&c=$c&cid=$cid&now_tab=$j&sid=$sid".'"> > </a>] ';
}
$i++;
}
if ($now_page < $need_page)
{
$j = $need_tab;
echo ' [<a href="'.$_SERVER['PHP_SELF']."?a=$a&bid=$bid&c=$c&cid=$cid&now_tab=$j&sid=$sid".'"> >> </a>] ';
}
echo '</div>';
}
?>