PHPのページングについてお聞きします。

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 使って簡単にできそうでしたら、そちらも提示して頂けたら嬉しいです。

回答の条件
  • URL必須
  • 1人2回まで
  • 13歳以上
  • 登録:2011/01/21 13:17:56
  • 終了:2011/01/22 01:15:14

ベストアンサー

id:deflation No.2

deflation回答回数1036ベストアンサー獲得回数1262011/01/21 23:49:14

ポイント94pt

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>

http://q.hatena.ne.jp/

id:hiroponta

echo "

{$paging}

" ;

この部分を追加していないだけでした(コンマも)。

思ったとおりの動作になりました。

大変参考になり、本当にありがとうございました。

また機会がございましたら、ご指導頂けましたら嬉しいです。

2011/01/22 01:14:26

その他の回答(1件)

id:deflation No.1

deflation回答回数1036ベストアンサー獲得回数1262011/01/21 13:59:28

ポイント49pt

ご質問のソースにページングの仕組みを追加してみました。

自身を呼び出すのにグローバル変数 $_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>
id:hiroponta

回答頂きまして、ありがとうございました。

やってみたのですが、ページ部分が反映されませんでした。

http://apisample.s346.xrea.com/apisample/rakuten7.php

以前に自分で動かした時も確か、同じくページ部分が表示されなかったです。

何か思い当たる原因などありましたら、宜しくお願いいたします。

2011/01/21 19:01:03
id:deflation No.2

deflation回答回数1036ベストアンサー獲得回数1262011/01/21 23:49:14ここでベストアンサー

ポイント94pt

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>

http://q.hatena.ne.jp/

id:hiroponta

echo "

{$paging}

" ;

この部分を追加していないだけでした(コンマも)。

思ったとおりの動作になりました。

大変参考になり、本当にありがとうございました。

また機会がございましたら、ご指導頂けましたら嬉しいです。

2011/01/22 01:14:26

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません