cakePHPでファイルアップロード

2007/07/20 | cakePHP

cakePHPでのCMSネタの続きだが、CMSツールの一つとして、ブラウザからサーバ上のファイル管理(画像とか)機能が必要になる。「ブラウザからファイルをアップロードできて、登録内容を一覧で表示できて、削除とかも出来る」という機能が必要になるわけだが、調べてみてcakePHP用のコンポーネントを公開していらっしゃる方がいた。

http://www.reversefolds.com/

メニューのinfoからFileHandlerを選択。ここで提供されるコンポーネントを使用すれば、簡単にファイルのアップロードが可能になる(一覧表示や削除は自前で実装する)。
ただしこのコンポーネントで使用するテーブルのカラム名が少し気に入らない。file_name、mime_type、file_size、extra_fieldというような、アンダーバー入りのカラム名がやだ。ということで、これをname、mimetype、size、extraと名前を変えることにした。

当然カラム名を変えるだけではダメで、スクリプト側での修正も必要だ。修正した箇所はコンポーネントfile_handler.phpの以下の部分。

・64行目付近($_dbFieldsの記述)
 ここのキーの部分をカラム名にあわせて変更
・392行目付近($this->_dbFieldsの記述)
 ここのキーの部分をカラム名にあわせて変更

これで大丈夫っぽい(サンプルのコントローラでも一部記述の修正が必要)。
このコンポーネント、ちゃんとモデル、コントローラ、ビューのサンプルコードも用意されているので、非常にわかりやすい!。
アップロードのアクション(add)はこれで出来たわけだから、あとはbakeして、Pager組み込めば、画像管理機能の出来上がりだ。

ん〜、ナイスコンポーネント。

cakePHPでページング(Pear_Pager)

2007/07/19 | cakePHP

久しぶりにcakePHPで遊んでいる(もちろん仕事だが)。
「とある業態のウェブサイトでは、必要とされる機能が決まりきっているから、機能を一式作って格安にすれば絶対売れる」とそそのかされたから。mojaviで構築しようか迷ったが、PHP4と5両対応にしたいのでcakePHPにした。
基本機能はなんといってもbake.php!。いやぁ、もうbakeサマ様さま。基本部分をbakeしてしまえば、なんとまぁ早いこと!。入力操作は基本的にウェブサイト管理者しかやらないので、確認画面もなしにした(JavaScriptのアラートくらいは出すかもしれない)。
今回ページング処理を入れたのだが、decorate.phpを使用しなかったのはコードが煩雑になりすぎるから。decorateするとindex()の行数が300行近くになり、これはもう見にくい!。検索機能もとりあえずいらないのでbake.php+Pagerでいくことにした。
これがまぁ簡単。以下が出来上がったスクリプト。

function index($page=null) {
  $perPage=20;
  
  if(!is_numeric($page)){$page=1;}
  $pagerParam=array();
  $pagerParam[‘totalItems’]=$this->[モデル名]->findCount();
  $pagerParam[‘perPage’]=$perPage;
  $pagerParam[‘delta’]=5;
  $pagerParam[‘mode’]=’sliding';
  $pagerParam[‘currentPage’]=$page;
  $pagerParam[‘append’]=false;
  $pagerParam[‘path’]=FULL_BASE_URL . strip_plugin($this->base, $this->plugin) . ‘/[コントローラー名]/index/';
  $pagerParam[‘fileName’]=”%d”;
  $pager=Pager::factory($pagerParam);
  $thisPage=$pager->getCurrentPageID();
  $linkTags=$pager->getLinks();
  $this->set(‘paging’, $linkTags[‘all’]);
  
  $this->[モデル名]->recursive = 0;
  $this->set(‘data’, $this->[モデル名]->findAll(”,”,’id DESC’,$perPage,$thisPage));
}

要点はこんな感じ。
・$pageでページ番号を受け取る。
・findCount()で総レコード数を取得。
・pagerに与えるパラメータでpathとfileNameを与える。
・pathの呼び出し方。

