dev.convexstyle.net

2007年07月 アーカイブ

Zend Framework での Amazon ItemSearch with PEAR Pager

del.icio.us hatena bookmark

最近個人ワークで 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 が 変数値だと分かり上記の設定で解決しました。

AMFPHP 1.9-beta

del.icio.us hatena bookmark

Flash Remoting には様々なものがありますが、自分がよく使用しているのが AMFPHP。前までは Stable 版の AMFPHP 1.2 を使っていましたが、今年に入って個人作品レベルではづっと AMFPHP 1.9-beta を使い始め、非常に使い勝手が良くなったなあと感心。使い勝手が良くなったのは method table が無くなって関数の定義をする必要がなくなったことや、AMF 3.0 をサポートし Flex から Remote Object で接続できる様になったことなどがありますが、特に Service Browser はこれまでのデバッグ時間を確実に軽減してくれるので最高!


Service Browser は自分で作成する Remoting 用のサービスファイル(class ファイル)内で fatal error やロジックエラーがある場合の確認や、パラメータを取る場合、直接パラメータに値を渡して返り値を確認できます。データベースから select して取得した連想配列も確認できます。従来は不安定な NetConnection Debugger や個人的にクラスを埋め込んでテキスト書き出ししてデバッグを確認していましたが、Service Browser を使用したらすぐに確認できるので開発効率が相当良くなりました。FMS の administrator console っぽい直感的なインタフェースもいいし。


Service Browser のデモはココ

FlashVars in ActionScript 3.0

del.icio.us hatena bookmark

ActionScript 3.0 で開発中、何気に FlashVars の変数を取得しようと思ったんだけど、そういえば!

従来のActionScript 2.0 で FlashVars で渡ってきた変数を _root からアクセスして簡単に取得するやり方は ActionScript 3.0 だったら_root が removed されてるから当てはまらないですよね。どうするんだっけと思い検索したらやっぱり変更していたのでメモ。

Shape, Sprite, Bitmap, SimpleButton, TextField, MovieClip class 等は DisplayObject(display list に見なされるすべてのクラスの基盤クラス)の subclass に当たり、この DisplayObject が読み込まれる大本の swf の loaderInfo プロパティ から FlashVars は取得できる出来る。正確に言うならば extends して作った自分のクラスから辿って、 "Myclass.root.loaderInfo.parameters" から取得できる。

サンプルファイルは下記の通り。


// HTML 側
<object>
<param name="FlashVars" value="myname=convexstyle" />
<embed src="***.swf" FlashVars="myname=convexstyle" *** />
</object>


// ActionScript 側
package {
import flash.display.Sprite;
public class test extends Sprite {
private var myname:String;
public function test() {
var flashVars:Object = this.root.loaderInfo.parameters;
myname = flashVars['myname'];
trace("my name is" + myname);// my name is convexstyle と trace される。
}
}
}

jquery_auto

del.icio.us hatena bookmark

久々に HTML コーディングを夜中にしていたら眠かったので、簡単にロールオーバーさせたいと思って何かあるだろうと検索していたら、やっぱりあった簡単ライブラリ。jquery_auto という JS ライブラリをダウンロードして下記の様に使うと、少ない記述でミス無く動くのでありがたい!特に眠い夜中のコーディングしたくない時には神ですね!

サンプル:

使用方法:

通常の画像と rollover 用のサンプル画像を作成し、同階層に配置。
(今回は button.gif と button_over.gif を作成。)


// HTML に JS を読み込む。
<script type="text/javascript" src="/js/jquery.js"></script>
<script type="text/javascript" src="/js/jquery_auto.js"></script>


// イメージに class="Hover" を記述。
<a href="#"><img src="button.gif" alt="sample" class="Hover" /></a>

KeyboardEvent in ActionScript 3.0

del.icio.us hatena bookmark

キーボードのイベントって AS 1.0~2.0 は何気に swf を html 上でクリックしてアクティブにしていましたが、AS 3.0 ってきっちり明示しないとだめでしたね。この本には普通に書いてましたが、洋書を参考にビジュアライズしてたら見逃して、ちょっと悩んでしまったのでメモ。

swf コンテンツをクリック(自分は stage をクリックしたイベントを取得)したイベント内で stage の focus プロパティで動かしたいオブジェクト(interactiveObject)を"stage.focus = interactiveObject" してキーボードイベントを interactiveObject に対してアクティブにする。今回は interactiveObject 用に square class を設定しました。


参考スクリプトは下記に。

続きを読む "KeyboardEvent in ActionScript 3.0" »