我正在使用Yii,並且在使用某些下拉菜單時遇到了一些問題。 基本上我使用CForm來顯示一些課程的下拉菜單。學生可以選擇兩門課程,每門課程選擇學生可以選擇第一選擇和第二選擇。這是一個要求,每個課程的選擇分別插入到數據庫中。例如,一個學生想學2個療程,並希望有一個第一和第二優先級當然,他們會選擇這樣的:更改Yii中的CForm下拉列表屬性
- 場有1 - 第一優先
- 場有1 - 2優先
- 兩課 - 第一優先
- 兩課 - 第二優先
這將使4個新行到數據庫中。課程的管理員希望將其顯示爲包含課程的4個下拉菜單。
目前,我正在測試的課程只有第一和第二優先級,但問題是課程一 - 優先級總是空的,除非爲優先級二選擇一個值。然後,優先級1獲得與優先級2相同的值,即使選擇了兩個不同的課程。我一直在關注本教程Form Builder,因爲我正在使用使用CForm構建表單的嚮導行爲。
這裏是我的代碼,到目前爲止,也只涉及「當然一」:
這是相關代碼從控制器片段:
// 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'
)
)
);
因此,可以說,我選擇2個療程,一個與15的ID和其他與86的ID,我碰到下面的時候我的print_r()兩個下拉菜單:
Array // Dropdown 1
(
[course] => 86
.... // other irrelevant attributes
)
Array // Dropdown 2
(
[course] => 86
.... // other irrelevant attributes
)
更新
我一直在尋找進一步進入這一點,當我在看螢火,我看到兩個下拉菜單具有相同的名稱:
<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>
所以第二個菜單覆蓋第一個菜單。但是我怎麼能改變這個?如果我改變'course'=> array(....在任何一個子窗體的CForm中,適用的下拉列表不會渲染,我已經嘗試在表單中添加'name'=>'course1',但它沒有區別。
你會這樣想結束,但它似乎沒有任何區別。兩個選擇標籤仍然具有相同的名稱(name =「CourseChoice [course])。奇怪! – Metaman