How to show at most 5 numbers in a pagination?

2019-06-22 09:20发布

问题:

I have a pagination and I want to achieve and limit it to 5 page numbers,

See below:

Examples:

 PREVIOUS 1 2 3 4 5 NEXT
 PREVIOUS 20 21 22 23 ... 39 NEXT
 PREVIOUS 59 ... 81 82 83 84 NEXT

Just five page number that they should be display.
Which part of the code should I alter and modify?

I am having trouble with the combination.

 <?php
 /* 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 buttons
        if ($page > 1) 
            $pagination.= "<a class='buttons' href=\"$targetpage?page=$prev\">previous</a>";
        else
            $pagination.= "<a class='disabled'><buttons disabled>previous</buttons></a>";   

    //pages 
    if ($lastpage < 7 + ($adjacents * 2))   //not enough pages to bother breaking it up
    {   
        for ($counter = 1; $counter <= $lastpage; $counter++)
        {
            if ($counter == $page)
                $pagination.= "<a class='current'><buttons style='background-color:#CEF6F5'>$counter</buttons></a>";
            else
                $pagination.= "<a class='buttons' 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.= "<a class='current'><buttons style='background-color:#CEF6F5'>$counter</buttons></a>";
                else
                    $pagination.= "<a class='buttons' href=\"$targetpage?page=$counter\">$counter</a>";                 
            }
            $pagination.= "...";
            $pagination.= "<a class='buttons' href=\"$targetpage?page=$lpm1\">$lpm1</a>";
            $pagination.= "<a class='buttons' href=\"$targetpage?page=$lastpage\">$lastpage</a>";       
        }
        //in middle; hide some front and some back
        elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
        {
            $pagination.= "<a class='buttons' href=\"$targetpage?page=1\"> 1 </a>";
            $pagination.= "<a class='buttons' href=\"$targetpage?page=2\"> 2 </a>";
            $pagination.= "...";
            for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
            {
                if ($counter == $page)
                    $pagination.= "<a class='current'><buttons style='background-color:#CEF6F5'>$counter</buttons></a>";
                else
                    $pagination.= "<a class='buttons' href=\"$targetpage?page=$counter\">$counter</a>";                 
            }
            $pagination.= "...";
            $pagination.= "<a class='buttons' href=\"$targetpage?page=$lpm1\">$lpm1</a>";
            $pagination.= "<a class='buttons' 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.= "<a class='current'><buttons style='background-color:#CEF6F5'>$counter</buttons></a>";
                else
                    $pagination.= "<a class='buttons' href=\"$targetpage?page=$counter\">$counter</a>";                 
            }
        }
    }

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

I am having problem tracing the limit for displaying page number.

回答1:

I used below code for my wordpress plugin to display pagination and display data in table. You can use this according to your mysql query.

<?php echo '<table width="100%" border="1" cellspacing="0" cellpadding="0">'; ?>
    <col width="10%" />
    <col width="25%" />
    <col width="25%" />
    <col width="30%" />
    <col width="10%" />

<?php 
        echo '<tr class="st_th" height="30px">';
        echo '<th class="th_id"> ID</th>';      
        echo '<th class="st_th1"> Name</th>';
        echo '<th class="st_th1"> Phone</th>';
        echo '<th class="st_th1">Address</th>'; 
        echo '<th class="st_th1">Details</th>'; 
        echo '</tr>';
        global $wpdb;
        $num_rec_per_page=4;

        if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; }; 
        $start_from = ($page-1) * $num_rec_per_page; 
        $sql = "SELECT * FROM {$wpdb->prefix}addressbook LIMIT $start_from, $num_rec_per_page"; 


        $result = $wpdb->get_results($sql); 

        foreach($result as $row)
        {
            echo '<tr height="25px">';
                echo '<td width="10%" class="fast_t">' . $row->id. '</td>'; 
                echo '<td class="st_th1" style="padding-left:5px; width:200px">' . $row->f_name, ' ', $row->m_name, ' ', $row->l_name . '</td>';
                echo '<td class="st_th1" style="padding-left:5px;width:200px">' . $row->phone . '</td>';        
                echo '<td class="st_th1" style="padding-left:5px;width:200px">' . $row->address . '</td>';
                //echo '<td style="padding-left:5px">' . $row->address . '</td>';

                $pages2 = get_pages(array(
                    'meta_key' => '_wp_page_template',
                    'meta_value' => 'user_list_page.php'
                ));
                foreach($pages2 as $page2){
                    //echo $page->ID.'<br />';

                }
                if ( is_user_logged_in() ) {
                 $user_ID = get_current_user_id();  
                }
                if ($user_ID==$row->id) {
                    # code...

                    echo '<td '.$attributes.'>';
                        //echo '<a href="'. get_permalink( $page1->ID).'&id=' . $row->id . '"> Edit</a>|';
                         if ( get_option('permalink_structure') ) { 
                        echo '<a href="'. get_permalink( $page->ID).'?id=' . $row->id . '"> Details</a>';
                        //echo 'permalinks enabled'; 
                    } else {
                        echo '<a href="'. get_permalink( $page->ID).'&id=' . $row->id . '"> Details</a>';
                    }
                 echo'</td>';
                }
                if ($user_ID!=$row->id) {
                     echo '<td '.$attributes.'><a href="'. get_permalink( $page->ID).'&id=' . $row->id . '"> Details</a></td>';
                }

            echo '</tr>';
 }
 echo '</table>';
 $sql = "SELECT * FROM " . $wpdb->prefix."addressbook"; 
 $rs_result = mysql_query($sql); //run the query
 $total_records = mysql_num_rows($rs_result);  //count number of records
 $total_pages = ceil($total_records / $num_rec_per_page); 
 $aaa = get_permalink( $page2->ID);?>
 <div class="pagination">
 <?php echo "<a href='".$aaa."&page=1'>".'|<'."</a> "; // Goto 1st page  
    for ($i=1; $i<=$total_pages; $i++) { 
         if ( get_option('permalink_structure') ) { 
                        echo "<a href='".$aaa."?page=".$i."'>".$i."</a> "; 
                        //echo 'permalinks enabled'; 
                    } else {
                        echo "<a href='".$aaa."&page=".$i."'>".$i."</a> "; 
                    }

    }; 
     if ( get_option('permalink_structure') ) { 
                        echo "<a href='".$aaa."?page=$total_pages'>".'>|'."</a> "; // Goto last page

                    } else {
                        echo "<a href='".$aaa."&page=$total_pages'>".'>|'."</a> "; // Goto last page
                    }

    echo '</div>';?>
    </div>


回答2:

This worked for me. You have to pass your current page number and total number of pages to the function.

function pageRange(page,pageCount){

var start = page-2,
    end = page+2;

if(end>pageCount){
    start-=(end-pageCount);
    end=pageCount;
}
if(start<=0){
    end+=((start-1)*(-1));
    start=1;
}

end = end>pageCount?pageCount:end;

return {start:start, end:end};
}

EDIT: check out this fiddle i made https://jsfiddle.net/qsLp6ajL/2/