人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: ぽこたん
●カテゴリ:コンピュータ インターネット
✍キーワード:API echo NeXT Pear PHP
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● deflation
●49ポイント

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

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

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

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


2 ● deflation
●94ポイント ベストアンサー

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/

◎質問者からの返答

echo "

{$paging}

" ;

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