paginasi halaman php

Saya memerlukan bantuan untuk membuat skrip penomoran halaman ini menjadi sedikit lebih rumit. Saya perlu mengubah area dari baris 61 menjadi 80 untuk memungkinkan kompleksitas yang dijelaskan dalam komentar di antara baris yang sama.

Silakan lihat dan lihat apakah Anda dapat menemukan solusi yang sederhana dan menghasilkan $pages_content ...

Saya telah menyediakan 2 pasta...

indeks.php: http://codepad.org/tWNvATES

Dan

Basis data (MYSQL): http://codepad.org/cP8hGzWN

!!! - Tolong, pada dasarnya saya hanya perlu mengganti apa yang ada di antara baris 61 dan 80 untuk menghasilkan sesuatu seperti

"... 4 5 [6] 7 8 ..."

sebagai $pages_content...

[sunting]

Berikut cuplikan kodenya:

$pages_content = '';
for($i = 1;$i <= $pages;$i++) {
    if($pages >= 1) {
        if($i == $page) {
            $pages_content .= "<b>{$i}</b>";
        }
        else {
            $pages_content .= "<a href='/id?page={$i}'>{$i}</a>";
        }
    }
}

person Charl Du Plessis    schedule 03.09.2012    source sumber
comment
Cuplikan kode yang relevan lebih baik sebagai bagian dari pertanyaan, bukan sebagai tautan eksternal.   -  person Alex Hadley    schedule 03.09.2012
comment
Selesai :) Menambahkan cuplikan kode.   -  person Charl Du Plessis    schedule 03.09.2012


Jawaban (5)


kode terbaik untuk menerapkan pagination di php tersedia untuk Anda di sini, lihat

<?php
/*
    Place code to connect to your DB here.
*/
include('config.php');  // include your code to connect to DB.

$tbl_name="";       //your table name
// How many adjacent pages should be shown on each side?
$adjacents = 3;

/* 
   First get total number of rows in data table. 
   If you have a WHERE clause in your query, make sure you mirror it here.
*/
$query = "SELECT COUNT(*) as num FROM $tbl_name";
$total_pages = mysql_fetch_array(mysql_query($query));
$total_pages = $total_pages[num];

/* Setup vars for query. */
$targetpage = "filename.php";   //your file name  (the name of this file)
$limit = 2;                                 //how many items to show per page
$page = $_GET['page'];
if($page) 
    $start = ($page - 1) * $limit;          //first item to display on this page
else
    $start = 0;                             //if no page var is given, set start to 0

/* Get data. */
$sql = "SELECT column_name FROM $tbl_name LIMIT $start, $limit";
$result = mysql_query($sql);

/* Setup page vars for display. */
if ($page == 0) $page = 1;                  //if no page var is given, default to 1.
$prev = $page - 1;                          //previous page is page - 1
$next = $page + 1;                          //next page is page + 1
$lastpage = ceil($total_pages/$limit);      //lastpage is = total pages / items per page, rounded up.
$lpm1 = $lastpage - 1;                      //last page minus 1

/* 
    Now we apply our rules and draw the pagination object. 
    We're actually saving the code to a variable in case we want to draw it more than once.
*/
$pagination = "";
if($lastpage > 1)
{   
    $pagination .= "<div class=\"pagination\">";
    //previous button
    if ($page > 1) 
        $pagination.= "<a href=\"$targetpage?page=$prev\">� previous</a>";
    else
        $pagination.= "<span class=\"disabled\">� previous</span>";   

    //pages 
    if ($lastpage < 7 + ($adjacents * 2))   //not enough pages to bother breaking it up
    {   
        for ($counter = 1; $counter <= $lastpage; $counter++)
        {
            if ($counter == $page)
                $pagination.= "<span class=\"current\">$counter</span>";
            else
                $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";                 
        }
    }
    elseif($lastpage > 5 + ($adjacents * 2))    //enough pages to hide some
    {
        //close to beginning; only hide later pages
        if($page < 1 + ($adjacents * 2))        
        {
            for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
            {
                if ($counter == $page)
                    $pagination.= "<span class=\"current\">$counter</span>";
                else
                    $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";                 
            }
            $pagination.= "...";
            $pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>";
            $pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>";       
        }
        //in middle; hide some front and some back
        elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
        {
            $pagination.= "<a href=\"$targetpage?page=1\">1</a>";
            $pagination.= "<a href=\"$targetpage?page=2\">2</a>";
            $pagination.= "...";
            for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
            {
                if ($counter == $page)
                    $pagination.= "<span class=\"current\">$counter</span>";
                else
                    $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";                 
            }
            $pagination.= "...";
            $pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>";
            $pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>";       
        }
        //close to end; only hide early pages
        else
        {
            $pagination.= "<a href=\"$targetpage?page=1\">1</a>";
            $pagination.= "<a href=\"$targetpage?page=2\">2</a>";
            $pagination.= "...";
            for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
            {
                if ($counter == $page)
                    $pagination.= "<span class=\"current\">$counter</span>";
                else
                    $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";                 
            }
        }
    }

    //next button
    if ($page < $counter - 1) 
        $pagination.= "<a href=\"$targetpage?page=$next\">next �</a>";
    else
        $pagination.= "<span class=\"disabled\">next �</span>";
    $pagination.= "</div>\n";       
}
?>

