簡體   English   中英

如何限制分頁系統PHP / MySQL中的頁面?

[英]How to limit pages in pagination system PHP/MySQL?

我為用戶的儀表板提供了一個分頁系統,基本上我擔心的是,當用戶的朋友開始張貼到50-60-70頁左右的位置時。

我想要這樣: 1 2 3 4 5 ... 91 ,然后當用戶加載不同的頁面時,應該這樣: 1 ... 22 23 24 ... 91

或類似的事情。 這樣,它不會嘗試一次列出所有頁面並變得非常丑陋。

我對分頁不是很熟悉,我有一個老朋友幫助我使用此系統,所以如果這是一個討厭的問題,請您諒解。 我在網上四處尋找東西,似乎找不到一種方法來實現我要在系統中執行的操作。

我應該重新制作整個東西嗎? 如果是這樣,那么執行此操作的最佳方法是什么? 這是我正在使用的當前功能:

function friendstatus(){
    global $session_user_id;
    $per_page = 15;
    $from_where = "FROM posts WHERE userid in (SELECT friend_id FROM friendship WHERE user_id = $session_user_id AND pending = 0 OR friend_id = $session_user_id) AND visible != 0 ORDER BY `timestamp` DESC";
    $sql = "SELECT COUNT(*) ".$from_where;
    $res = mysql_query($sql) or trigger_error("Error.");
    $row = mysql_fetch_row($res);
    $total_rows = $row[0];
    if($total_rows != 0){
        if(isset($_GET['page'])) $CUR_PAGE = intval($_GET['page']); else $CUR_PAGE=1;
        $start = abs(($CUR_PAGE-1)*$per_page);
        $sql = "SELECT * $from_where LIMIT $start,$per_page";
        $res = mysql_query($sql) or trigger_error("cant get actual data");
        while($row=mysql_fetch_array($res)) $DATA[++$start]=$row;
        $uri = strtok("/dash","?")."/";
        $tmpget = $_GET;
        unset($tmpget['page']);
        if($tmpget){ $uri .= http_build_query($tmpget)."/"; }
        $num_pages=ceil($total_rows/$per_page);
        for($i=1;$i<=$num_pages;$i++) $PAGES[$i]=$uri.$i; ?>

        Pages:<? foreach ($PAGES as $i => $link): ?> <? if ($i == $CUR_PAGE): ?><b><?=$i?></b> <? else: ?><a href="<?=$link?>"><?=$i?></a> <? endif ?><? endforeach ?> | Total Posts: <b><?=$total_rows?></b>
        <hr color="#1F1F1F" width="100%"><br><?foreach($DATA as $i => $row):?>

        //show the statuses

        <? endforeach ?>

        Pages:<? foreach ($PAGES as $i => $link): ?> <? if ($i == $CUR_PAGE): ?><b><?=$i?></b> <? else: ?><a href="<?=$link?>"><?=$i?></a> <? endif ?><? endforeach ?> | Total Posts: <b><?=$total_rows?></b>
    <? } //end if $total_rows != 0 
} //end function 

首先在要顯示的當前頁面周圍定義一些范圍。

$RANGE = 2; //show 2 pages before and after current

然后確定此范圍的起始頁和結束頁:

$start = max($CUR_PAGE-$RANGE,1);
$end = min($CUR_PAGE+$RANGE,count($PAGES));

然后更換

foreach($PAGES as $i=>$link)

for($i=$start;$i<=$end;$i++) //references to $link in the body become $PAGES[$i] 

對於靜態的“前x頁”和“后x頁”,您必須進行一些檢查以確保最終不會出現重復的頁面,例如1 ... 12345 ... 91。 如果僅對鏈接到第一頁和最后一頁感興趣,那么一個簡單的if語句就足夠了,例如,如果要顯示第一頁和最后三頁,則必須進行一些小的索引調整。

通過添加一些if語句,我基本上可以實現所需的功能。

用...替換列出頁面的部分...

<a href="https://mysite/dash/1">First</a> | <? foreach ($PAGES as $i => $link): ?><? if ($i == $CUR_PAGE): ?><b><?=$i?></b> <? endif ?><? if($i == $CUR_PAGE+1):?><a href="<?=$link?>"><?=$i?></a><? endif ?><? endforeach ?> | <a href="https://mysite/dash/<?=$num_pages?>">Last</a> | Total Posts: <b><?=$total_rows?></b>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM