Zend_Paginator を使ってみる。

こんにちわ。
Sydney に渡って前半開発に頑張りすぎて肩こりが酷くなったので、たまには運動しないとと思い最近 15 年くらいやってて多少自信があったスケボーを購入してやり始めたんですが、2 週間目で疲労骨折気味になってしまい、全く動けなくなっている convexstyle です。意味ねえ…

・・・・・

最近のプロジェクトで Zend_Paginator を初めて使ってみました。
今までは PEAR::Pager を使っていたけど、Zend Framework に入ってなかなか便利だというのを聞いていたので使ったが便利だった。

Zend_Paginator_Adapter_DbSelect はかなり良いらしいが、今回は CMS の API 経由で XML をパースして表示する形式だったので、シンプルに Zend_Paginator_Adapter_Array をアダプタとしては使用した。

ページにどの様に表示するかは CSS/XHTML とテンプレートエンジン(Smarty など)の問題なので、色々やり方はあるしそこまで重要では無いが、重要な点はどの様に URI の syntax をテンプレートエンジンのレンダリング結果に受け渡すかだろう。

まずはどの様な値が Zend_Paginator から返されるか dump してみる。

$_paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Array($_data));
$_paginator->setCurrentPageNumber($_pageId);
$_paginator->setItemCountPerPage($this->_pagerIni->blog_per_page);
$_paginator->setPageRange($this->_pagerIni->page_range);
Zend_Debug::dump($_paginator->getPages('Sliding'));

結果は stdClass 形式で下記の様に返される。

object(stdClass)#69 (12) {
  ["pageCount"]=>
  int(1)
  ["itemCountPerPage"]=>
  int(3)
  ["first"]=>
  int(1)
  ["current"]=>
  int(1)
  ["last"]=>
  int(1)
  ["pagesInRange"]=>
  array(1) {
    [1]=>
    float(1)
  }
  ["firstPageInRange"]=>
  float(1)
  ["lastPageInRange"]=>
  float(1)
  ["currentItemCount"]=>
  int(2)
  ["totalItemCount"]=>
  int(2)
  ["firstItemNumber"]=>
  int(1)
  ["lastItemNumber"]=>
  int(2)
}

この記事の続きを読む »

ページの一番上へ移動

RemoteProxy class を考えてみる。

Flash プロジェクトで大抵外部にアクセスするのは画像・XML・API・Remoting・バイナリ通信・たまにテキスト辺りだと思うので、プロジェクト毎に各 View クラスの 親クラスに必要な Proxy クラスを拡張した RemoteProxy のインスタンスを protected で出し入れしておくとかなり楽な気がする。Loader・URLLoader や独自ラッパークラスのインスタンス生成を View 毎にする必要が無くなる。

RemoteProxy の強みは何と言っても Dynamic クラスのため、プロパティや関数を動的に作成することが出来ること。いちいちその都度その都度外部にアクセスするために public 関数を独自に定義するを必要が無い。要は callProperty で設定する関数の syntax や setProperty で渡す変数名を個人的な決め毎で設定しておけば、かなりの確率で再度設定する必要が無い。

例えば、Zend_Amf_Server の UserController の debug という関数を呼び出すとすると、View クラスでは

this._cfZendAmfProxy.addEventListener(CFZendAmfProxyEvent.RESULT, _resultHandler, false, 0, true);
this._cfZendAmfProxy.addEventListener(IOErrorEvent.IO_ERROR, _ioErrorHandler, false, 0, true);
this._cfZendAmfProxy.UserController_debug('Hello World');

で、RemoteProxy class 内部は

flash_proxy override function callProperty(method:*, ...params):*
{
    _call(method, params);
}
private function _call(method:*, params:*):void
{
    var methodName:String = method.toString();
    if(methodName.indexOf("_"))
        methodName = methodName.split("_").join(".");		
    this._nc.call(methodName, this._responder, params[0]);
}

また、Zend_Amf_Server の UserController の sendMail という関数を呼び出すとすると、View クラスでは

this._cfZendAmfProxy.addEventListener(CFZendAmfProxyEvent.RESULT, _resultHandler, false, 0, true);
this._cfZendAmfProxy.addEventListener(IOErrorEvent.IO_ERROR, _ioErrorHandler, false, 0, true);
this._cfZendAmfProxy.UserController_debug(mailVO);

という感じで RemoteProxy class の内部は変わらない。

この記事の続きを読む »

ページの一番上へ移動

Zend_Service_ReCaptcha を使ってみる。

Optical Character Recognition 技術で有名な悪意ユーザーを退治する ReCaptcha が Zend_Service に知らないうちに組み込まれてたんでプロジェクトに使ってみる。かなりシンプルな API 対応なんで想像つくけど、あるもんは使う。

Recaptcha

reCAPTCHA でアカウントを作って、Public Key と Private Key を作成。
これを ini ファイルに設定して、こんな感じで設定。

$_params = array(
    'theme' => 'blackglass'
);
$this->_recaptcha = new Zend_Service_ReCaptcha($this->_recaptchaIni->public_key, $this->_recaptchaIni->private_key);
$this->_recaptcha->setOptions($_params);

View には

$this->view->_recaptcha = $this->_recaptcha->getHtml();

後は変数に post された際に下記な感じか。

if($_req->isPost()) {
    $_recaptcha_challenge_field = $_req->getPost('recaptcha_challenge_field');
    $_recaptcha_response_field  = $_req->getPost('recaptcha_response_field');
    $_recaptchaResult = $this->_recaptcha->verify(
        $_recaptcha_challenge_field,
        $_recaptcha_response_field
    );			
    if(!$_recaptchaResult->isValid()) {
        $_msg = 'reCaptcha field is needed to be filled correctly.';
        array_push($this->_errors, $_msg);
    }			
    if(!empty($this->_errors)) {					
        return;
    }
}

楽やな。

・・・・・

海外に来て、日本じゃあまり聞いたことの無いサービスの API に連携しないといけない事が多々ある。自分だけ知らないのかもしれないが。Silverpop がその1つ。メーリングリスト系のウェブサービスらしい。さすがにこれは Zend_Service に無かった。PHP 系のサイト制作には高頻度使用なので、自作しよう。

日本ではあり得ない仕様が海外だと結構あり得たりする。
ここら辺は本当にむずい。そのうちここら辺については書こう。

ページの一番上へ移動

Flash CS4 クラッシュ in snow leopard

Snow Leopard インストール後、Flash CS4が起動後落ちるようになりました。

まさにこの記事通りなんですが、MAC の OS を Snow Leopard にした途端、Flash CS 4 が起動直後に何もせずに落ちるようになってしまった。CS4 をアンインストール&インストールしても直んない。OS のクリーンインストールを回避して直す方法知りませんか~!!Fonts 系が怪しいのかもなあ。。。個人マシーンだけど、Flash が使えないと生きた心地がしない。

Help me !!!

ページの一番上へ移動

遂に来たねー

Adobe Releases Flash Player 10.1 And AIR 2.0 – Both Include Multi-touch Support

ほほー。楽しみ。

ページの一番上へ移動