1

素敵なページネーターを機能させようとしていますが、次の/中間の数値を適切に機能させるのに問題があります。

目標は、どのページにあるかに関係なく、結果セットの最初と最後の 5 ページを表示することですが、これらの最初と最後の 5 ページは、それを許可するのに十分なページがある場合にのみ表示できます。

ページネーションは次のようになります: << 1 2 3 4 5 - 12 13 14 - 78 79 80 81 82 >>

ページ数が少ない場合: << 1 2 3 4 5 6 7 8 9 10 >>

そして、これを回避するには?: << 1 2 3 4 5 - 5 6 7 - 7 8 9 10 11 >>

これまでの私のコードは次のとおりです。

function pagination_links($page, $num_rows, $results_per_page, $each_direction = 3) 
{ 
$total_pages = $num_rows ? ceil($num_rows / $results_per_page) : 1 ; 
if($total_pages < 2) 
{ 
    return null; 
} 
$page = ((is_numeric($page)) && ($page >= 1) && ($page <= $total_pages)) ? (int)$page : 1 ; 
$output = null; 
if($page > 1) 
{ 
    $output .= '<div class="pageBtn"><<</div>' ; 
}
else
{
    $output .= '<div class="pageBtnDis"><<</div>' ;
}

for($i=1;$i<$total_pages;$i++)
{
     if($page != $i) 
    { 
        $output .= '<div class="pageBtn">' . $i . '</div>' ; 
    } 
    else 
    { 
        $output .= '<div class="pageBtnSet">' . $i . '</div>' ;
    }
    if($i > 4)
    {
        break ;
    }
}

for($i = $page - $each_direction; $i <= $page + $each_direction; $i++) 
{ 
    if(($i > 5) && ($i <= $total_pages-5)) 
    { 
        if($page != $i) 
        { 
            $output .= '<div class="pageBtn">' . $i . '</div>' ; 
        } 
        else 
        { 
            $output .= '<div class="pageBtnSet">' . $i . '</div>' ;
        } 
    } 
}

for($i = $total_pages-5;$i<$total_pages;$i++) {
    if($page != $i) 
        { 
            $output .= '<div class="pageBtn">' . $i . '</div>' ; 
        } 
        else 
        { 
            $output .= '<div class="pageBtnSet">' . $i . '</div>' ;
        } 
}
if($page < $total_pages) 
{ 
    $output .= '<div class="pageBtn">>></div>' ; 
}
else
{
    $output .= '<div class="pageBtnDis">>></div>' ;
}
return $output ;

}

4

2 に答える 2

4

現在の最善の解決策は、 Digg Style Pagination Classを使用することだと思います。ページネーション マークアップの作成とスタイリングが大幅に簡素化されます。

于 2012-04-11T09:06:20.147 に答える
0

Pager PEAR クラスは高度にカスタマイズ可能で、私はこれで多くの成功を収めてきました。

于 2013-01-07T16:21:15.697 に答える