2016-04-20 21 views
1

ここでは、カートティックdepdrop yii2拡張を使用して依存ドロップダウンを試みています。この従属ドロップダウンのプロセスは、productnameを選択すると従属バットナーが表示され、バットナンを選択すると従属itemidが表示されます。Yii2で2番目のレベルのkartik depdropが空になる

実際には第1レベルは完全に動作しています。プロダクト名を選択するとバットノーが表示されますが、この動作は完全に機能していますが、2番目のレベルの問題です。私はそれが私のアイテムIDを表示する必要がbatchnoを選択した場合、このアクションは

が動作していないと、この画像のようにエラーを取得しています - Empty Result

コントローラ

public function actionSubcat() { 
    $out = []; 
    if (isset($_POST['depdrop_parents'])) { 
     $parents = $_POST['depdrop_parents']; 
     if ($parents != null) { 
      $cat_id = $parents[0]; 
      $out = Productbatch::getBatchNo($cat_id); 
      echo Json::encode($out); 
      // the getSubCatList function will query the database based on the 
      // cat_id and return an array like below: 
      // [ 
      // ['id'=>'<sub-cat-id-1>', 'name'=>'<sub-cat-name1>'], 
      // ['id'=>'<sub-cat_id_2>', 'name'=>'<sub-cat-name2>'] 
      // ] 
      //echo Json::encode(['output'=>$out, 'selected'=>'']); 
      return; 
     } 
    } 
    echo Json::encode(['output'=>'', 'selected'=>'']); 
    } 

    public function actionProd() { 
    $out = []; 
    if (isset($_POST['depdrop_parents'])) { 
     $ids = $_POST['depdrop_parents']; 
     $cat_id = empty($ids[0]) ? null : $ids[0]; 
     $subcat_id = empty($ids[1]) ? null : $ids[1]; 
     if ($cat_id != null) { 
      $data = Productbatch::getItemid($cat_id, $subcat_id); 
      /** 
      * the getProdList function will query the database based on the 
      * cat_id and sub_cat_id and return an array like below: 
      * [ 
      *  'out'=>[ 
      *   ['id'=>'<prod-id-1>', 'name'=>'<prod-name1>'], 
      *   ['id'=>'<prod_id_2>', 'name'=>'<prod-name2>'] 
      *  ], 
      *  'selected'=>'<prod-id-1>' 
      * ] 
      */ 
      echo Json::encode($out); 
      //echo Json::encode(['output'=>$out, 'selected'=>$data['selected']]); 
      return; 
     } 
    } 
    echo Json::encode(['output'=>'', 'selected'=>'']); 
} 

_form

<?= $form->field($model, 'productname')->widget(Select2::classname(), [ 
    'data' => ArrayHelper::map(Productnames::find()->all(),'productnames_productname','productnames_productname'), 
    'language' => 'en', 
    'options' => ['placeholder' => 'Select Product Name', 'id' => 'cat-id'], 
    'pluginOptions' => [ 
     'allowClear' => true 
    ], 
    ]); ?> 

    <?= $form->field($model, 'batchno')->widget(DepDrop::classname(), [ 
    'options'=>['id'=>'subcat-id'], 
    'pluginOptions'=>[ 
     'depends'=>['cat-id'], 
     'placeholder'=>'Select BatchNo', 
     'url'=>Url::to(['/production/productbatch/subcat']) 
    ] 
    ]); ?> 

    <?= $form->field($model, 'itemid')->widget(DepDrop::classname(), [ 
    'pluginOptions'=>[ 
     'depends'=>['cat-id', 'subcat-id'], 
     'placeholder'=>'Select ItemId', 
     'url'=>Url::to(['/production/productbatch/prod']) 
    ] 
    ]); ?> 

モデル

public static function getBatchNo($cat_id) 
    { 
     $out = []; 
     $data = Productbatch::find() 
       ->where(['productname' => $cat_id]) 
       ->asArray() 
       ->all(); 
     foreach ($data as $dat) { 
      $out[] = ['id' => $dat['itemid'], 'name' => $dat['batchno']]; 
     } 
     return $output = [ 
      'output' => $out, 
      'selected' => '' 
     ]; 
    } 

    public static function getItemid($cat_id, $subcat_id) 
    { 
     $out = []; 
     $data = Productbatch::find() 
       ->where(['productname' => $cat_id]) 
       ->andWhere(['batchno' => $subcat_id]) 
       ->asArray() 
       ->all(); 

     $selected = ''; 

     foreach ($data as $dat => $datas) { 
      $out[] = ['id' => $datas['itemid'], 'name' => $datas['itemid']]; 

      if($dat == 0){ 
        $aux = $datas['itemid']; 
       } 

      ($datas['productname'] == $cat_id) ? $selected = $cat_id : $selected = $aux; 

     } 
     return $output = [ 
      'output' => $out, 
      'selected' => $selected 
     ]; 
    } 

答えて

1

コントローラでこれを行う必要があります。コントローラーで新しいアクションを作成する必要があります。

public function actionState() { 
     $country_id = $_POST['depdrop_parents'][0]; 
     $state = State::find()->where(['country_id' => $country_id])->all(); 
     $all_state = array(); 
     $i = 0; 
     foreach ($state as $value) { 
      $all_state[$i]['id'] = $value['state_id']; 
      $all_state[$i]['name'] = $value['state_name']; 
      $i++; 
     } 
     echo Json::encode(['output' => $all_state, 'selected' => '']); 
     return; 
    } 

また、私はこの問題に悩まされたが最終的に私は私は私はすでに私のコントローラでactionSubcatとactionProdを持っていると思う

+0

..この問題を解決しました。私のコントローラーを見て、私が何をする必要があるか教えてください。 – Tanmay

+0

あなたは1つの配列を作成し、foreachを使用してコントローラに表示されるすべてのサブキャットを保存し、それをjsonに変換して返す必要があります.. –

+0

私のケースではデータが表示されません – Tanmay

関連する問題