ホームページ  >  記事  >  バックエンド開発  >  PHP ページングのアイデアと ZF_PHP チュートリアルでの使用

PHP ページングのアイデアと ZF_PHP チュートリアルでの使用

WBOY
WBOYオリジナル
2016-07-21 15:18:45967ブラウズ

半分の成功を得るには、2 つの変数を取得するだけで済みます:
各ページに表示されるレコードの数 $pageSize
テーブル内のデータの合計量 $rowCount
上記 2 つの変数を使用して、合計数を取得できます。ページ数 $pageCount
その後、for ループを通して、例えば合計 13 ページある場合、for ループを通してページ数を出力するのは簡単です

コードをコピーします コードは次のとおりです。

$nav='';//ページ数の保存に使用される変数
for ($i=1;$i<=13;$i++)
{
$nav.=" ".$i."Page ";
}

上記の for ループは
page 1、page 2、page などを出力します。 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.="ページ ".$i." ";
}

たとえば、現在のページ $pageNow が 1 ~ 10 の場合、$step= 0
現在のページ$ pageNowが11から20の間の場合、$step=10
現在のページ$pageNowが21から30の間の場合、$step=20
具体的な実装プロセスのコードを参照すると、簡単にfor ループで毎回 10 だけが表示される状況を実現するには、2 番目の条件に 10 を追加するだけでよいことがわかります。次に、$pageSize を取得するにはどうすればよいでしょうか。 2つの変数と$rowCountの値について教えてください。
$pageSizeはプログラマ自身が指定でき、$rowCountはSQL文を実行する簡単な関数を使用して取得できます

コードをコピー コードは次のとおりです:
/* *
* $sql ステートメント: ① データを取得する ② 総レコード数を取得する
*/
class fenyePage{
public $pageSize=5;// 各ページに表示される番号 --> プログラマによって指定
public $rowCount;// これはデータベースから取得されます (SELECT として形成されます) COUNT(id) FROM TABLE) は、レコードの総数を保存するために使用されます
public $pageNow;//$_GET['page'] によって取得され、現在のページ番号を保存するために使用されます
public $pageCount;//計算され、使用されますto save 合計で何ページあるか
public $res_arr;//ページに表示するデータを保存するために使用します(SELECT * FROM TABLE LIMIT 0,10で取得したデータを保存するなど)
public $nav;/ /どのページとどのページを表示しますか?
/**
* 現在のページのハイパーリンクを取得します
*
* @author Xiaofei 2012/5/30
*/
public function getLink()
{
$this->nav=''; this->rowCount/$this ->pageSize));
$step= フロア(($this->pageNow-1)/10)*10+1;
if ($this->pageNow>10) )
{
$this-> ;nav.=" << ";/ /全体的に 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.=" < ;a href='index.php?page=".($this->pageNow+1)."'>次のページ";
}
if ($this->pageCount>10 && $this- >pageNow<$this->pageCount-8){
$this->nav.=" >>
?>
zfでデータベースを操作する作業はモデル層で完結するので、対応するテーブルモデルに$rowCountの値を取得する関数を入れます
例:注文テーブルを操作します
なので全部表示したいときorder 情報を表示する際には、orderクラスのshoworder()メソッドで$rowCountの値を取得し、pagingクラスの$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 ステートメントはデータの総量を取得するために使用されます
*/
public function showorder($id=null,$fenye=null)
{
$db = $this->getAdapter();
$select=$db->select(); 'o' => '注文'),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 ステートメントは主に合計データを計算するために使用されます。 volume
$sql2="SELECT COUNT(id) FROM `order `";
$fenye->res_arr=$db->fetchAll($sql1);//表示するデータを$res_arr属性に格納簡単に呼び出せるページング クラス
$rowCount=$db->fetchAll ($sql2);//テーブル内のデータの総量をページング クラスの rowCount 属性に保存します
$fenye->rowCount=$rowCount [0]['COUNT(id)'];
$fenye->getLink();
return $fenye->res_arr;


この時点でページングクラス関数が実装されました: WEB開発_シャオフェイ



http://www.bkjia.com/PHPjc/325428.html
www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/325428.html技術記事半分の成功を得るには、次の 2 つの変数を取得するだけで済みます。 各ページに表示されるレコードの数 $pageSize テーブル内のデータの総量 $rowCount 上記の 2 つの変数を使用すると、ページ数がわかります。 ...