質問編集履歴

2 phpコードを載せます。

442ky119

442ky119 score -85

2016/05/27 17:41  投稿

PHPでページング機能の仕組みを知りたい。
題名の通り、PHPでページング機能の仕組みを知りたいです。主にページ番号が表示されるページング機能が知りたいです。
wordpressで実装するためです。
どうすればGoogleの1 2 3 4 5…10 次へ»というように「現在地がどこか」とページ番号が表示されるぺージングが作れますか?
pagingについての知識がないため、実装する方法がわかりません。
下記にあるphpコードはwebで調べたものですが、僕が作成したphpコードのどこに挿入すればいいかわかりません。
またpagingを使う際、sqlは利用するのですか?
僕が作成したphpコードも表示します。
ページング処理はできましたが、<<前へ>><<次へ>>が連続して表示されます。原因を教えてください。
 
 
```PHP  
function paging($limit, $page, $disp=5){  
   //$dispはページ番号の表示数  
   $next = $page+1;  
   $prev = $page-1;  
     
   //ページ番号リンク用  
   $start = ($page-floor($disp/2) > 0) ? ($page-floor($disp/2)) : 1;//始点  
   $end = ($start > 1) ? ($page+floor($disp/2)) : $disp;//終点  
   $start = ($limit < $end)? $start-($end-$limit):$start;//始点再計算  
     
   if($page != 1 ) {  
        print '<a href="?my_page='.$prev.'&my_filter='.$area.'">&laquo; 前へ</a>';  
   }  
     
   //最初のページへのリンク  
   if($start >= floor($disp/2)){  
       print '<a href="?my_page=1&my_filter='.$area.'">1</a>';  
       if($start > floor($disp/2)) print "..."; //ドットの表示  
   }  
     
     
   for($i=$start; $i <= $end ; $i++){//ページリンク表示ループ  
         
       $class = ($page == $i) ? ' class="current"':"";//現在地を表すCSSクラス  
         
       if($i <= $limit && $i > 0 )//1以上最大ページ数以下の場合  
           print '<a href="?my_page='.$i.'&my_filter='.$area.'"'.$class.'>'.$i.'</a>';//ページ番号リンク表示  
         
   }  
     
   //最後のページへのリンク  
   if($limit > $end){  
       if($limit-1 > $end ) print "...";   //ドットの表示  
       print '<a href="?my_page='.$limit.'&my_filter='.$area.'">'.$limit.'</a>';  
   }  
         
   if($page < $limit){  
       print '<a href="?my_page='.$next.'&my_filter='.$area.'">次へ &raquo;</a>';  
   }  
     
   /*確認用  
   print "<p>current:".$page."<br>";  
   print "next:".$next."<br>";  
   print "prev:".$prev."<br>";  
   print "limit:".$limit."<br>";  
   print "start:".$start."<br>";  
   print "end:".$end."</p>";*/  
     
}  
 
$limit = 10;//最大ページ数  
$page = empty($_GET["my_page"])? 1:$_GET["my_page"];//ページ番号  
 
paging($limit, $page);  
 
 
```  
```wordpress
« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »
```
```PHP
function paging($limit, $page, $disp=5){
   //$dispはページ番号の表示数
   $next = $page+1;
   $prev = $page-1;
   
   //ページ番号リンク用
   $start = ($page-floor($disp/2) > 0) ? ($page-floor($disp/2)) : 1;//始点
   $end = ($start > 1) ? ($page+floor($disp/2)) : $disp;//終点
   $start = ($limit < $end)? $start-($end-$limit):$start;//始点再計算
   
   if($page != 1 ) {
        print '<a href="?page='.$prev.'">&laquo; 前へ</a>';
   }
   
   //最初のページへのリンク
   if($start >= floor($disp/2)){
       print '<a href="?page=1">1</a>';
       if($start > floor($disp/2)) print "..."; //ドットの表示
   }
   
   
   for($i=$start; $i <= $end ; $i++){//ページリンク表示ループ
       
       $class = ($page == $i) ? ' class="current"':"";//現在地を表すCSSクラス
       
       if($i <= $limit && $i > 0 )//1以上最大ページ数以下の場合
           print '<a href="?page='.$i.'"'.$class.'>'.$i.'</a>';//ページ番号リンク表示
       
   }
   
   //最後のページへのリンク
   if($limit > $end){
       if($limit-1 > $end ) print "...";   //ドットの表示
       print '<a href="?page='.$limit.'">'.$limit.'</a>';
   }
       
   if($page < $limit){
       print '<a href="?page='.$next.'">次へ &raquo;</a>';
   }
   
   /*確認用
   print "<p>current:".$page."<br>";
   print "next:".$next."<br>";
   print "prev:".$prev."<br>";
   print "limit:".$limit."<br>";
   print "start:".$start."<br>";
   print "end:".$end."</p>";*/
   
}
$limit = 10;//最大ページ数
$page = empty($_GET["page"])? 1:$_GET["page"];//ページ番号
paging($limit, $page);
```
```PHP
<?php
   if ( isset( $_GET[ 'my_filter' ] ) && preg_match( '![0-9]{5}!', $_GET[ 'my_filter' ] ) ) {
   $area = $_GET[ 'my_filter' ];
   } else {
   $area = '13';
   }
   if ( isset( $_GET[ 'my_page' ] ) && is_numeric( $_GET[ 'my_page' ] ) ) {
   $my_page = absint( $_GET[ 'my_page' ] );
   } else {
   $my_page = 1; 
    }
   $id= '私のid';
   $item_per_page   = 100;
   $ct   = '01';
   $start = ( $my_page - 1) * $item_per_page + 1;
   $url  = 'http://search.olp.yahooapis.jp/OpenLocalPlatform/V1/localSearch?appid=' . $id . '&ac=' . $area .'&gc='. $ct.'&results=' . $item_per_page . '&start=' . $start . '&detail=full';
             $xml = simplexml_load_file( $url );
   $total_count = $xml->ResultInfo->Total;
   echo '<table class="left">';
   echo '<caption>' . $start . '件目から' . $item_per_page . '件 表示中 / 総件数 ' . $total_count . '</caption>';
   echo '<style scoped>.paging, table{width:70%;margin:auto;}td{border-bottom:1px solid #ccc;}td{color:#2980b9;}form{text-align:center;padding:2em;}
   .page-link{padding:0em;margin:.2em;display:inline-block;width:3em;border:1px solid #ccc;word-wrap:normal;}h2{text-align:center;margin:1em 0;}</style>';
    $html    = ' <tr><th>店舗名</th><th>読み</th><th>電話番号</th><th>住所</th><th>路線</th><th>最寄駅</th><th>PCUrl</th></tr>
      <tr><td>%1$s</td><td>%2$s</td><td><a href=tel:\"%3$s\"></a></td><td>%4$s</td><td>%5$s</td><td>%6$s</td><td><a href="%7$s">サイトはこちら</a></td><td><a href=\"%8$s\"</td></tr>';
    $i       = 1;
foreach ( $xml->Feature as $key => $item ) {
   printf( $html, $item->Name, $item->Property->Yomi, $item->Property->Tel1, $item->Property->Address, $item->Property->Station->Railway, $item->Property->Station->Name . '駅', $item->Property->Detail->PcUrl1,$item->Property->Detail->Image1);
   $i++;
}
echo '</table>';
?>
```
  • PHP

    38348 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • HTML

    24363 questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • CSS

    17399 questions

    CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

  • API

    3667 questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

  • WordPress

    15617 questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

