尤記得,十年前剛畢業第一份工作,為了寫分頁寫不出來,晚上睡覺都會被分頁嚇醒的青春肉體時代(不要懷疑,我也有過青春阿) 
恨透了分頁 (其實現在想想,好像是很簡單的一段程式。卻讓潔西卡睡不著~我真是清純丫) 

於是,有空時會到網路上去找好用的分頁物件,但是發現,都不好用丫。
有的寫的太覆雜,會讓程式長太胖的感覺,有的會對資料庫做多次查詢造成系統的負荷~
於是終於受不鳥啦~ 我在8年前寫了一個超級好用的分頁函數 , 不是程式寫的好,而是超輕量,不會對資料庫造成負荷,程式碼也是短短的~~~
這一用就用了8年丫~ 今天會想到他,是因為有人要求我改成十頁十頁SHOW~ 然後,接手別人的程式,看到他也為分頁深深困擾,居然在每一支查詢的程式內都放有分頁的程式碼。

所以我改了我的函數,另外在這裡分享一下,順便妶耀一下,老娘8年前寫的好物~。看不懂的。就略過吧




Call sample:
#計算筆數先
$offset = $_REQUEST["offset"] == "" ? 0 ; $_REQUEST["offset"];
$mrows = $conn->Execute("select count(a_account) as T from $TABLE_NAME $WHERE_STR ");
$mrow = $mrows->FetchObject();
$numrows = $mrow->T;
$pagestr = pages($numrows, $offset, $num_of_rows_per_page,"type=$type","no9", 2);
print $pagestr; // 印出分頁
$rows = $conn->SelectLimit($sql,$num_of_rows_per_page,$offset);
while ($row = $rows->fetchRow()) {
// 略 這裡是SHOW 資料
}
print $pagestr; // 印出分頁

 

結束
############# 下面是函數 弄成一個INCLUDE FILE 吧 ############
function pages($total_rows, $offset, $limit_row,$url_str='', $class="page", $mod="2") {
$current_page = ($offset/$limit_row) + 1;
$total_pages = ceil($total_rows/$limit_row);
if ($mod == "1") {
$current_page = ($offset/$limit_row) + 1;
$total_pages = ceil($total_rows/$limit_row);
$str2 = "";
if ($offset != 0) $str2 .="| <a href=\"$PHP_SELF?offset=0&$url_str\" class=\"$class\">FirstPage</a> | ";
if (($offset - $limit_row) >= 0) {
$prev_offset = $offset - $limit_row;
$str2 .= " <a href=\"$PHP_SELF?offset=$prev_offset&$url_str\" class=\"$class\">Previous</a> | ";
}
$str2 .= " [ $current_page / $total_pages ] ";
$last_row = (($total_pages-1) * $limit_row);
if (($offset + $limit_row) < $total_rows) {
$next_offset = $offset + $limit_row;
$str2 .= "<a href=\"$PHP_SELF?offset=$next_offset&$url_str\" class=\"$class\">NEXT</a> | ";
$str2 .= "<a href=\"$PHP_SELF?offset=$last_row&$url_str\" class=\"$class\">LastPage</a> | ";
}
}
elseif ($mod == "2") {

$str2 = "";
$i = ceil($current_page / 10 ) - 1 ;

if ($i >= 1 ) {
$of = max(0, $offset - ( $limit_row * 10)) ;
$str2.= "<a href=\"$PHP_SELF?offset=$of&$url_str\" class=\"$class\">上10頁</a> ";
}
$a=min($total_pages, ($i*10)+10);
for ($i = 1+($i*10); $i <= $a; $i++) {
$of = $i * $limit_row - $limit_row;
if ($i == $current_page)
$str2.= "[ $i ] ";
else
$str2.= "<a href=\"$PHP_SELF?offset=$of&$url_str\" class=\"$class\">$i</a> ";
}
if ($i < $total_pages ) {

$of = min($total_rows, $offset + ( $limit_row * 10));
$str2.= "<a href=\"$PHP_SELF?offset=$of&$url_str\" class=\"$class\">下10頁</a>";
}
}
else {
$str2 = "Page:";
for ($i =1; $i <= $total_pages; $i++) {
$of = $i * $limit_row - $limit_row;
if ($i == $current_page)
$str2.= "[ $i ] ";
else
$str2.= "<a href=\"$PHP_SELF?offset=$of&$url_str\" class=\"$class\">$i</a> ";
}

}
return "<span class=$class>$str2</span>";
}





=====================
2015/07/02 update 搭配bootstrap 的CSS . 超好用

function pages($total_rows, $offset, $limit_row, $url_str='')
{
    $current_page = ($offset/$limit_row) + 1;
    $total_pages = ceil($total_rows/$limit_row); 

    $str2 .= "<nav>";
    $str2 .= '<ul class="pagination">';

    if (($offset - $limit_row) >= 0) {
        $prev_offset = $offset - $limit_row;
        $str2 .= '<li>';
        $str2 .= "<a href=\"$PHP_SELF?offset=$prev_offset&$url_str\" aria-label=\"Previous\">";
        $str2 .= '<span aria-hidden="true">&laquo;</span>';
        $str2 .= '</a>';
        $str2 .= '</li>';
    } else { 
        $str2 .= '<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li>';
    }


    for ($i =1; $i <= $total_pages; $i++) {
        $of = $i * $limit_row - $limit_row;
        if ($i == $current_page)
            $str2.= "<li class=\"active\"><a href=\"#\">$i</li>";
        else
            $str2.= "<li><a href=\"$PHP_SELF?offset=$of&$url_str\">$i</a></li>";
        }
       if (($offset + $limit_row) < $total_rows) {

           $next_offset = $offset + $limit_row;
           $str2 .= "<li>";
           $str2 .= "<a href=\"$PHP_SELF?offset=$next_offset&$url_str\" aria-label=\"Next\">";
           $str2 .= "<span aria-hidden=\"true\">&raquo;</span>";
           $str2 .= "</a>";
           $str2 .= "</li>";
       } else {
           $str2 .= '<li class="disabled"><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li>';
       }
       $str2 .= "</ul>";
       $str2 .= "</nav>";


       return $str2;

}


arrow
arrow
    全站熱搜

    peeress 發表在 痞客邦 留言(7) 人氣()