如何在分页中显示最多5个数字?

时间:2015-07-06 06:54:56

标签: php pagination

我有一个分页,我希望实现并将其限制为5个页码,

见下文:

示例:

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

应该显示五个页码。
我应该改变和修改哪部分代码?

我遇到了这个组合的问题。

 <?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";       
}
?>

我在跟踪显示页码的限制时遇到问题。

2 个答案:

答案 0 :(得分:1)

我使用以下代码为我的wordpress插件显示分页并在表格中显示数据。您可以根据您的mysql查询使用它。

<?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>

答案 1 :(得分:0)

这对我有用。 您必须将当前页码和总页数传递给该功能。

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};
}

编辑:看看我提出的这个小提琴https://jsfiddle.net/qsLp6ajL/2/