2011-07-12 11 views
1

私は、mysqlテーブルの行数に基づいて作成された動的ページリンクを作成しようとしています。私はページごとに10件の結果を表示し、PHPスクリプトに追加のページへのリンクを作成させたいと考えています。頁リンク作成方法

私はnum_rowsを使用して10で割ってみましたが、もし53の行があれば5.3となりました。ここで5つではなく6つのページが必要でした。私はラウンド関数を使用してループを考えていますfor文を介して$ pages> $ rows_roundedまで実行します。そして、10行ごとにページへのリンクを追加します($ i)これは、これを達成するための最良の方法ですか、これに代わる簡単なルートですか?

+0

あなたは切り上げ、ないラウンドを使用したいと思います。 http://php.net/manual/en/function.ceil.php – dqhendricks

答えて

0

ループのためのアイデアは良いもののように聞こえる、あなたは次のようなものを使用します。

$rows_rounded = ceil(mysql_num_rows($result)/10); 

for($x = 1; $x <= $rows_rounded; $x++){ 
    echo '<a href="/page-'.$x.'/'">Page '.$x.'</a>'; 
} 

しかし、あなたは、現在のページを検出考慮する必要があり、そう例えば、現在のページが3だった、場合それはあなたのforループでテストすることをお勧めします.3番目のリンクをエコーすると、余分なクラスを追加してスタイルを設定できるようになります。

+0

私は$ x = $ current_pageを指定すると思います。 $ x <= $ rows_rounded;そして、$ x = 1から別のループを行います。 $ x <= $ current_page; 2番目のループはページ#1を現在のページに書き込み、最初は現在のページから最後のページにループを書き込むことができます。ループ内でスタイルを設定し、x = current_pageかどうかを確認し、そうであれば通常のリンクを表示します。私はgallery.phpから値を取得する?page = 3など...私はそれがうまくいくはずだと思います... – Drew

+0

実際には上記のばかげた笑は考えていません...はい私はループ内の現在のページを確認できますそれをスタイルしてください... – Drew

1

pagenatorクラスを作成しました。 getCurrentPages()は、配列に表示する必要があるすべてのページを返します。 1ページ目に9ページを表示したい場合は、1〜9の配列が得られます。しかし、もしあなたが10ページにいたら、あなたは配列6-14を得るでしょう。合計ページ数が20で、ページ数が20の場合は、配列11-20を返します。

<?php 

    class Lev_Pagenator { 

     private $recordsPerPage; 
     private $currentPage; 
     private $numberOfTotalRecords; 
     private $lastPage = null; 

     public function __construct($current_page, $number_of_total_records, $records_per_page = 25) { 
      $this->currentPage = $current_page; 
      $this->numberOfTotalRecords = $number_of_total_records; 
      $this->recordsPerPage = $records_per_page; 
     } 

     public function getCurrentStartIndex() { 
      return ($this->currentPage - 1) * $this->recordsPerPage; 
     } 

     public function getCurrentPages($number_of_pages_to_display = 9) { 
      $start_page = $this->currentPage - floor($number_of_pages_to_display/2); 
      if ($start_page < 1) $start_page = 1; 
      $last_page = $this->getLastPage(); 
      $pages = array($start_page); 
      for ($i = 1; $i < $number_of_pages_to_display; $i++) { 
       $temp_page = $start_page + $i; 
       if ($temp_page <= $last_page) { 
        $pages[] = $temp_page; 
       } else { 
        break; 
       } 
      } 
      return $pages; 
     } 

     public function getPreviousPage() { 
      if ($this->currentPage === 1) return false; 
      return $this->currentPage - 1; 
     } 

     public function getNextPage() { 
      if ($this->currentPage === $this->getLastPage) return false; 
      return $this->currentPage + 1; 
     } 

     public function getLastPage() { 
      if ($this->lastPage === null) $this->lastPage = ceil($this->numberOfTotalRecords/$this->recordsPerPage); 
      return $this->lastPage; 
     } 
    } 
?> 

EDIT(USAGE):

<?php 

    $pagenator = new Lev_Pagenator($current_page, $number_of_total_records, $records_per_page); 
    $pages_array = $pagenator->getCurrentPages($number_of_pages_to_display); 
?> 
+0

どうすればこのコードを使用できますか?どんな値を指定する必要がありますか?あるいは単に関数を呼び出しますか?それは私が必要なものを正確に聞こえるが、私はそれを実装する方法がわからない... – Drew

+0

@Drewは以前にクラスを使用したことはありませんか?よく彼らは素晴らしいです、あなたはすぐに読んでください!クラスを使用しようとしたときにのみクラスを含むスクリプトをロードするクラスオートローダーを作成することもできます。クラスを使用してオブジェクトを初期化し、いくつかの入力(引数)を与える必要があります。簡単な使い方のヒントについては上記の編集を参照してください。また、currentStartIndexを取得するためのクラスのような他の便利なメソッドがいくつかあることに注意してください。これは、SQLステートメントの開始レコードとして使用します。 – dqhendricks

関連する問題