最近個人ワークで Amazon を使ったモノを2つ程作っていますが、1つは Zend Framework を使用して開発中。 Services_Amazon の itemSearch を使用し商品検索を行っていましたが、Zend Framework 内で各ページ 10 件表示を PEAR Pager の GET の処理で行った際に少し悩んでしまったのでメモ。
Zend Framework の細かい仕様はここでは省きますが、Zend Framework は MVC パターンに基づいて Zend_Controller_Front が URL を分析しディスパッチ処理・ルーティング処理を行います。例えば今回の URL が http://www.test.com/amazon/search/ だとすると AmazonController class 内のsearchAction 関数内で処理を行うのですが、下記の様に Pager のオプションで append を false に、fileName に GET の変数値を表す "%d" を明確に「?pageID=%d」の様に追加しないとうまく動きませんでした。
(ソースは簡略化してあります。)
$amazon =& new Services_AmazonECS4(あなたの Subscription ID);
$amazon->setAssociateID(あなたの Associate ID);
$amazon->setLocale('JP');$options = array();
$options['Keywords'] = 'flash';
$options['Sort'] = 'salesrank';
$options['ResponseGroup'] = 'Medium';
if(isset($_GET['pageID'])) {
$options['ItemPage'] = $_GET['pageID'];
} else {
$options['ItemPage'] = 1;
}$rs =& $amazon->itemSearch('Books', $options);
$params = array(
'itemData' => itemData 用の配列,
'perPage' => 10,
'delta' => 5,
'urlVar' => 'pageID',
'path' => 'http://www.test.com/amazon/result/',
'fileName' => '?pageID=%d',
'append' => FALSE,
'httpMethod' => 'GET',
);$o_pager =& Pager::factory($params);
$navi = $o_pager->getLinks();
$pageNavi = $navi['all'];
こうすることで、URL が 2 ページ目から http://www.test.com/amazon/result/?pageID=2(3,4,5・・・)の様になるので無事に Services_Amazon の $options['ItemPage'] の値に GET 変数を渡すことが可能です。
今回は append を TRUE 、fileName を空白にして、デフォルトではhttp://www.test.com/amazon/result/index.php?pageID=2 になったり、append を FALSE 、fileName を空白にして http://www.test.com/amazon/result/ で GET 変数が渡らなくなったりと Zend Framework 内で上手く挙動させれなかったのですが、検索して %d が 変数値だと分かり上記の設定で解決しました。











