1

以下のページネーション php スクリプトで表示されるページ数を制限したいと考えています。これは私のために数年前に作成されたスクリプトであり、ここで同様の問題を読みましたが、コーディングは大きく異なります。

これについて何か助けていただければ幸いです。

これが私の現在のスクリプトです:

<?php 
if ($max_pages>1) {
    echo "<br>";
    if ($page>0) {
        echo '<a href="'.$base_url.$sites_directory.($category_id==0?($page==1?'':($page-1).'/'):$category_id.'/'.$paginate[0].($page==1?'':'_'.($page-1)).'/').'" class="pagination">Previous</a>';
    }
    for ($x=0;$x<$max_pages;$x++) {
        if ($page<>$x) {
            echo '<a href="'.$base_url.$sites_directory.($category_id==0?($x==0?'':$x.'/'):$category_id.'/'.$paginate[0].($x==0?'':'_'.($x)).'/').'" class="pagination">'.($x+1).'</a>';
        }
        else {
            echo '<span class="pagination">'.($x+1).'</span>';
        }
    }
    if (($page+1<>$max_pages)) {
        echo '<a href="'.$base_url.$sites_directory.($category_id==0?($page==($max_pages-1)?'':($page+1).'/'):$category_id.'/'.$paginate[0].($page==($max_pages-1)?'':'_'.($page+1)).'/').'" class="pagination">Next</a>';
    }
}?>
4

1 に答える 1

1

現在のスクリプト$xは 0 と の間を循環し$max_pagesます。

あなたができることは、最初にそれらを$from_pageandに置き換えることです$to_page

$from_page = 0;
$to_page   = $max_pages;

...

for ($x=$from_page; $x < $to_page; $x++)

その時点で、スクリプトは以前と同じように機能します。

$Nの前の$Nページから後のページまでのみを表示する場合は$page

$N = 5; // display 5+5+1 = 11 pages

$from_page = $page - $N; if ($from_page < 0) $from_page = 0;
$to_page   = $from_page + 2*$N+1; if ($to_page > $max_pages) $to_page = $max_pages;
$from_page = $to_page - 2*$N-1; if ($from_page < 0) $from_page = 0;

おそらく最もエレガントな方法ではありませんが、現在のページの中央にある 11 ページの領域に収まるようにします。ページ 0 と へのリンクも表示したい場合があります$max_pages-1

MRE版

<?php 
if ($max_pages>1)
{
    $N = 5; // display 5+5+1 = 11 pages

    $to_page   = min($max_pages, max(0, $page - $N) + 2*$N+1);
    $from_page = max($to_page - 2*$N-1, 0);

    echo "<br>";
    if ($page > 0)
    {
        echo '<a href="'.$base_url.$sites_directory.($category_id==0?($page==1?'':($page-1).'/'):$category_id.'/'.$paginate[0].($page==1?'':'_'.($page-1)).'/').'" class="pagination">Previous</a>';
    }
    for ($x=$from_page; $x < $to_page; $x++) {

        if ($page != $x) {
            echo '<a href="'.$base_url.$sites_directory.($category_id==0?($x==0?'':$x.'/'):$category_id.'/'.$paginate[0].($x==0?'':'_'.($x)).'/').'" class="pagination">'.($x+1).'</a>';
        }
        else {
            echo '<span class="pagination">'.($x+1).'</span>';
        }
    }
    if (($page+1<>$max_pages)) {
        echo '<a href="'.$base_url.$sites_directory.($category_id==0?($page==($max_pages-1)?'':($page+1).'/'):$category_id.'/'.$paginate[0].($page==($max_pages-1)?'':'_'.($page+1)).'/').'" class="pagination">Next</a>';
    }
}?>
于 2013-01-24T15:26:11.437 に答える