質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

1974閲覧

Cakephp3 FormHelplerで出力した結果を表式に表示させたいです。

lovelydai

総合スコア38

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2017/10/19 05:07

いつも大変お世話になっております。
皆さんのアドバイスで順調に時間割システムを作っている者です。

Cakephp3 で色々試していて、時間割作成の時に教室が使えない曜日と時限を選択するインタフェースを作りました。
たくさんのチェックボックスが必要でしたので、CAKEPHPのFormHelplerでInputタグを使い、以下のように表示されています。
イメージ説明

PHP

1 <div class="form-group"> 2 <div class="col-lg-12"> 3 <?= $this->Form->label('利用不可の曜日・時限'); ?> 4 <?= $this->Form->input('assign_idx',[ 5 'options' => $options, 6 'type'=>'select', 7 'multiple' => 'checkbox', 8 'label' => false, 9 'hiddenField' => false, 10 'value' => $values 11 ]); 12 ?> 13 </div> 14 </div>

でも、月から土曜日まで5時限目を入れるとかなりリストがながくなり、ちょっと不便だと思いました。
そこで、こんな感じで表示できればいいなーと思ってデザインしてみました。
イメージ説明

HTML

1 <table cellpadding="0" cellspacing="0" class="table"> 2 <thead> 3 <th> </th> 4 <?php foreach((array)$weeks as $week): ?> 5 <th> 6 <?= $week ?>曜日 7 </th> 8 <?php endforeach; ?> 9 </thead> 10 <?php foreach((array)$periods as $period): ?> 11 <tr> 12 <td> 13 <?= $period ?>時限 14 </td> 15 <?php foreach((array)$weeks as $key => $week): ?> 16 <td> 17 <?= $this->Form->checkbox('assign_idx') ?> 18 </td> 19 <?php endforeach; ?> 20 </tr> 21 <?php endforeach; ?> 22 </table>

HTMLでは簡単に作れるのですが、Cakephp3 は自動的に表示されてしまうので何とかカスタマイズしたいと思っています。
検索してみましたら、チェックボックスを横並びしたいという質問でテンプレートを使うとできるとコメントがありました。
https://teratail.com/questions/55411

しかし、マニュアルを読んでも情報がなさ過ぎてどうすればいいのかぜんぜんわかりませんでした。
サンプルになりそうなものやアドバイスいただけますでしょうか。

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

何とか解決しました。
結局はFormHelplerで自動生成することを諦めて普通にチェックボックスを作り、配列形でまとめました。

weeksとperiodsはそれぞれ曜日と時限が配列で定義されています。valuesは、既存に選択されている情報(週と時限)を持っています。サーバサイドでDBに入れるときにPOSTされたValue価(たとえば、月曜日3時限目の場合、Valueは13です。)をSubstrで分けて使うことにしました。

PHP

1<table cellpadding="0" cellspacing="0" class="table"> 2 <thead> 3  <th> </th> 4  <?php foreach((array)$weeks as $week): ?> 5   <th> 6    <?= $week ?>曜日 7   </th> 8  <?php endforeach; ?> 9 </thead> 10 11 <?php foreach((array)$periods as $periodkey => $period): ?> 12 <tr> 13  <td> 14   <?= $period ?>時限 15  </td> 16 <?php foreach((array)$weeks as $weekkey => $week): ?> 17  <td> 18   <?php 19    $option = $weekkey . $periodkey; 20    // assignテーブルのでたーたValuesと同値の場合、CHECKBOXをチェック状態にするための処理 21    $flag = false; 22    foreach($values as $value) 23    { 24     if($option == $value) 25     { 26      $flag = true; 27     } 28    } 29    // チェックボックスの生成 30    echo $this->Form->checkbox('assigns_idx[]',[ 31       'id' => 'assign-'.$option, 32       'value' => $option, 33       'label' => false, 34       'hiddenField' => false, 35       'multiple' => true, 36       'checked' => $flag, 37    ]); 38 39    unset($value); 40   ?> 41  </td> 42  <?php endforeach; ?> 43 </tr> 44 <?php endforeach; ?> 45</table>

投稿2017/10/20 07:18

lovelydai

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問