-
- $nav='';//($i=1;$i<=13;$i++)
- {
- $nav のページ数
- を保存するために使用される変数。 = "ページ ".$i." ";
- }
上記のコード
をコピーします。ループは次のようなものを出力します
1ページ、2ページ、3ページ、4ページ、5ページ、6ページ、7ページ、8ページ、9ページ、10ページ、11ページ、12ページ、13ページ
一度に 10 ページだけを表示したい場合はどうすればよいでしょうか?たとえば、1 ~ 10 ページ、11 ~ 20 ページなどです。
for ループを少し変更するだけです。
-
- $step= Floor(($pageNow-1)/10)*10+1;
- for ($i=$step;$i<=$step+10;$i++ )
- {
- $nav.="page ".$i." ";
- }
コピーコード
たとえば、現在のページ $pageNow が 1~10 の場合、$step=0
現在のページ $pageNow が 11 ~ 20 の場合、$step=10
現在のページ $pageNow が 21~30 の場合、$step=20
特定の実装プロセスのコードを参照すると、毎回 10 だけを表示する状況を実現するには、for ループの 2 番目の条件に 10 を追加するだけでよいことがわかります。このステップを getLink にパッケージ化します。 fenyePage クラス。
では、$pageSize 変数と $rowCount 変数の値を取得するにはどうすればよいでしょうか?
$pageSize はプログラマー自身が指定でき、$rowCount は SQL ステートメントを実行する単純な関数を使用して取得できます。
-
- /**
- * $sql ステートメント: ① データを取得する ② 総レコード数を取得する
- */
- class fenyePage{
- public $pageSize=5;//プログラマによって指定されたページごとに表示される数
- public $rowCount; //これは、レコードの総数を保存するためにデータベースから (SELECT COUNT(id) FROM TABLE の形式で) 取得されます
- public $pageNow;//$_GET['page'] を通じて取得され、現在のレコードの保存に使用されますページ番号
- public $pageCount;//計算され、総ページ数を保存するために使用されます
- public $res_arr;//ページに表示されるデータを保存するために使用されます (SELECT * FROM TABLE LIMIT 0,10 の保存など)取得したデータ)
- public $nav;//どのページのナビゲーションバーを表示する
- /**
- * 現在のページのハイパーリンクを取得します
- *
- * @author Xiaofei 2012/5/30
- */
- public function getLink()
- {
- $this->nav=''; ;pageCount=ceil(($this->rowCount/$this->pageSize));
- $step= フロア(($this->pageNow-1)/10)*10+1; this->pageNow>10)
- {
- $this->nav.=" << ; < ;/a> ";//全体的に 10 ページごとに進みます
- }
- if ($this->pageNow!=1)
- {
- $this->nav.=" 前のページ ";
- }
- if ($this->pageNow!=1)
- {
- $this ->nav.="ホームページ ";
- }
- for ($start=$step;$start<$step +10 && $ start<=$this->pageCount;$start++)
- {
- $this->nav.=" ".$start ." ";
- }
- if ($this->pageNow!=$this->pageCount)
- {
- $this->nav.="最後のページ ";
- }
- if ($this->pageNow!=$this->pageCount)
- {
- $this- >nav.=" 次のページ"; ->pageCount>10 && $this->pageNow<$this->pageCount-8){
- $this->nav.=" >> ";//全体を 10 ページごとに戻します
- }
- $this->nav.="/Total ".$this-> ;pageCount."ページ"
- }
- }
- ?>
-
-
- コードをコピー
-
zfでデータベースを操作する作業はモデル層で完結するので、対応するテーブルモデルに$rowCountの値を取得する関数を配置しました
例: 注文テーブルを操作します。
次に、すべての注文情報を表示したい場合は、注文クラスの showorder() メソッドを通じて $rowCount の値を取得し、それをページング クラスの $rowCount 属性に支払います。
同様に、ページに表示するデータ情報もページングクラスの $res_arr 属性に渡されます。
このようにして、ページング クラス (fenyePage) を簡単にインスタンス化し、それをパラメータを通じて showorder() 関数に渡すことができ、関数は次のアクションを完了します。
①ページに表示する情報
②テーブルにはレコードがいくつありますか?
- /**
- * 指定されたユーザー ID に従って、ユーザーの履歴注文記録をクエリします
- *
- * @author Xiaofei 2012/5/30
- * @param $id ユーザー ID
- * @param $fenye ページング処理用にインスタンス化されたオブジェクト
- * @todo $sql1 ステートメント "select * from table where * 制限 0,10" この SQL ステートメントは主に、データベース内のデータを取得してビュー レイヤーに表示するために使用されます
- * @todo $sql2 ステートメント "select count( id) from table" この SQL ステートメントは、総データ量を取得するために使用されます
- * @link http://bbs.it-home.org
- */
- public function showorder($id=null,$fenye=null)
- {
- $db = $this->getAdapter(); $select=$db->select();
- $select->from(array('o' => 'order'),array('o.id','o.user_id','o. user_name','o.food_name','o.food_price','o.order_time','o.order_state'));
- if ($id!=null){
- $select->where('o. user_id=?',$id);
- }
- $select->join(array('d'=>'部門'),'o.dep_id = d.id','d.dep_name'); if($fenye!=null){
- $select->limit($fenye->pageSize,($fenye->pageNow-1)*$fenye->pageSize
- }
- $sql1=$ select->__toString();
- //この SQL ステートメントは主にデータの総量を計算するために使用されます
- $sql2="SELECT COUNT(id) FROM `order`"; -> ;fetchAll($sql1);//表示するデータをページング クラスの $res_arr 属性に保存します。これは呼び出しに便利です
- $rowCount=$db->fetchAll($sql2);//保存テーブル内のデータの総量 ページング クラスの rowCount 属性に移動します
- $fenye->rowCount=$rowCount[0]['COUNT(id)'];
- $fenye->getLink(); return $fenye->res_arr
- }
-
-
- コードをコピー
-
-
|