2013年8月21日 星期三

用 Eclipse 開發 Yii Web Application (六)

利用 Gii 可以幫我們把網站的基本架構(scaffold)建構起來, 但我們還是要去調整一下以符合
網站的易用性。
這次我們來調整 Courses 的 Create 網頁, 我們可以在網頁上直接輸入
http://localhost/MyWebSite/index.php?r=courses/create 來開啓網頁。



這個網頁的view 放在 views/create.php, 而跟我們看到填寫資料有關的只有一行:
<?php $this->renderPartial('_form', array('model'=>$model)); ?>
這行的意思是把等下要用的 model 丟給 _form.php(一樣在 views 目錄之下) 去幫我們處理。
_form.php 一開始要定義 form
<?php $form=$this->beginWidget('CActiveForm', array( 
  'id'=>'courses-form',
  'enableAjaxValidation'=>false,
));
?>
以上幾行就是我們在 HTML 中要產生 <form .......> 的功用。

    <div class="row">
        <?php echo $form->labelEx($model,'teacher_no'); ?>
        <?php echo $form->textField($model,'teacher_no',array('size'=>20,'maxlength'=>20));?>
        <?php echo $form->error($model,'teacher_no'); ?>
    </div>
由於接下來都是一樣的文字輸入框, 所以我們只拿一個來解釋。
<?php echo $form->labelEx($model,'teacher_no'); ?> 這行是要產生文字輸入框前面的欄位名稱。
以上面為例, 他去抓取我們在 Courses.php 的 attributeLabels 裡面 teacher_no 的對應名稱, 也就
是 '授課教師編號'。
 <?php echo $form->textField($model,'teacher_no',array('size'=>20,'maxlength'=>20));?>
這行是產生 HTML 中 <input type='text' ......> 的文字輸入框的程式碼。
<?php echo $form->error($model,'teacher_no'); ?> 這行是一旦有錯誤, 會顯示錯誤訊息。如下顯示。

這裡我們想改的部分是'授課教師編號'的部分, 因為這個部分的新增會在 Teachers 相關網頁處理,
為了避免輸入的授課教師編號在teacher 不存在, 我們最好只要選取即可, 所以用下拉式選單是最好的。
我們查了一下 Yii 的API 的確有相關的元件, 想看更詳細的說明可以參考 Dropdownlist
我們改了第一及二行為:

<?php echo $form->labelEx($model,'teacherNo.teacher_name'); ?>
其中 teacherNo.teacher_name 在 用 Eclipse 開發 Yii Web Application (五) 已經有說明了。

<?php echo $form->dropDownList($model, 'teacher_no', CHtml::listdata(
Teachers::model()->findAll(array('order' => 'teacher_no')),'teacher_no','teacher_name'));
?>
其中 dropdownlist 所需的資料(以 list 方式給 dropdownlist 使用)可以用 listdata 來提供利用
Teachers::model()->findAll(array('order' => 'teacher_no')) 把table teachers 裡面所有的資料以
teacher_no 由小到大的順序顯示, 並且我們只需要 teacher_no 與 teacher_name 兩個欄位的資料
來使用, 其中第一個欄位 teacher_no 是實際上要寫入資料庫的資料, 第二個欄位 teacher_name
是實際顯示在網頁上的資料。

新增一筆課程資料看看。
按 Create 看看結果。
的確寫入的資料是 teacher_no 而非 teacher_name。

沒有留言:

張貼留言