Zend_View の複製 - clone -

シドニーに来て一番忙しかった週を乗り越えて、ようやく少しだけゆったり出来る!
クリスマスに向けて海外は追い込みなんですよねー。

・・・・・

そんな感じで、PHP でオブジェクトを複製するのに clone ってのが使えるんですね。
例えばメールを送る時や API の Post データのレンダリングを動的に行う時など、Zend_View_Interface を implements した Zend_View_Smarty(名前は任意)を複製して通常の View の処理と明示的に分けたりする。ここら辺の修理は以前非効率なやり方してた。

例えばこんな感じか。

public function testAction()
{
    $_req       =& $this->getRequest();
    $_firstname = $_req->getPost('firstname');
    $_lastname  = $_req->getPost('lastname');
    $_email     = $_req->getPost('email');
    $_from      = $this->mailIni->from;
    $_subject   = $this->mailIni->subject;
    $_data = array(
    );
    $_mailData = array(
        'firstname' => $_firstname,
        'lastname'  => $_lastname
    );
    // View の複製
    $_view = clone $this->view;
    $_view->assign('_mailData', $_mailData);
    $_body = $_view->render('mail/_body.tpl');
    $_mail =& new Zend_Mail();
    $_mail->addTo($_email);
    $_mail->setFrom($_from);
    $_mail->serSubject($_subject);
    $_mail->setBodyText($_body);
    $_mail->send();
    // 通常の View
    $this->view->data = $_data;
}

・・・・・

[参考サイト]
オブジェクトのクローン作成

ページの一番上へ移動

fancybox + URL 書き換え + Zend Framework

Fancybox

Javascript と言えば、自前か JQuery 関連以外はあんまり使ったことが無いので library とか良く分からないですが、最近 thickbox 風の fancybox っていうのをプロジェクトで初めて使ってみた。使い方は物凄く簡単であえて説明をする必要もないので使用方法を見てもらうとして、こんな感じの見た目。

ここ

で、決まった URL 静的に html に記述、もしくは動的な URL を PHP 等でレンダリングして fancybox を割り当てるのは簡単なんですが、DOM 生成後に fancybox への URL をイベント毎に変更して割り当てるにはどうするんだと思って少しはまったのでメモ。

例えばユーザーの入力要素を付加した動的な URL(Zend Framework では Get 変数や UserParam 変数)を iframe 表示する場合。表示エリアが十分で、非同期に Ajax 処理できる場合は特に fancybox を選択する必要が無いので問題ないんだけど、表示スペースの問題でポップアップが必要な場合に当てはまるかも。ちなみに fancybox には thickbox の tb_show や tb_remove 等の様に関数からの処理が出来ない模様。

この記事の続きを読む »

ページの一番上へ移動

Zend_Amf + Win/Linux compatibility

最近 PHP よりのネタばかりだ。。。

Windows サーバでの開発とかした時が無かったし、Flash デベロッパーのつもりなんであんま気にしてなかったんだけど、Zend Amf Server を設置して Flash と連携しようと思ってはまった。まあ、バックスラッシュとかそういった問題なんだけど一瞬途方に暮れたんでメモ。PHP 専門の人には基本中の基本だろうけど。

Zend Amf Server 単体も個人的には通常の Zend Framework での開発と構成を同じにしたいので、ini_set でライブラリをいつもの様に下記の様に設定。でもこれだと Windows で動かず。

ini_set('include_path',ini_get('include_path').':../_application/libs:');

すべてを吸収するのは不可能だとか途方に暮れてたら、PATH_SEPARATOR とか定数があるんですね。知りませんでした。なので下記の様に変更する事で対応出来ました。これで windows(xampp など)のローカルでの簡単なテストも行けますね。

<?php
if(!defined('PATH_SEPARATOR')) {
    if(substr(strtoupper(PHP_OS), 0, 3) == 'WIN') {
        define('PATH_SEPARATOR', ';');
    } else {
        define('PATH_SEPARATOR', ':');
    }
}
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . '../_application/libs');
//. .(一部削除) . .
$_envIni = new Zend_Config_Ini(CONFIG_BASE . 'app.ini', 'env');
$_server   =& new Zend_Amf_Server();
$_server->setClass('UserController');
$_server->setClassMap('UserVO', 'UserVO');
if($_envIni->status == 'test') {
    $_server->setProduction(false);
}
$_response = $_server->handle();
echo $_response;

・・・・・

2011 年初め辺りに日本に復帰するだろう。まだ1年以上あるんだけど、その時期が自分的にはいい時期です。また日本で働ける様に、それまで海外でもっとウェブを鍛錬します。

ページの一番上へ移動

Fluent Interface が気になる。

最近、この手法が気になる。

ページの一番上へ移動