2016-12-30 10 views
1

I 2 SELECT2第二の最初のコード最初のYii2:kartik・セレクト

からのデータに依存するドロップダウンリストを有する:

<?= $form->field($model, 'patient_id')->widget(select2::className(),[ 
    'data'=> arrayhelper::map(patient::find()->all(),'patient_id','patient_name'), 
    'options'=>['placeholder'=>'select patient Name ... '], 
    'pluginOptions'=>[ 
      'allowClear'=>true 
    ], 
])?> 

第1コード:

<?= $form->field($model, 'doctor_id')->widget(select2::className(),[ 
    'data'=> arrayhelper::map(doctors::find()->all(),'doctor_id','doctor_name'), 
    'options'=>['placeholder'=>'أختر اسم الطبيب '], 
    'pluginOptions'=>[ 
      'allowClear'=>true 
    ], 
])?> 

I 2番目のコードのSQLコードがわかる:

医師

からdoctor_nameを選択するので、私はそれをする必要があります

でdoctor_id

(はpatient_id = "第一のDropDownListから値" patient_servicesからdoctor_id SELECT)医師からDISTINCT doctor_nameを選択

通常のドロップダウンリストでは、このように動作しますYii2 Lesson - 20 Dependent Drop Down Lists By DoingITeasyChannelしかしselect2ではどうしたらいいか分かりませんでした。

-------------------------------更新後----
コメントとしてDepDropがありますが私はそれを使う方法を混乱させた。 S(コントローラで

<?= $form->field($model, 'doctor_id')->widget(DepDrop::classname(), [ 'options' => ['placeholder' => 'Select ...'], 'type' => DepDrop::TYPE_SELECT2, 'select2Options'=>['pluginOptions'=>['allowClear'=>true]], 'pluginOptions'=>[ 'depends'=>['receipts-doctor_id'], // here i got confused 'url' => Url::to(['/receipts/child']), 'loadingText' => 'Loading child level 1 ...', ] ]); ?>

public function actionChild() { $out = []; if (isset($_POST['depdrop_parents'])) { // what they meaning by depdrop_parents or what i should change it ?
$id = end($_POST['depdrop_parents']); $list = Account::find()->andWhere(['parent'=>$id])->asArray()->all(); $selected = null; if ($id != null && count($list) > 0) { $selected = ''; foreach ($list as $i => $account) { $out[] = ['id' => $account['id'], 'name' => $account['name']]; if ($i == 0) { $selected = $account['id']; } } // Shows how you can preselect a value echo Json::encode(['output' => $out, 'selected'=>$selected]); return; } } echo Json::encode(['output' => '', 'selected'=>'']); }

+3

あなたは何に追加するには、[Kartik DepDrop](http://demos.krajee.com/widget-details/depdrop) –

+0

を使用することができます@InsaneSkullは、DepDropプラグインがSelect2ドロップダウンをサポートしているため、DepDropプラグインを使用してSelect2を使用することを提案しました。 'type'オプションを使わなければなりません。 – sm1979

+0

@InsaneSkullありがとう..私はこれを見たことがありませんでした。私はそれを見て、私はいくつかの問題を持っています ''depends' => ['account-lev0']、'私はそれを取得しませんでした私は親のIDが 'patient_id'コントローラコード '$ list = Account :: find() - > andWhere(['parent' => $ id]) - > asArray() - > all();' –

答えて

3

第1フィールド:

私は

<?= $form->field($model, 'patient_id')->widget(Select2::classname(), [ 'data' => ArrayHelper::map(patient::find()->asArray()->all(), 'patient_id', 'patient_name')]); ?>

を変更した、もう一つは、 elect2):

<?= $form->field($model, 'patient_id')->widget(Select2::classname(), [ 
    'data' => ArrayHelper::map(patient::find()->asArray()->all(), 'patient_id', 'patient_name')]); 
?> 

第二フィールド(DepDrop):

<?= $form->field($model, 'doctor_id')->widget(DepDrop::classname(), [ 
    'options' => ['placeholder' => 'Select ...'], 
    'type' => DepDrop::TYPE_SELECT2, 
    'select2Options'=> ['pluginOptions' => ['allowClear' => true]], 
    'pluginOptions'=> [ 
     'depends' => ['receipts-doctor_id'], 
     'url' => Url::to(['/receipts/child']), 
     'loadingText' => 'Loading child level 1 ...', 
    ] 
]); 
?> 

プラグインオプション'depends' => ['receipts-doctor_id'],ショーに順に)選択などに、)要素のIDを取るクリックで(変更されなければならない要素( Ajaxリクエストを送信し、コントローラから結果を取得します。この場合、IDがreceipts-doctor_idの要素が存在する必要があります。あなたが親要素のIDを知らない、またはIDを設定したい場合は、親要素に'options' => ['id' => 'receipts-doctor_id'],を使用できます。

とコントローラのために、あなたは次のように値を取得することができます

public function actionChild() 
{ 
    $depdropParents = Yii::$app->request->post('depdrop_parents'); 

    if ($depdropParents !== null) { 
     $value = $depdropParents[0]; 
     // Now your $value contains what was being selected in parent element 
    } 
} 
+0

何かが明確ではありません。私は最初のドロップダウンリストを選択した後に何も起こっていない..と2番目のDepDropはまだ無効にする! –

+0

もしそうなら、コントローラ(バックエンドコード)にエラーがあることを意味します。方法を知っている場合はネットワークを使用して、エラーメッセージを表示します。 –

関連する問題