<?php
    while($row = mysql_fetch_array($result))
    {

    // Your while loop here

    }
?>

<?=$pagination?>

css yang digunakan untuk penataan gaya ada di sini:

div.pagination {
padding: 3px;
margin: 3px;
}

div.pagination a {
padding: 2px 5px 2px 5px;
margin: 2px;
border: 1px solid #AAAADD;

text-decoration: none; /* no underline */
color: #000099;
}
div.pagination a:hover, div.pagination a:active {
border: 1px solid #000099;

color: #000;
}
div.pagination span.current {
padding: 2px 5px 2px 5px;
margin: 2px;
    border: 1px solid #000099;

    font-weight: bold;
    background-color: #000099;
    color: #FFF;
}
div.pagination span.disabled {
    padding: 2px 5px 2px 5px;
    margin: 2px;
    border: 1px solid #EEE;

    color: #DDD;
}

semoga membantu, Selamat coding!

person Gaurav    schedule 03.09.2012
comment
Terima kasih, aku akan menyimpannya untuk nanti. - person Charl Du Plessis; 03.09.2012

Sesuatu seperti ini seharusnya berhasil

$pages_content = '';

$minPage = max(1, $page - 2);
$maxPage = min($pages, $page + 2);
for($i = $minPage; $i <= $maxPage;$i++) {
    if($pages >= 1) {
        if($i == $page) {
            $pages_content .= "<b>{$i}</b>";
        }
        else {
            $pages_content .= "<a href='/id?page={$i}'>{$i}</a>";
        }
    }
}
person h2ooooooo    schedule 03.09.2012
comment
@CharlDuPlessis Saya senang ini berhasil. Ingatlah untuk menerima jawaban yang menurut Anda paling berguna untuk memperbaiki masalah Anda, sehingga orang lain yang menelusuri pertanyaan ini di masa mendatang dapat dengan mudah menemukan solusi yang Anda gunakan. :) Bagaimana cara kerja menerima jawaban? - person h2ooooooo; 03.09.2012

Jika jumlah halamannya bisa banyak, pertimbangkan untuk menggunakan penomoran halaman "logaritmik":

Bagaimana cara melakukan navigasi halaman untuk banyak halaman? Navigasi halaman logaritmik

(contoh kode PHP disertakan dalam jawaban saya di sana).

person Doin    schedule 07.01.2013

Paginasi Dasar di PHP Oleh Amol Gholap

public function getPagination($pid,$totalCount=500,$countPerPage=50,$pageNumberingStart=1,$url=BASE_PATH,$maxDisplayPageNumbers=10){
        $response= "<a href='/id".($pid > 1 ? "$url?pid=".($pid-1) : "" )."' style='text-decoration:none'><-</a>";
        $maxNum = $pid+($maxDisplayPageNumbers/2);
        $minNum = $pid-($maxDisplayPageNumbers/2)+1;//-$pid);
        $response.= $minNum > 1 ? "<a style='text-decoration:none'>---</a>":"";
        for($t=0;$t<$totalCount;$t+=$countPerPage){
            if(($maxNum >= $pageNumberingStart && $minNum <= $pageNumberingStart)
                ){
                if($pid == $pageNumberingStart)
                    $response.= " <a href='/id$url?pid=$pageNumberingStart'><strong>".$pageNumberingStart."</strong></a> ";
                else
                    $response.= " <a href='/id$url?pid=$pageNumberingStart' style='text-decoration:none'>".$pageNumberingStart."</a> ";
            }
            $pageNumberingStart++;
        }
        $response.= $maxNum < $pageNumberingStart-1 ? "<a style='text-decoration:none'>---</a>":"";
        $response.= "<a href='/id".($pid < $pageNumberingStart ? "" : "$url?pid=".($pid+1) )."' style='text-decoration:none'>-></a>";
        return $response;
    }

echo getPagination($pageNumber=5,$totalCount=500,$countPerPage=50,$pageNumberingStart=1,$url=BASE_PATH,$maxDisplayPageNumbers=10);
person Amol Gholap    schedule 17.02.2015

Dapatkan nomor halaman saat ini

if (isset($_GET['pageno'])) {
    $pageno = $_GET['pageno'];
} else {
    $pageno = 1;
}

Rumus untuk penomoran halaman

$no_of_records_per_page = 10;
$offset = ($pageno-1) * $no_of_records_per_page;

Dapatkan jumlah total halaman

$total_pages_sql = "SELECT COUNT(*) FROM table";
$result = mysqli_query($conn,$total_pages_sql);
$total_rows = mysqli_fetch_array($result)[0];
$total_pages = ceil($total_rows / $no_of_records_per_page);

Membangun Kueri SQL untuk penomoran halaman

$sql = "SELECT * FROM table LIMIT $offset, $no_of_records_per_page"; 

Referensi membuat Pagination dengan PHP dan MySql

person Paritosh Pandey    schedule 19.02.2018