2012-10-02 29 views
0

我想使用下拉列表控件:Yii的 - 小工具 - 說明

$this->widget('ext.multiselect.JMultiSelect',array(
     'model'=>$model, 
     'attribute'=>'attribute', 
     'data'=>$data, 
     // additional javascript options for the MultiSelect plugin 
     'options'=>array() 
)); 

我想知道的是,小部件陣列喜歡的是「屬性」,「模型提供每個選項的詳細信息'和'數據'表示,因爲我無法理解它形成的文檔。

回答

3

參數model是您正在創建多重選擇的模型。

attribute是您正在創建多重選擇的模型屬性。

data是您希望在多重選擇中顯示的列表項的鍵/值對的數組。例如,如果你有一個'用戶'模型,並且在該模型中你有一個字段'access_rights',並且你希望將該字段作爲一個多選擇框並且有幾個值,那麼你可以執行如下操作:

在你的控制器:

$model = new User; 

$data = array(
    'admin_area'=>'Admin Area Access', 
    'product_area'=>'Product Area Access', 
    'customer_area'=>'Customer Area Access', 
    ... etc 
); 

在表單中的視圖文件:

$this->widget('ext.multiselect.JMultiSelect',array(
    'model'=>$model, 
    'attribute'=>'access_rights', 
    'data'=>$data, 
    // additional javascript options for the MultiSelect plugin 
    'options'=>array() 
)); 

編輯:

要將數據添加到來自其他模型的多選選項中,您可以使用CHtml::listData()方法,它將採用活動記錄結果集並將其轉換爲鍵/值對的數組,以便您可以在任何其他CHtml方法中使用需要一個鍵/值對。要做到這一點,您只需使用活動記錄從數據庫中獲取記錄,例如:

$myData = Data::model->findAll(); 

然後,您可以將它放入了listData()方法,它會創建數組:

$this->widget('ext.multiselect.JMultiSelect',array(
    'model'=>$model, 
    'attribute'=>'access_rights', 
    'data'=>CHtml::listData($myData, 'id', 'name'), 
    // additional javascript options for the MultiSelect plugin 
    'options'=>array() 
)); 

(其中「ID」和「名」是從模型表中的字段你想成爲陣列中的'鑰匙'和'價值')

+0

如果我想從數據庫添加數據到$ data中怎麼辦? –

+0

爲了您可以使用CHtml :: listData(),我已經更新了我的答案,包括一些關於你的信息。 – Stu

+0

我已經這樣做了。現在我的分機電話出現錯誤: 別名「ext.multiSelect.JMultiSelect」無效。確保它指向一個現有的PHP文件。 –

0
echo $form->dropDownList($model, 'category', CHtml::listData(TblCategory::model()->findAll(), 
       'id', 'category_name'), array('empty' => '---Select Category---', 
        'style' => 'width:350px;')), array() ?> 

     <?php echo $form->error($model, 'category'); ?>