スポンサード リンク
2-A2 商品を注文する 
ユースケースの中の注文する流れを作ることにする。
少し、ボリュームが多いように感じるが、イレギュラー処理は後で手直しするとして正常系の注文までができるようにする。
イテレーション番号 | 2 |
---|
対象ユースケース | A-商品を注文する |
---|
期間 | 2007.2.5〜2007.2.11 |
---|
メンバー | opaken |
---|
目標 | 商品をカートに入れて注文するところまで作る。 |
---|
テーブル構造のエクスポート 
- phpMyAdminに手動で作ったテーブルの構造をSQLとしてエクスポートしておく。
- エクスポートのSQL オプションで構造にチェック
- DROP TABLE / DROP VIEWを追加>>チェック
- IF NOT EXISTSを追加>>チェック
- 「AUTO_INCREMENT値を追加する>>チェックしない
- 逆クオートでテーブルやフィールドを囲む>>チェック
- データには、チェックせずに「実行する」ボタンをクリックするとCREATE TABLEのSQLが表示する
商品詳細ページ設計 
- 表示するべき項目を整理する。
- 画面仕様を簡単にまとめる。
- 該当商品が見つからなかった場合は、「商品が見つかりませんでした」と表示する。
- CakeShop/画面設計/商品詳細(items)
に整理した。
- 画面仕様としては、アクションと表示項目、エラーメッセージをまとめておくこと。
ページテンプレートの修整 
アプリケーションの共通設定 
ModelなしのController 
$usesにnullか空の配列「array()」を指定するだけでOKだそうです。
class MyController extends AppController
{
// var $uses = null; works too
var $uses = array();
function index()
{
}
}
Ajaxを使ったCRUDのサンプル 
- サンプルのソースを下記ページからダウンロード
CakePHP :: A Rapid Development Framework :: Posts
- 動かして見たが、エラーになったので、
views/elements/ajax_post_list.thtmlを修正した。
どうも、ajaxのhelperで、linkToRemoteメソッドが、linkメソッドに移行したようだ。メソッドのパラメータ仕様も変更しているみたい。URLがarrayのオプションで指定するのではなく、第2引数で指定するようになっているようだ。
<td><?php echo $ajax->link('View', "/posts/view/{$post['id']}" ,array('fallback'=>'#view', 'update'=>"post_content", 'complete'=>"new Effect.Appear('post_content');")) ?>
| <?php echo $ajax->link('Edit', "/posts/edit/{$post['id']}", array('fallback'=>'#edit', 'update'=>"edit_post", 'complete'=>"new Effect.Appear('edit_post');")) ?>
| <?php echo $ajax->link('Delete', "/posts/delete/{$post['id']}", array('fallback'=>'#list', 'update'=>"post_table", 'complete'=>"stripe();initDrag();")) ?>
</td>
CakePHPのバージョンアップ 
共通で使うコンポーネント 
バリデーションの強化 
ログの出力ができない 
CakePHPのログをLog4phpに切り替える 
htmlタグのカスタマイズ 
- tags.ini.phpで修正できるそうなのだが、入っていなかった。
https://trac.cakephp.org/browser/branches/1.1.x.x/cake/config/tags.ini.php?rev=3261
からダウンロードして、app/configの下に入れると反映されるみたい。
- ラジオボタンにラベルを付ける。
tags.ini.phpを修正
radio = "<input type="radio" name="data[%s][%s]" id="%s" %s />%s"
↓
radio = "<input type="radio" name="data[%s][%s]" id="%s" %s /><label for="%s">%s</label>"
cake/lib/view/helper/html.phpのradioメソッドを修正
$out[] = sprintf($this->tags['radio'], $this->model, $this->field, $individualTagName, $parsedOptions, $optTitle);
↓
$out[] = sprintf($this->tags['radio'], $this->model, $this->field, $individualTagName, $parsedOptions, $individualTagName, $optTitle);
区分値を表示するためのヘルパークラスを自作 
PHP/CakePHP/CakePHPで区分値の表示を簡単にするためのヘルパークラス SectionHelper
テーブル定義の備考欄で区分値に関しては、arrayの連想配列でそのままコピペできるように、'code1' => 'name1', 'code1' => 'name1' の形式で記述するように!
スタイルシートが無くなっている 
商品詳細ページ実装 
decorateで作ったController 
共通のコントローラーとモデルクラス 
ユーティリティ関数 
CakePHPのモデルをエンティティとして扱う 
モデルクラスの定数 
- PHP4では、クラス定数を使うことができないので、連想配列で定数っぽく指定するようにした。
cakecommons/commons_model.php に下記を追加
// モデル内で使う定数を格納した配列
var $define = array();
// モデル内の定数の取得
function c($key) {
return $this->constant($key);
}
// モデル内の定数の取得
function constant($key) {
return $this->define[$key];
}
- モデルクラスで、$defineに連想配列で定義しておく。
var $define = array(
'SALE_MESSAGE_OPEN' => '%sから販売開始予定です',
'SALE_MESSAGE_UNFIXED' => '販売日は未定です',
'SALE_MESSAGE_LAST' => '%sまで販売いたします',
'SALE_MESSAGE_CLOSE' => '販売終了いたしました',
);
- 定数を取得する場合は、$this->c()メソッドで取得できる。
$this->c('SALE_MESSAGE_OPEN');
システム全体で使用するメッセージファイル 
- メッセージに関する設定を下記の中にdefineで指定するようにした。
cakecommons/message.ini.php
商品一覧ページ 
未着手
- カテゴリと商品の関連情報をテーブル設計する。
- カテゴリに属している商品を一覧表示する。
- ページング機能が必要
- 商品を選択すると商品詳細ページを開く。
カテゴリメニュー 
未着手
- サイドメニューにカテゴリリストを表示する。
- 部品として作りたい。
- MovableTypeのWidgetみたいにできるか?
- カテゴリは階層があるので、表示中のカテゴリのサブカテゴリのリストを表示する。
- サブカテゴリが存在しなければ、表示中のカテゴリと同階層のカテゴリリストを表示する。
ビューのパーツ化 
ぱんくずリスト 
未着手
- 表示しているカテゴリの階層をぱんくずで表現する。
商品をカートに入れる 
未着手
- 商品詳細ページから数量を指定してカートに入れる。
- カートの内容は、とりあえずセッション情報として保持する。
カート一覧ページ 
未着手
- カートの中身を表示する。
- 商品の数量変更および削除ができるようにする。
届け先入力ページ 
未着手
- カート一覧から「レジに進む」で注文手続きに進む。
- 届け先と決済方法を入力する。
注文内容確認ページ 
未着手
- 注文する内容を表示する。
- 「注文を確定する」で注文情報をDBに格納する。
- 購入者にメールを送信する。
ふりかえり 
Keep(よかったこと) 
- 共通の処理をcakecommons以下にまとめることができた。
- Log4phpを使うことができたので、ログの監視がやりやすくなった。
- プルダウンの使う方が解った。
- エンティティの概念をうまく吸収できた。
Problem(わるかったこと) 
- CakePHPがバージョンアップした際のアップデートが難しい。
- 日本語のメッセージがソースコード内に埋まっているため、多言語対応する時に困る。
- 共通部分の実装および検討に時間がかかり、実際の画面の実装が進まなかった。
Try(次回挑戦) 
- cake本体にできるだけ手を入れないようにすること
- アップデート時には元のアーカイブと比較して変更部分のみをマージするようにする。
- CakePHPの多言語対応について調査していく
- 次回は、画面実装の見積もりを行うようにして評価する
イテレーション評価・得点 
フレームワークを初めて使うときには、共通部分をどのようにして組み込んでいくかの検討に時間がかかることが解った。
プロトタイプ的に作っていくにしても、全体を考えながら進めなければいけないので、共通ロジックの実装を考慮する必要あり。
今回は、当初の目的の画面実装ができなかったので、50点 
関連ページ 
コメント 
スポンサード リンク