このコード、cakePHPやる人には絶対おすすめ(自画自賛だけどそのくらいスマート!)。

HTML_QuickForm2を読む

2007/07/17 | HTML_QuickForm2

PHP4にさよならを言わなくてはならなくなった今、本格的にPHP5に取り組まなくてはいけなくなった。いちおうcakePHPで開発をすすめていく予定にしている。cakePHP曰く「他のライブラリを一切必要としない」という高尚な思想はすばらしいとは思うが、それはイコール「cakePHPにないことは自前でどうぞ」ということだ。私は自前でプログラムを書くのは大嫌い!。
データベース関連はcakePHPで用意されているものを使うとして、そのほかの要素はやっぱりPEARで処理したい(ページングを実現するライブラリがないようで、decorate.phpに少しあるくらいだから、DBも要検討だが)。まずはHTML_QuickForm2を読んでみることにした。自分にとってのウェブプログラミングの3大要素は「データベース」「フォーム」「認証」なので、一つずつクリアしていきたい。認証はPEARのAuthかLiveUser。LiveUserはいろいろ出来るようだが、一度も使ったことがないので、多分Authから始める。

HTML_QuickForm2。読もうと試みたけど、見たことがないのがいろいろ出てくる。必要に駆られてPHP5も多少覗いてはいたのだが・・・理解に苦しむ記述が・・・(っていうかimplementsって何?)。
HTML_QuickForm2自体はそれほど難しくなさそうな感じだ。pear.php.netで紹介されているとおり、HTML_QuickFormをPHP5用に書き直しただけ、という印象だ。見たことのある関数がそこかしこにある。
オブジェクトの生成も、

$myForm=& new HTML_QuickForm2(‘myForm’);

みたいな感じでいけそう(未検証)。少し安心した。
まずはPHP5の環境を用意して諸々テストしていくとしよう。

無料レンタルメールフォームサービス開始

2007/07/16 | その他

レンタルアンケートサービス「CubeQuery」はわりと順調に利用者が増えている。簡単だし、無料だし、グラフで集計結果が見れるし・・・。普通にアンケートをとるには十分な機能を備えているので、結構おすすめなサービスだ。

http://www.cubequery.jp

せっかく作ったフォーム作成の枠組みなので、ついでにメールフォームも作れるようにしてみた。作成可能な書式はアンケートと同じで、フリーアンサー(一行、複数行、メールアドレス書式チェック、数字書式チェック、英数字書式チェック)、シングルアンサー、マルチアンサー、必須チェックが利用可能。データはサーバ側で蓄積せず、逐一登録されたメールアドレスに送信する。
以下のURLから作成可能。

http://form.cubequery.jp

当面はPCのみ対応で、携帯対応は後日。よかったら試してください。

さようならPHP4 来年でメンテ終了

2007/07/15 | PHPの基本

このところ自分にとってはPHPのニュースが盛りだくさんだ(しかも悪い話ばかり)。
PHP4は今年いっぱいで新しいリリースが出なくなるとのことだ。それはまぁいい。それよりも2008年8月8日以降はPHP4の全てのアップデート(セキュリティ・バグ・フィックス)がされなくなるらしい。2008/08/08。単にごろをあわせただけのような日付というのがまた腹立たしい。

ということでPHP4はもうNGなわけだ。日本国内にはPHP5がOKなサーバがこんなに少ないのに!。

cakePHPか、とも思うが、まだまだバリデーション機能が不十分(1.2から少しよくなるらしい)。不十分といってもしばらくこれでしのぐしかないのか。ん〜〜。
Ethnaを少しだけみたけど、これはコマンドラインから操作が出来ないと駄目?。もっと簡単にできるフレームワークは?。mojaviはもうダメ?。Xoopsはどうなる?。

不満だらけだ。
まぁ、現行でPHP4で運営しているレンタルサーバは、途中でやめるわけにはいかないだろうから、今後もそれなりに何らかのサポートが入るだろう。業務面もあるので、今年の9月いっぱいまではPHP4で開発、それ以降はPHP5を採用。

それでなくても悩み事が多いのに・・・。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net