再質問をさせていただきます。
※わかりづらかったので説明します。このコードだと、次へボタンをクリックしても3ページ目に行けないんです。また、1,2,3,4,5,6,7,8,9,10,...110と表示され、...の中は絶対表示されないんです。
どうすれば、この問題を直せますか?
php
1$page = empty ( $_GET ["page"] ) ? 1 : $_GET ["page"];
これを入れると、ページ遷移ができなくなります。
このコードでできることは、10ページまでと最後のページの遷移ができること、「次へ」ボタンで2ページ目へ行けることです。
つまり、このコードでもページ遷移が可能だということです。
しかし、反対にできないことは10ページ以降のページが表示されないこと、「次へ」ボタンは2ページまでしか表示されないことです。
var_dumpで見たところ、「次へ」ボタン中身は
string(〇〇) "http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=私のキー&count=50&large_area=&start=11&keyword=&budget=B001=&format=xml"
となっています。つまり、「次へ」ボタンは2ページだけしか指定出来ないとこになっています。
余談ですが
php
1 $prev = $page-1;
を
php
1 $prev = $page-10; 2 3
に変えると9頁目を表示します。
また、10ページ目以降が表示されないのはまだわかりません。
var_dumpで見ると、ページ渡しができています。
要素の詳細を表示をすると、
"..."=$0
と表示されています。
php
1<?php 2$key='私のキー'; 3$count='50'; 4$large_area='〇〇'; 5$start =1+($page-1)*10; 6$budget=$_POST ["budget"] 7$format='xml'; 8$url='http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key='.$key.'&count='.$count.'&large_area='.$large_area.'&start='.$start.'&keyword='.$keyword.'&budget='.$budget.'&format='.$format; 9$xml=simplexml_load_file($url); 10$total_count=$xml->results_available; 11function paging($limit, $page, $disp=5){ 12 global $budget; 13 //$dispはページ番号の表示数 14 $next = $page+1; 15 $prev = $page-1; 16 //ページ番号リンク用 17 $start = ($page-floor($disp/2) > 0) ? ($page-floor($disp/2)) : 1;//始点 18 $end = ($start > 1) ? ($page+floor($disp/2)) : $disp;//終点 19 $start = ($limit < $end)? $start-($end-$limit):$start;//始点再計算 20 21 if($page != 1 ) { 22 print '<a href="?page='.$prev.'&budget='.$budget=$_POST["budget"].'">« 前へ</a>'; 23 } 24 25 //最初のページへのリンク 26 if($start >= floor($disp/2)){ 27 print '<a href="?page=1&budget='.$budget=$_POST["budget"].'">1</a>'; 28 if($start > floor($disp/2)) print "..."; //ドットの表示 29 } 30 31 32 for($i=$start; $i <= $end ; $i++){//ページリンク表示ループ 33 34 $class = ($page == $i) ? ' class="current"':"";//現在地を表すCSSクラス 35 36 if($i <= $limit && $i > 0 )//1以上最大ページ数以下の場合 37 print '<a href="?page='.$i.'&budget='.$budget=$_POST["budget"].'"'.$class.'>'.$i.'</a>';//ページ番号リンク表示 38 } 39 40 //最後のページへのリンク 41 if($limit > $end){ 42 if($limit-1 > $end ) print "..."; //ドットの表示 43 print '<a href="?page='.$limit.'&budget='.$budget=$_POST["budget"].'">'.$limit.'</a>'; 44 } 45 46 if($page < $limit){ 47 print '<a href="?page='.$next.'&budget='.$budget=$_POST["budget"].'">次へ »</a>'; 48 } 49 50 /*確認用 51 print "<p>current:".$page."<br>"; 52 print "next:".$next."<br>"; 53 print "prev:".$prev."<br>"; 54 print "limit:".$limit."<br>"; 55 print "start:".$start."<br>"; 56 print "end:".$end."</p>";*/ 57 58} 59 60$limit =ceil($total_count/$count); //最大ページ数 61$page = empty($_GET["page"])? 1:$_GET["page"];//ページ番号 62 63paging($limit, $page);
これが元のコードです。
PHP
1<html> 2<head> 3<title>API_SAMPLE</title> 4</head> 5<body> 6<form action="" method="GET"> 7<input type="text" name="keyword" > 8<input type="submit"> 9</form> 10</body> 11</html> 12<html> 13<head> 14<title>API_SAMPLE</title> 15</head> 16<body> 17 <form method="GET"> 18 <select name="budget"> 19 <option value="B001">〜2000円</option> 20 <option value="B002">2001円〜3000円</option> 21 <option value="B003">3001円〜4000円</option> 22 <option value="B008">4001円〜5000円</option> 23 <option value="B004">5001円〜7000円</option> 24 <option value="B005">7000円〜10000円</option> 25 <option value="B006">10001円〜</option> 26 </select> <input type="submit" name="search" value="検索" onFocus="this.select()"> 27 </form> 28</body> 29</html> 30<?php 31if (isset($_GET['keyword']) || isset($_GET['budget'])) { 32 $page = empty ( $_GET ["page"] ) ? 1 : $_GET ["page"]; 33$key='私のキー'; 34$count='50'; 35$large_area='〇〇'; 36$start =1+($page-1)*10; 37$keyword=$_GET ["keyword"]; 38$budget=$_GET ["budget"]; 39$format='xml'; 40$url='http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key='.$key.'&count='.$count.'&large_area='.$large_area.'&start='.$start.'&keyword='.$keyword.'&budget='.$budget.'&format='.$format; 41$xml=simplexml_load_file($url); 42var_dump($url); 43$total_count=$xml->results_available; 44function paging($limit, $page, $disp=5){ 45 //$dispはページ番号の表示数 46 $next = $page+1; 47 $prev = $page-1; 48 //ページ番号リンク用 49 $start = ($page-floor($disp/2) > 0) ? ($page-floor($disp/2)) : 1;//始点 50 $end = ($start > 1) ? ($page+floor($disp/2)) : $disp;//終点 51 $start = ($limit < $end)? $start-($end-$limit):$start;//始点再計算 52 53 if($page != 1 ) { 54 print '<a href="?page='.$prev.'&budget='.$_GET["budget"].'&keyword='.$_GET ["keyword"]. '">« 前へ</a>'; 55 } 56 57 //最初のページへのリンク 58 if($start >= floor($disp/2)){ 59 print '<a href="?page=1&budget='.$_GET["budget"].'&keyword='.$_GET ["keyword"].'">1</a>'; 60 if($start > floor($disp/2)) print "..."; //ドットの表示 61 } 62 63 64 for($i=$start; $i <= $end ; $i++){//ページリンク表示ループ 65 66 $class = ($page == $i) ? ' class="current"':"";//現在地を表すCSSクラス 67 68 if($i <= $limit && $i > 0 )//1以上最大ページ数以下の場合 69 print '<a href="?page='.$i.'&budget='.$_GET["budget"].'&keyword='.$_GET ["keyword"].'"'.$class.'>'.$i.'</a>';//ページ番号リンク表示 70 71 } 72 73 //最後のページへのリンク 74 if($limit > $end){ 75 if($limit-1 > $end ) print "..."; //ドットの表示 76 print '<a href="?page='.$limit.'&budget='.$_GET["budget"].'&keyword='.$_GET ["keyword"]. '">'.$limit.'</a>'; 77 } 78 79 if($page < $limit){ 80 print '<a href="?page='.$next.'&budget='.$_GET["budget"].'&keyword='.$_GET ["keyword"]. '">次へ »</a>'; 81 } 82 83 /*確認用 84 print "<p>current:".$page."<br>"; 85 print "next:".$next."<br>"; 86 print "prev:".$prev."<br>"; 87 print "limit:".$limit."<br>"; 88 print "start:".$start."<br>"; 89 print "end:".$end."</p>";*/ 90 91} 92$limit =ceil($total_count/$count); //最大ページ数 93$page = empty($_GET["page"])? 1:$_GET["page"];//ページ番号 94 95paging($limit, $page,10); 96 97if(!$xml->shop){ 98 echo '見つかりませんでした'; 99 } else { 100 foreach($xml->shop as $r){ 101echo '<table>' ; 102 echo '<tr>'; 103 echo '<td>'; 104 echo $r->name; 105 echo '</td>'; 106 echo '<td>'; 107 echo $r->access; 108 echo '</td>'; 109 echo '</tr>'; 110 echo '</table>'; 111 } 112} 113} 114?>
また、$currentが機能していない証拠です。
このページは4ページめですが、1ページめが黒くなっています。(途中で切れていて見れません、ごめんなさい。)
回答2件
あなたの回答
tips
プレビュー