情弱エンジニアのなかのblog

一人前のエンジニアになる為のブログです

サイトレビューサイト制作への道その5

チェックボックスのデータをエディットで変更する

1.エディットにチェックボックスを追加

2.データをエディットに送る

3.チェックボックスを反映

4.データの保存

5.まとめ

1.エディットにチェックボックスを追加

前回サイトを追加するときにチェックボックスを付けられるようになったので、エディットでサイトのカテゴリーを変更出来るようにしていきたいと思います。 まずは前々回と同じ要領でエディットにチェックボックスを配置していきます。今回は「View」の「edit」ファイルに書き込んでいきます。

echo $this->Form->input('field', array(
                'options' =>$options ,
                'type' => 'select',
                'multiple'=> 'checkbox',
                'empty' => '(choose one)'
                ));

これを追加するだけですね。 f:id:nonaka-katuma-hal:20160803181525j:plain

2.データをエディットに送る

次に「SitesController.php」を編集していきます。

public function edit($id = null) {

に記述していきます。

 $data = $this->Category->find('list', array(
                'fields' => array('Category.id', 'Category.cat_name'),
               ));
              
                //チェックボックスのそれぞれの名前(カテゴリー名)をセット
              $this->set('category', $data);
            
                //idがあるかどうか
        if (!$this->Site->exists($id)) {
            throw new NotFoundException(__('Invalid site'));
        }                
                $data = $this->Site->find('first',array('conditions'=>array('id'=>$id)));
                //pr($data);      //デバッグ
                $this->set('editcategory', $data);
                $edata = $data;

コントローラーからビューにデータを送れるようします。

3.チェックボックスを反映

また「View」の「edit」を編集していきます。 まずはデータを受け取れるかデバッグで確認します。

debug($editcategory);
exit;

これで詳細データを送れてることを確認出来ればチェックボックスに反映させます。

 echo $this->Form->input('cat_id', array(
                        'options' =>$category,
                        'type' => 'select',
                        'multiple'=> 'checkbox',
                        'selected' => array($editcategory['Site']['cat_id1'],
                                            $editcategory['Site']['cat_id2'],
                                            $editcategory['Site']['cat_id3'],
                                            $editcategory['Site']['cat_id4'],
                                            $editcategory['Site']['cat_id5']),
                        ));

これでエディットを開いてすぐに f:id:nonaka-katuma-hal:20160803182433j:plain こうなります。

4.データの保存

最後に編集したデータを保存していきたいと思います。またまた「SitesController.php」のエディットを記述していきます。

if ($this->request->is(array('post', 'put'))) {   
                    //サイト名、サイト写真、URL、レビューの変更
                    $site_name = $this->request->data( 'Site.site_name');
                    $img_src = $this->request->data( 'Site.img_src');
                    $url = $this->request->data( 'Site.url');
                    $review = $this->request->data( 'Site.review');
                                        
                    //入力したカテゴリーデータを$test01~$test05に入れる
                    $test01 = $this->request->data( 'Site.cat_id.0');
                    $test02 = $this->request->data( 'Site.cat_id.1');
                    $test03 = $this->request->data( 'Site.cat_id.2');
                    $test04 = $this->request->data( 'Site.cat_id.3');
                    $test05 = $this->request->data( 'Site.cat_id.4');  
                    //データの代入
                    $request = $this->request->data;
                    //サイト名、サイト写真、URL、レビューのデータを代入する
                    $request['Site']['site_name'] = $site_name;
                    $request['Site']['img_src'] = $img_src;
                    $request['Site']['url'] = $url;
                    $request['Site']['review'] = $review;
                            
                    //それぞれにチェックボックスのデータを代入する
                    $request['Site']['cat_id1'] = $test01; 
                    $request['Site']['cat_id2'] = $test02;
                    $request['Site']['cat_id3'] = $test03;
                    $request['Site']['cat_id4'] = $test04;
                    $request['Site']['cat_id5'] = $test05;

                       // if ($this->request->is(array('post', 'put'))) {                 //データを受け取る
            //if ($this->Site->save($this->request->data)) {          //データをセーブ
                        if ($this->Site->save($request)) {          //データをセーブ

これでサイト名、サイトのイメージ画像、URL、レビュー、カテゴリーの変更を保存出来ます。 確実にもっと短く出来ると思いますが今はこれでご勘弁!

5.まとめ

入力、編集、削除とこれで管理者画面らしくなってきたかと思います。まあまだまだやることはあるわけですが、、