PHP勉強のついでにサンプルをいじってみることにしました。
http://web.shirakabako.net/rakutenichiba/itemsearch/code.html
ここのページで楽天APIのPHPスクリプトが公開されていて、
このページだと単にずらっと商品並べるだけなので、
このページの最後に「前へ」「次へ」というような表示を最終部分に表示したいです。
調べたらpagecount をとってきて最終行にこんな感じでいれたらいいと書いてますが、上手にうごきません。
echo '<center>';
if ($page > 1){
$prev = $page - 1;
echo '<a href="rakuten6.php?keyword='.urlencode("$keyword").'&page='.$prev.'">[PREV]</a> ';
}
if ($page < $pagecount){
$next = $page + 1;
echo '<a href="rakuten6.php?keyword='.urlencode("$keyword").'&page='.$next.'">[NEXT]</a>';
}
echo '</center>';
?>
上記のサンプルで「前のページ」「次のページ」と動くようにして下さい。
PHP5です。
また、<[1][2][3][4]>というページングもやってみたいと思っています。
PEAR::Package::Pager 使って簡単にできそうでしたら、そちらも提示して頂けたら嬉しいです。
1で回答した者です。
回答内容が文字化けしてしまったようなので、追加部分とその前後のみを下記に記します。
-省略- <?php mb_language("Japanese"); mb_internal_encoding ("utf-8"); //★追加開始---- $me = $_SERVER['SCRIPT_NAME']; if (isset($_GET['page'])) { $num = intval($_GET['page']); if ($num < 1) $num = 1; } else { $num = 1; } if ($num == 1) { $n2 = $num + 1; $paging = "<a href=\"{$me}?page={$n2}\">次へ</a>>>"; } else { $n1 = $num - 1; $n2 = $num + 1; $paging = "<<<a href=\"{$me}?page={$n1}\">前へ</a> <a href=\"{$me}?page={$n2}\">次へ</a>>>"; } //★追加終了---- $hit = '30'; //★コメントアウト $num = '1'; $word = 'PHP プログラミング'; $base = 'http://api.rakuten.co.jp/rws/1.12/rest?developerId=★★'; $affiliateId = '&affiliateId=◆◆'; -省略- </table> page; } echo "<p>{$paging}</p>" ?> <!-- Rakuten Web Services Attribution Snippet FROM HERE --> <a href="http://webservice.rakuten.co.jp/" target="_blank"> Supported by 楽天ウェブサービス</a> <!-- Rakuten Web Services Attribution Snippet TO HERE --> </body> </html>
ご質問のソースにページングの仕組みを追加してみました。
自身を呼び出すのにグローバル変数 $_SERVER を使っています。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>楽天商品検索API サンプル</title> <style type="text/css"> <!-- img { border: none; } table { margin: 10px; border-top-width: 1px; border-left-width: 1px; border-top-style: solid; border-left-style: solid; border-top-color: gray; border-left-color: gray; } table td { padding: 5px; border-right-width: 1px; border-bottom-width: 1px; border-right-style: solid; border-bottom-style: solid; border-right-color: gray; border-bottom-color: gray; } .image { width: 80px; text-align: center; } .price { color: #8b0000; font-weight: bold; width: 80px; text-align: center; } //--> </style> </head> <body> <?php mb_language("Japanese"); mb_internal_encoding ("utf-8"); //★追加開始---- $me = $_SERVER['SCRIPT_NAME']; if (isset($_GET['page'])) { $num = intval($_GET['page']); if ($num < 1) $num = 1; } else { $num = 1; } if ($num == 1) { $n2 = $num + 1; $paging = "<a href=\"{$me}?page={$n2}\">次のページ</a>>>"; } else { $n1 = $num - 1; $n2 = $num + 1; $paging = "<<<a href=\"{$me}?page={$n1}\">前のページ</a> <a href=\"{$me}?page={$n2}\">次のページ</a>>>"; } //★追加終了---- $hit = '30'; //★コメントアウト $num = '1'; $word = 'PHP プログラミング'; $base = 'http://api.rakuten.co.jp/rws/1.12/rest?developerId=★★'; $affiliateId = '&affiliateId=◆◆'; $operation = '&operation=ItemSearch&version=2008-09-01'; $keyword = '&keyword=' .urlencode($word); $hits = '&hits=' .$hit; $page = '&page=' .$num; $sort = '&sort=%2bitemPrice'; $file = $base .$affiliateId .$operation .$keyword .$hits .$page .$sort; $data = file_get_contents($file); $data = str_replace('itemSearch:ItemSearch', 'itemsearch', $data); $xml = simplexml_load_string($data); foreach($xml->Body->itemsearch->Items->Item as $item){ $itemName = $item->itemName; $itemPrice = $item->itemPrice; $itemCaption = $item->itemCaption; $affiliateUrl = $item->affiliateUrl; $smallImageUrl = $item->smallImageUrl; //文字数を指定して抜き出す 100文字以上なら・・・を追加する $content = mb_substr($itemCaption,0,100); if( mb_strlen($itemCaption)>100){ $content .= '・・・'; } print <<< page <table width="80%" cellspacing="0" cellpadding="0"> <tr> <td class="image" rowspan="2"> <a href="{$affiliateUrl}" target="_blank"><img src="{$smallImageUrl}"</a> </td> <td><a href="{$affiliateUrl}" target="_blank">{$itemName}</a></td> <td class="price">{$itemPrice}円</td> </tr> <tr> <td colspan="2">{$content}</td> </tr> </table> page; } echo "<p>{$paging}</p>" ?> <!-- Rakuten Web Services Attribution Snippet FROM HERE --> <a href="http://webservice.rakuten.co.jp/" target="_blank"> Supported by 楽天ウェブサービス</a> <!-- Rakuten Web Services Attribution Snippet TO HERE --> </body> </html>
回答頂きまして、ありがとうございました。
やってみたのですが、ページ部分が反映されませんでした。
http://apisample.s346.xrea.com/apisample/rakuten7.php
以前に自分で動かした時も確か、同じくページ部分が表示されなかったです。
何か思い当たる原因などありましたら、宜しくお願いいたします。
1で回答した者です。
回答内容が文字化けしてしまったようなので、追加部分とその前後のみを下記に記します。
-省略- <?php mb_language("Japanese"); mb_internal_encoding ("utf-8"); //★追加開始---- $me = $_SERVER['SCRIPT_NAME']; if (isset($_GET['page'])) { $num = intval($_GET['page']); if ($num < 1) $num = 1; } else { $num = 1; } if ($num == 1) { $n2 = $num + 1; $paging = "<a href=\"{$me}?page={$n2}\">次へ</a>>>"; } else { $n1 = $num - 1; $n2 = $num + 1; $paging = "<<<a href=\"{$me}?page={$n1}\">前へ</a> <a href=\"{$me}?page={$n2}\">次へ</a>>>"; } //★追加終了---- $hit = '30'; //★コメントアウト $num = '1'; $word = 'PHP プログラミング'; $base = 'http://api.rakuten.co.jp/rws/1.12/rest?developerId=★★'; $affiliateId = '&affiliateId=◆◆'; -省略- </table> page; } echo "<p>{$paging}</p>" ?> <!-- Rakuten Web Services Attribution Snippet FROM HERE --> <a href="http://webservice.rakuten.co.jp/" target="_blank"> Supported by 楽天ウェブサービス</a> <!-- Rakuten Web Services Attribution Snippet TO HERE --> </body> </html>
echo "
{$paging}
" ;この部分を追加していないだけでした(コンマも)。
思ったとおりの動作になりました。
大変参考になり、本当にありがとうございました。
また機会がございましたら、ご指導頂けましたら嬉しいです。
echo "
{$paging}
" ;この部分を追加していないだけでした(コンマも)。
思ったとおりの動作になりました。
大変参考になり、本当にありがとうございました。
また機会がございましたら、ご指導頂けましたら嬉しいです。