ホームページ >バックエンド開発 >PHPチュートリアル >PHP ページネーションはテーブルを使用してクラスをページネーションできます_PHP チュートリアル
* 新しいオブジェクトを作成するときに必要な変数: $query (データ テーブルからレコード数を取得する SQL ステートメント)、$page (現在のページ番号)、$maxline (ページごとの行数)) ※1. Showpageメソッド:上記で作成したオブジェクトの$queryが正しければ、直接呼び出してページング情報を出力します。 * 2. Showtable メソッド: 必須変数: $query (データベースからレコードを読み取る SQL ステートメント。Limit はメソッド内で追加されているため、追加しないでください)
コードは次のとおりです | コードをコピー |
/* | |
クラスページリスト{
プライベート $link;
プライベート $result;
プライベート $maxline;
プライベート $ページ=1;
プライベート $startline=0;
プライベート $countline;
パブリック $countpage;
プライベート $prevpage;
プライベート $nextpage;
//データベース接続を独自のアドレスに変更する必要があります
プライベート $dbhost=DBHOST;
プライベート $dbuser=DBUSER;
プライベート $dbpasswd=DBPASSWD;
プライベート $dbtable=DBTABLE;
/*
* コンストラクターでデータベース接続を確立します
*1. データベース接続の4つのパラメータは定数として設定され、config.phpページに記録されます
* 2. データベースに接続し、データベースを選択します
※3.データベース実行のエンコード方式をutf8に設定します
* 4. 受け取った2つの変数$maxlineと$pageをクラス属性に代入し、クラスの一般属性となります
* ($query は count(*) の SQL であり、以下のメソッドのクエリとは異なります)
* 5. 新規オブジェクト作成時に提出した$query文に従い、データベースに対してクエリを実行し、取得したレコードの総数をクラス属性$this->countlineに代入します
* 総レコード数/ページあたりの行数を除算し、ceil 関数を使用して上位を四捨五入して総ページ数を取得し、クラス属性 $this->countpage に代入します
* 6. 送信された現在のページ番号 $page に基づいて、前後のページ $this->prevpage と $this->nextpage の番号を計算します
※データベース読み込みの開始ラインも計算する必要があります $this->startline
* ここには、page<2、page=last page、page>1 の 3 つの状況があります (この状況を判断することはできません。else を使用してください)
* */
パブリック関数 __construct($query,$maxline,$page){
@$this->link=mysql_connect($dbhost,$dbuser,$dbpasswd) または die($this->フィードバック='システム エラー、管理者に問い合わせてください');
@mysql_select_db($dbtable,$this->link) または die($this->フィードバック='システム エラー ,管理者に連絡してください');
@mysql_query('set names utf8');
$this->maxline=$maxline;
// 行数を読み取り、結果を $coutline
に返す
$this->result=mysql_query($query) または die($this->フィードバック='システム エラー、管理者に連絡してください');
if($count=mysql_fetch_row($this->result)){
//intval は文字列を int に変換します。変換する必要はありませんが、このプログラムの方が健全です
$this->countline = intval($count[0]);
$this->countpage = ceil($this->countline/$maxline);
}
//送信された $page が総ページ数より大きいかどうかを判断します
if($page<=$this->countpage){
$this->page=$page;
}
if($this->page
$this->prevpage=0;
$this->nextpage=2;
$this->startline= 0;
}elseif($this->page==$this->countpage){
$this->prevpage=$this->page-1;
$this->nextpage=0;
$this->startline= ($this->page-1)*$this->maxline;
}その他{
$this->prevpage=$this->page-1;
$this->nextpage=$this->page+1;
$this->startline= ($this->page-1)*$this->maxline;
}
}
/*
* デストラクター
* リソースを解放し、データベース接続を閉じます
* */
パブリック関数 __destruct(){
mysql_free_result($this->result);
mysql_close($this->link);
exit();
}
/*
* ページング情報を出力します
* */
パブリック関数 showpage(){
//$listnum は、上位ページと下位ページの間の桁数を表示します。偶数である必要があります。そうしないと2で割ることができません
$listnum=10;
echo $this->countline." Items, ".$this->countpage." ページ ";
if($this->prevpage==0){
echo "<<Prev ";
}else{
echo "prevpage."><<Prev ";
}
if($this->countpage<$listnum){ //判断总页数是否小于$listnum
$page_start=1;
$page_end=$this->countpage;
}elseif($this->page<$listnum/2){ //判断当前页是否小于$listnum的一半
$page_start=1;
$page_end=$listnum;
}elseif($this->page>$this->countpage-($listnum/2)){ //判断当前页是否是最后几页了
$page_start=$this->countpage-($listnum-1);
$page_end=$this->countpage;
}else{ //如果上面的条件都不符合,那当前也正在中间
$page_start=$this->page-($listnum/2-1);
$page_end=$this->page+($listnum/2);
}
for($i=$page_start;$i<=$page_end;$i++){ //根据上面判断的start和end页码,循环输出之间的页码
if($i==$this->page){
echo "".$i." ";
}else{
echo "".$i." ";
}
}
if ($this->nextpage==0){
echo " Next>>";
}else{
echo " nextpage.">Next>> ";
}
}
/*
* 根据sql语句读取数据库中的数据,然后列成表单输出
* 需要的变量:$field(字段),$table(表名),$startline(开始行),$maxline(每页显示行数)
* 输出从表格的tr开始,从tr结束,所以在使用这个方法前后要加table的标签
* */
public function showtable($query){
$query=$query." LIMIT ".$this->startline.",".$this->maxline;
$result = mysql_query($query) or die($this->feedback='System Error ,Please contect admin');
//行循环开始,定义一个$i变量,用来显示行号,每次执行一条while语句,指针就指向下一条数据
$i=0;
while ($fetch = mysql_fetch_assoc($result)){
$i++;
echo "
/*
* 这个方法是将资源传出,表格在外面自定义样式
* */
public function showresult($query){
$result = mysql_query($query) or die($this->feedback='System Error ,Please contect admin');
return $result;
}
}
?>