3


1

このPHPページネーションアルゴリズムを改善するにはどうすればよいですか?

*私はPHPでページネーションアルゴリズムに取り組んでいます*それには改善の余地が必要だと推測できますので、UI / UXの観点から、コード自体をクリーンアップするために、それを改善する方法についていくつかの考えが欲しいです、またはあなたが考えることができる他の何か。

アルゴリズムは次のようなページネーションを出力する必要があります:

1 2 3 ... 6 7 8 ... 97 98 99

またはこれ:

1 2 3 4 5 ... 6 7 8 9 10

またはこれ:

1 2 3

これが私のコードです:

 10) && ($currentPage > 4) && ($currentPage < $pages - 3)) {
  for($page = 1; $page <= 3; $page++) {
    echo '' . $page . ' ';
  }
  echo '... ';
  for($page = $currentPage - 1; $page <= $currentPage + 1; $page++) {
    echo '' . $page . ' ';
  }
  echo '... ';
  for($page = $pages - 2; $page <= $pages; $page++) {
    echo '' . $page . ' ';
  }

// Greater than 10 pages, and we're towards the end of the pages
} else {
  for($page = 1; $page <= 5; $page++) {
    echo '' . $page . ' ';
  }
  echo '... ';
  for($page = $pages - 5; $page <= $pages; $page++) {
    echo '' . $page . ' ';
  }
}

3 Answer


2


この記事のページネーションの別の優れた機能


1


私のコードがあなたのものよりも優れているかどうかはわかりませんが、同様の問題をどのように解決したかを以下に示します。

生成するページの量のパラメーターを取り、アンカーを含むクラス pages`でdivを作成します。現在のページには current`のクラスがあります。 このソリューションは、繰り返しが少ないため、少しきれいに見えます。

function generate_pages($total,$current)
{ //Will generate pages and link to ?page=x when passed total pages to output
    if($total > 1)
    {
        $total=intval($total);

        $output='';
        $current_page= (false == isset($current)) ? 1 : $current;
        for($page=1;$page<$total+1;$page++)
        {
            $lower=$current_page-3;
            $upper=$current_page+3;
            $special = ($page==$current_page) ? " class=\"current\"" : "";
            if(($page > $lower && $page < $upper) || $page < 2 || $page > ($total-1))
            {
                if($last_done_page+1 != $page) $output.= '... ';
                $output.=''.$page.'';
                $last_done_page=$page;
            }
        }
        $output.='';
        return $output;
    }
}


-1


同様の投稿はこちらです:http://www.strangerstudios.com/sandbox/pagination/diggstyle.php