2011年1月4日火曜日

jQuery Mobile その1

jQuery Mobileを仕事で利用することになりそうなので、とりあえずメモ。

jQuery MobileはjQueryに追加するモバイル向けのUI集。このため、jQueryは必須。

iOS,Android,Symbian,BlackBerryOSなど多くのプラットフォームをサポートしている。

ダウンロードはこちらから。

基本的なページ構成は以下の通り。

<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf8">
<!-- jQuery Mobile用CSS読み込み -->
<link rel="stylesheet" href="js/jquery.mobile-1.0a2.min.css" />
<!-- jQuery 本体読み込み -->
<script src="js/jquery-1.4.4.min.js"></script>
<!-- jQuery Mobile読み込み -->
<script src="js/jquery.mobile-1.0a2.min.js"></script>
</head>
<body>
<!-- ページヘッダー部 -->
<div data-role="page" id="home">
<div data-role="header">
<h1>Page Title</h1>
</div>
<!-- ページコンテンツ部-->
<div data-role="content">
<p>Hello, world !</p>
</div>
<!-- ページフッター部 -->
<div data-role="footer">
<p>フッター</p>
</div>
</div>
</body>
</html>

2011年1月3日月曜日

Zend Framework ファイルアップロード処理

Zend FrameworkのZend_Controller_Request では、ファイルアップロードに関する操作が行え無い(ような)ので、$_FILESと@move_upload_file()を利用する。

アップロードされるファイルの情報は、

$_FILES['パラメータ名']['xxxx']
でアクセスする。
複数のファイルをアップロードする場合は、パラメータ名をそれぞれ対応するもので置き換える。

詳細情報(xxxx)は、以下で取得する。

1)ファイル名(name)
2)ファイルサイズ(size)
3)テンポラリファイル名(tmp_name)
4) MIMEタイプ(type)
5)エラーコード(error)
  正常終了の場合:UPLOAD_ERR_OK(0)
  ファイルが設定されていない場合:UPLOAD_ERR_NO_FILE (4)
 
move_uploaded_file関数で、テンポラリファイルを他のディレクトリへコピーする。
テンポラリファイルは、PHPのスクリプトが終了すると削除される。

move_uploaded_file($_FILES['パラメータ名']['tmp_name'], ファイル名パス);

※ファイル名パスは、相対パスでもOK

コード例)
if($_FILES['パラメータ名']['error'] == UPLOAD_ERROR_OK){
   move_uploaded_file($_FILES['パラメータ名']['tmp_name'], ファイル名フルパス);
}

2010年2月15日月曜日

Zend_Registryの使い方

Zend_Registryの使い方をとりあえずメモ

グローバルな値を格納するときに利用できるZend_Registryの利用方法をなんとなくメモ

利用は簡単で、Zend_Registry::set("変数名","値");でセットした値をZend_Registry::get("変数名");で取得する。

Zend_Registry::get('変数名');を実行する前に、Zend_Registry::set("変数名","値");を実行しておかないと、Zend_Exceptionがスローされる。

変数に設定しているクラス名からクラスを生成

Zend_Applicationでは、Bootstrapクラスを外部ソースで指定できるので、クラス名の文字列からクラスが生成できるだろうと思って調べてみたのでなんとなくメモ。


Zend_ApplicationのsetBootstrap()を見ていると、以下の記述があった。
コード例)
 $this->_bootstrap = new $class($this);
 どうやら、クラス名を文字列として指定して、生成できるよう。
ただ、
コード例)
 new 'クラス名'():

ではエラーになる。
一度変数に格納しないとだめなようです。


メソッドも同じように変数に一度格納することによって以下のような書き方できる。

コード例)
$class="aaa";
$method="bbb";
//aaaクラスを生成
$aaa=new $class();

//aaaのbbbメソッドを実行
$aaa->$method();

面白い。

BootstrapでのZend_Db_Tableにプロファイラの登録方法

Zend_Application_Resource_Dbを利用して、プロファイラを設定することはできなさそうなので、Bootstrapで設定する方法を、なんとなくメモ

Bootstrapから、'db'リソースを取得して、プロファイラを設定するだけ。

コード例)

function _initDbProfile(){
  $this->bootstrap('db');
  $db=$this->getResource('db');
  $profiler=new Zend_Db_Profiler_Firebug("All Querys");
  $profiler->setEnabled(true);
  $db->setProfiler($profiler);
}

ついでにメタデータをキャッシュする方法も追加すると以下のようになる。


コード例)メタデータをキャッシュする場合
function _initDbProfile(){
  $this->bootstrap('db');
  $db=$this->getResource('db');
  $profiler=new Zend_Db_Profiler_Firebug("All Querys");
  $profiler->setEnabled(true);
  $db->setProfiler($profiler);
  // フロントのオプション設定
  $frontendOptions = array(
    'automatic_serialization' => true
  );
  //バックエンドのオプション(ファイルへ吐き出すので、
  //キャッシュファイルを配置するディレクトリを指定
  $backendOptions  = array(
    'cache_dir'                => APPLICATION_PATH . '/data/cache'
  );
  //キャッシュオブジェクトを作成。キャッシュはファイルへ
  $cache = Zend_Cache::factory(
    'Core',
    'File',
    $frontendOptions,
    $backendOptions
  );
  // テーブルオブジェクトで使用するように設定します
  Zend_Db_Table_Abstract::setDefaultMetadataCache($cache);
}

Zend Framework1.10からはZend_Application_Resource_Cachemanagerが利用できるので、もう少し記述が簡単になるのと、定義を外部に出せるのでメンテナンスはしやすくなるはず。
Zend_Application_Resource_Cachemanagerはおいおい調査

PHPでの処理実行時間取得

PHPで処理時間を知りたくなったので、なんとなくメモ

処理前後の時間をmicrotime()で取得して、差分を取得する。
microtime()は戻りが小数部、半角スペース、整数部の文字列になっているので、explodeで分割して、配列に格納してから、floatに変換しておく。

コード例)
$start=explode(' ',microtime());
sleep(5);
$end=explode(' ',microtime());
$diff=((float)$end[0]+(float)$end[1])-((float)$start[0]+(float)$start[1]);

2010年2月13日土曜日

Zend Framework 1.10.1リリース

Zend Framework 1.10.1リリースがリリースされてました。

変更点はよくわかりませんが、バグフィックスが中心かな?