1 説明文に追加しました。

442ky119

442ky119 score -85

2016/05/21 10:26  投稿

PHPでページング機能の仕組みを知りたい。
題名の通り、PHPでページング機能の仕組みを知りたいです。主にページ番号が表示されるページング機能が知りたいです。
wordpressで実装するためです。
どうすればGoogleの1 2 3 4 5…10 次へ»というように「現在地がどこか」とページ番号が表示されるぺージングが作れますか?
pagingについての知識がないため、実装する方法がわかりません。
下記にあるphpコードはwebで調べたものですが、僕が作成したphpコードのどこに挿入すればいいかわかりません。
またpagingを使う際、sqlは利用するのですか?
僕が作成したphpコードも表示します。
ページング処理はできましたが、<<前へ>><<次へ>>が連続して表示されます。原因を教えてください。  
 
```wordpress  
« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »« 前へ次へ »  
```  
```PHP
function paging($limit, $page, $disp=5){
   //$dispはページ番号の表示数
   $next = $page+1;
   $prev = $page-1;
   
   //ページ番号リンク用
   $start = ($page-floor($disp/2) > 0) ? ($page-floor($disp/2)) : 1;//始点
   $end = ($start > 1) ? ($page+floor($disp/2)) : $disp;//終点
   $start = ($limit < $end)? $start-($end-$limit):$start;//始点再計算
   
   if($page != 1 ) {
        print '<a href="?page='.$prev.'">&laquo; 前へ</a>';
   }
   
   //最初のページへのリンク
   if($start >= floor($disp/2)){
       print '<a href="?page=1">1</a>';
       if($start > floor($disp/2)) print "..."; //ドットの表示
   }
   
   
   for($i=$start; $i <= $end ; $i++){//ページリンク表示ループ
       
       $class = ($page == $i) ? ' class="current"':"";//現在地を表すCSSクラス
       
       if($i <= $limit && $i > 0 )//1以上最大ページ数以下の場合
           print '<a href="?page='.$i.'"'.$class.'>'.$i.'</a>';//ページ番号リンク表示
       
   }
   
   //最後のページへのリンク
   if($limit > $end){
       if($limit-1 > $end ) print "...";   //ドットの表示
       print '<a href="?page='.$limit.'">'.$limit.'</a>';
   }
       
   if($page < $limit){
       print '<a href="?page='.$next.'">次へ &raquo;</a>';
   }
   
   /*確認用
   print "<p>current:".$page."<br>";
   print "next:".$next."<br>";
   print "prev:".$prev."<br>";
   print "limit:".$limit."<br>";
   print "start:".$start."<br>";
   print "end:".$end."</p>";*/
   
}
$limit = 10;//最大ページ数
$page = empty($_GET["page"])? 1:$_GET["page"];//ページ番号
paging($limit, $page);
```
```PHP
<?php
   if ( isset( $_GET[ 'my_filter' ] ) && preg_match( '![0-9]{5}!', $_GET[ 'my_filter' ] ) ) {
   $area = $_GET[ 'my_filter' ];
   } else {
   $area = '13';
   }
   if ( isset( $_GET[ 'my_page' ] ) && is_numeric( $_GET[ 'my_page' ] ) ) {
   $my_page = absint( $_GET[ 'my_page' ] );
   } else {
   $my_page = 1; 
    }
   $id= '私のid';
   $item_per_page   = 100;
   $ct   = '01';
   $start = ( $my_page - 1) * $item_per_page + 1;
   $url  = 'http://search.olp.yahooapis.jp/OpenLocalPlatform/V1/localSearch?appid=' . $id . '&ac=' . $area .'&gc='. $ct.'&results=' . $item_per_page . '&start=' . $start . '&detail=full';
             $xml = simplexml_load_file( $url );
   $total_count = $xml->ResultInfo->Total;
   echo '<table class="left">';
   echo '<caption>' . $start . '件目から' . $item_per_page . '件 表示中 / 総件数 ' . $total_count . '</caption>';
   echo '<style scoped>.paging, table{width:70%;margin:auto;}td{border-bottom:1px solid #ccc;}td{color:#2980b9;}form{text-align:center;padding:2em;}
   .page-link{padding:0em;margin:.2em;display:inline-block;width:3em;border:1px solid #ccc;word-wrap:normal;}h2{text-align:center;margin:1em 0;}</style>';
    $html    = ' <tr><th>店舗名</th><th>読み</th><th>電話番号</th><th>住所</th><th>路線</th><th>最寄駅</th><th>PCUrl</th></tr>
      <tr><td>%1$s</td><td>%2$s</td><td><a href=tel:\"%3$s\"></a></td><td>%4$s</td><td>%5$s</td><td>%6$s</td><td><a href="%7$s">サイトはこちら</a></td><td><a href=\"%8$s\"</td></tr>';
    $i       = 1;
foreach ( $xml->Feature as $key => $item ) {
   printf( $html, $item->Name, $item->Property->Yomi, $item->Property->Tel1, $item->Property->Address, $item->Property->Station->Railway, $item->Property->Station->Name . '駅', $item->Property->Detail->PcUrl1,$item->Property->Detail->Image1);
   $i++;
}
echo '</table>';
?>
```
  • PHP

    38348 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • HTML

    24363 questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • CSS

    17399 questions

    CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

  • API

    3667 questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

  • WordPress

    15617 questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る