6月 04

11.確認画面(1)

go @ 3:47 AM

まず、確認画面のビューを作ります。
bake で自動生成した、 view.ctp がそのまま使えそうなので、 view.ctp を開いてから「名前を付けて保存」で confirm.ctp を作成します。
今回確認画面はhidden方式でいくので、

<div class="members view">

となっている所の、直下にフォームを作ります。

<?php echo $form->create('Member', array('id'=>'MemberConfirm')); ?>

こんな感じで。
ただの

$form->create('Member');

だけでもいいっちゃいいんですが、そうすると、以下のような add の画面と全く同じ id でフォームタグが生成されてしまうので、

<form id="MemberAddForm" method="post" action="/~bob/cake/index.php/members/add">

これはなんとなく気持ち悪いので、

array('id'=>'MemberConfirm')

を指定して、確認画面用のフォームの id を指定しておきます。

で、 add.ctp のフォーム部分、

	<?php
		echo $form->input('email');
		echo $form->input('password');
		echo $form->input('type_id');
		echo $form->input('birthday');
		echo $form->input('img1');
		echo $form->input('img2');
		echo $form->input('Favorite');
	?>

をごっそりそのままコピーして貼り付けます。
hidden にするので

array('type'=>'hidden')

を一個一個全部に指定して、一応全体を fieldset で囲んでおきます。

こんな感じになりました。

<fieldset style="display:none;">
	<?php
		echo $form->input('email', array('type'=>'hidden'));
		echo $form->input('password', array('type'=>'hidden'));
		echo $form->input('type_id', array('type'=>'hidden'));
		echo $form->input('birthday', array('type'=>'hidden'));
		echo $form->input('img1', array('type'=>'hidden'));
		echo $form->input('img2', array('type'=>'hidden'));
		echo $form->input('Favorite', array('type'=>'hidden'));
	?>
</fieldset>

ただ、アクションとしては同じ add で処理するので、なにかで識別するようにしないと「今は確認画面だ!」というのが分かりません。
ということで、 mode = ‘confirm’ というのを作り出して、これを add.ctp (フォーム入力画面)の方に、 hidden で入れておきます。

add.ctp 側

<fieldset style="display:none;"><?php echo $form->hidden('mode', array('value'=>'confirm')); ?></fieldset>

confirm.ctp 側はvalueなしで。以下を追加。

	echo $form->input('mode', array('type'=>'hidden','value'=>''));

これで、

  • add → confirm へは mode = ‘confirm’ で、
  • confirm → complete へは mode = ” で

行く事になります。
最後に、フォームを閉じておきます。

<div class="submit"><?php echo $form->button('戻る',array('id'=>'back'));?></div>
<?php echo $form->end('送信');?>

これはどっか適当に下の方に入れておきます。
ま、付けたくはないですが、「戻るボタンを付けろ」、と必ず言われるので、一応ただの id=”back” ボタンをつけておきます。

あと、view.ctp との違いで、そっちには id がありますが、こっちにはまだ id は決まっていない、存在していないので、以下の id に関する表示部分を削除しておきます。

		<tr>
			<td><?php __('Id'); ?></td>
			<td>
				<?php echo $member['Member']['id']; ?>
			&nbsp;
			</td>
		</tr>

同様に、 Created と Modified も要らないので削除しておきます。

ここでもうそろそろ画面を見たいのでコントローラをいじります。
/app/controllers/members_controller.php を開いて、function add() の以下の部分、

		if (!empty($this->data)) {
			$this->Member->create();
			if ($this->Member->save($this->data)) {
				$this->Session->setFlash(__('The Member has been saved', true));
				$this->redirect(array('action'=>'index'));
			} else {
				$this->Session->setFlash(__('The Member could not be saved. Please, try again.', true));
			}
		}

この1行目からのif文の中にさらにもう一個if文を入れて、もとからあった部分はelseのあとにつっこみます。
構造としてはこんな感じ。

		if (!empty($this->data)) {
			if () {

			} else {
				// もとからあった部分
			}
		}

で、その新しいif文を以下のようにします。

		if (!empty($this->data)) {
			if ($this->data['Member']['mode'] == 'confirm') {
					$this->Member->set($this->data);
					$this->set('member', $this->data);
					$this->render('confirm');
			} else {
				$this->Member->create();
				if ($this->Member->save($this->data)) {

これで確認画面が出るはずなのでブラウザで

http://localhost/~bob/cake/index.php/members/add

を開いて適当に入力して進むと・・・

ぼこぼこにエラーが出てますが、入力したEmailの値とかは表示されてるはずです。
エラーは配列とかの問題だけなので気にしなくていいです。

>>次のページ「確認画面」へ

Comments are closed.

here comes