0

私は Yii を使用していますが、いくつかのドロップダウンに少し問題があります。基本的に、コースのドロップダウン メニューを表示するために CForm を使用しています。学生は最大 2 つのコースを選択でき、各コースの選択について、学生は第 1 希望と第 2 希望を選択できます。各コースの選択肢をデータベースに個別に挿入する必要があります。たとえば、学生が 2 つのコースを勉強したいと考えており、1 番目と 2 番目の優先コースを希望する場合、次のように選択します。

  1. コース 1 - 第 1 優先
  2. コース 1 - 第 2 優先
  3. コース 2 - 第 1 優先
  4. コース 2 - 第 2 優先

これにより、データベースに 4 つの新しい行が追加されます。コースの管理者は、これをコースを含む 4 つのドロップダウン メニューとして表示することを望んでいます。

現時点では、コース 1 の 1 番目と 2 番目の優先度だけでテストしていますが、問題はコース 1 です。優先度 2 の値が選択されていない限り、優先度 1 は常に空です。次に、2 つの異なるコースが選択されていても、優先度 1 は優先度 2 と同じ値を取得します。CForm を使用してフォームを作成する Wizard Behavior を使用しているため、このチュートリアルForm Builderに従っています。

これまでのところ、「コース1」のみを扱っているコードは次のとおりです。

これは、コントローラーからの関連コードのスニペットです。

// inside controller
$model = new CourseChoice();
$form = new CForm('application.views.wizard.ccForm', $model);
$form['courseOneP1']->model = new CourseChoice();
$form['courseOneP2']->model = new CourseChoice();

$c1p1 = $form['courseOneP1']->model;
$c1p2 = $form['courseOneP2']->model;

// Here I am just reading the attributes and exiting for testing
if ($form->submitted()&& $form->validate()) {
      echo '<pre>';
      print_r($c1p1->attributes);
      print_r($c1p2->attributes);
      echo '</pre>';
      exit;
      ..........

そして、ここにccFormのフォームのコードがあります

return array(
   'showErrorSummary' => true,
   'title' => 'Course Choice 1',
   'elements' => array(
       // Course 1 - 1st Priority
       'courseOneP1' => array(
           'type' => 'form',
           'elements' => array(
               'course' => array(
                   'label' => '1st Priority',
                   'type' => 'dropdownlist',
                   'id' => 'c1p1',
                   'prompt' => 'Select 1st Priority Course',
                   'items' => CHtml::listData(CoursePeriod::model()->with('course')->findAll("year = 2014"), 'id', 'course.course_name'),
               )
           ),
       ),
       // Course 1 - 2nd Priority
       'courseOneP2' => array(
           'type' => 'form',
           'elements' => array(
               'course' => array(
                   'label' => '2nd Priority',
                   'type' => 'dropdownlist',
                   'id' => 'c1p2',
                   'prompt' => 'Select 2nd Priority Course',
                   'items' => CHtml::listData(CoursePeriod::model()->with('course')->findAll("year = 2014"), 'id', 'course.course_name'),
               )
           ),
       ),
   ),
   'buttons' => array(
       'previous' => array(
           'type' => 'submit',
           'label' => 'Previous'
       ),
       'submit' => array(
           'type' => 'submit',
           'label' => 'Next'
       )
   )
  );

したがって、ID が 15 のコースと ID が 86 のコースの 2 つのコースを選択するとします。両方のドロップダウンを print_r() すると、次のようになります。

Array // Dropdown 1
   (
      [course] => 86
      .... // other irrelevant attributes
   )
Array // Dropdown 2
   (
     [course] => 86
     .... // other irrelevant attributes
   )

アップデート

これについてさらに調べてみたところ、firebug を見ると、両方のドロップダウンが同じ名前であることがわかりました。

<div class="row field_course">
  <label for="c1p1">1st Priority</label>
  <select id="c1p1" name="CourseChoice[course]">
</div>
<div class="row field_course">
  <label for="c1p2">2nd Priority</label>
  <select id="c1p2" name="CourseChoice[course]">
</div>

したがって、2 番目のメニューは最初のメニューを上書きしています。しかし、どうすればこれを変更できますか?いずれかのサブフォームの CForm で 'course'=>array(.... を変更すると、該当するドロップダウンがレンダリングされません。フォームに 'name'=>'course1' を追加しようとしましたが、違いはありません。

4

2 に答える 2

0

CForm は表形式の入力をサポートしていないため、これを実現するには拡張する必要があります。大した仕事ではないかもしれませんが、最終的には、4 つのドロップダウンのデザインがひどいものであると経営陣に納得させました。:-) 私は、ポップアップでコースのグリッドビューを表示してコースを選択するより柔軟なデザインを採用しました。これはうまく機能し、ユーザーにとって混乱が少ないものです。

この問題に関心のある方は、ここで未解決の問題を見ることができます。これは 2009 年末に投稿されましたが、CForm を拡張する実装の可能性を表示するためのリンクがあります。

于 2014-04-09T00:38:25.780 に答える
0

優先度2の入力要素の名前だけ設定できませんでしたか?

'course' => array(
     'label' => '2nd Priority',
     'name' => 'course2',
     'type' => 'dropdownlist',
     'id' => 'c1p2',
     'prompt' => 'Select 2nd Priority Course',
     'items' => CHtml::listData(CoursePeriod::model()->with('course')->findAll("year = 2014"), 'id', 'course.course_name'),
)
于 2013-10-23T14:22:04.563 に答える