前提・実現したいこと
ECサイトを作成し会員ごとの購入履歴ページを作成
購入した商品を4つずつ画面表示させていますが
不要なページネーションが表示されてしまいます。
5つめ、9つめがデータベースに登録された時にページネーションの数も1つずつ増えるようにしたいです。
発生している問題・エラーメッセージ
購入された商品を登録しているテーブルのデータ数が増えるにつれて
画面表示されるページネーションの数も増えてしまいます。
該当のテーブル ここに登録されるデータが増えるごとにページネーションの数も増えます。
該当のソースコード
include_once('c.php'); $pdo = new PDO('mysql:dbname=shop;host=localhost;charset=utf8','root',''); //ページ毎の件数を設定 $row_count = 4; //テーブル全体の件数を取得 $sql = "SELECT COUNT(*) FROM dat_sales_product"; $sth = $pdo -> query($sql); $count = $sth -> fetch(PDO::FETCH_COLUMN); //現在のページを取得 存在しない場合は1とする $page = 1; if(isset($_GET['page']) && is_numeric($_GET['page'])){ $page = (int)$_GET['page']; } if(!$page){ $page = 1; } //$pageの数から件数分を表示するSQLクエリを生成 配列で取得 $sql = "SELECT * FROM dat_sales_product WHERE seles_menber_code=?"; $sql .= " ORDER BY code LIMIT ".(($page - 1) * $row_count).", ".$row_count; $sth = $pdo -> prepare($sql); $data[] = $id; $sth -> execute($data); $aryPref = $sth -> fetchAll(PDO::FETCH_ASSOC); //Pagingクラスを生成し、ページングのHTMLを生成 $pageing = new Paging(); $pageing -> count = $row_count; $pageing -> setHtml($count);
c.php(ここでクラスを作成しています)
<?php class Paging{ //表示させる件数 public $count = 50; //ページングのパラメータ $_GET[]に入る部分 public $param = 'page'; //現在のページの前後に表示させる数 public $items = 2; //最初と最後に繋ぐ文字 public $between_str = '…'; //「前へ」にあたる文字 public $prev_str = '≪'; //「次へ」にあたる文字 public $next_str = '≫'; //ulに付くclass public $ul_class = 'paging'; //aタグを除外する $_GETではなくajax等の処理に public $atag_remove_flg = false; public $page = 1; public $url = ''; public $html = ''; //HTMLを生成 プロパティhtmlに代入 public function setHtml($sum = 0){ $this -> getPage(); $max_page = ceil($sum / $this -> count); if($max_page == 1 || 1 > $this -> page || !is_numeric($this -> page)){ $this -> page = 1; } if($this -> page > $max_page){ $this -> page = $max_page; } $aryCmp = []; for($i = 1; $i <= $max_page; $i++){ $aryCmp[$i] = true; } $loop_count = 0; for($i = ($this -> page + 1); $i <= $max_page; $i++){ $loop_count++; if($loop_count > $this -> items && $i != $max_page){ unset($aryCmp[$i]); } } $loop_count = 0; for($i = ($this -> page - 1); $i >= 1; $i--){ $loop_count++; if($loop_count > $this -> items && $i != 1){ unset($aryCmp[$i]); } } $aryResult = []; foreach($aryCmp as $key => $value){ $aryResult[] = $key; if($max_page == $key){ break; } if(!isset( $aryCmp[($key + 1)] ) && $this -> between_str){ $aryResult[] = $this -> between_str; } } if(!$aryResult){ return ''; } $html = ''; $html .= '<ul class="'.$this -> ul_class.'">'; $aryList = []; if($this -> page != 1 && $this -> prev_str){ $aryList[] = '<li>'.$this -> getQuery(($this -> page - 1), $this -> prev_str).'</li>'; } foreach($aryResult as $key => $value){ if(is_numeric($value)){ $aryList[] = '<li>'.$this -> getQuery($value, $value).'</li>'; }else{ $aryList[] = '<li>'.$this -> getQuery(0, $value).'</li>'; } } if($this -> page != $max_page && $this -> next_str){ $aryList[] = '<li>'.$this -> getQuery(($this -> page + 1), $this -> next_str).'</li>'; } $this -> html = '<ul class="'.$this -> ul_class.'">'.implode('', $aryList).'</ul>'; } //現在のページURLを取得 atag_remove_flgがtrueの場合は行わない private function getPage(){ if($this -> atag_remove_flg) return; if(isset($_GET[$this -> param]) && is_numeric($_GET[$this -> param])){ $this -> page = $_GET[$this -> param]; }else{ $this -> page = 1; } } //ページ内リンクを生成 private function getQuery($page, $str){ $url = $this -> url; if(!$url){ $url = ((isset($_SERVER['HTTPS'])) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; if(isset($_SERVER['QUERY_STRING'])){ $url = str_replace('?'.$_SERVER['QUERY_STRING'], '', $url); } } $html = ''; if($this -> page == $page){ return '<span class="active">'.$str.'</span>'; } if($page == 0){ return '<span class="between">'.$str.'</span>'; } if(!$this -> atag_remove_flg){ $aryQuery = []; if($_GET){ $aryQuery = $_GET; } $aryQuery[$this -> param] = $page; if($page == 1){ unset($aryQuery[$this -> param]); } if($aryQuery){ return '<a href="'.$url.'?'.http_build_query($aryQuery).'">'.$str.'</a>'; }else{ return '<a href="'.$url.'">'.$str.'</a>'; } }else{ return '<span data-page="'.$page.'">'.$str.'</span>'; } } }
補足情報(FW/ツールのバージョンなど)
Windows10
XAMPP環境で構築
あなたの回答
tips
プレビュー