2017-01-28 7 views
1

私はyii2で自分のプロジェクトを行います。 データベースからドロップダウンリスト(kartik depdtopウィジェットを使用)にデータを取得するフォームがあります。 最初のフィールドは「type_of_goods」です。顧客は「type_of_goods」に応じて「goods」を受け取ります。 商品の「goods_amount」と「total_cost」の2つのテキスト入力フィールドが「goods_amount」(goods_amount * price)に依存している。Yii2フォームの入力フィールドはdbの値でカウントされます

お客様が購入したい商品の金額または購入したい金の金額を入力します.jsスクリプトは、どちらの場合でも別のフィールドで彼の価値を示します。

値段はDB内の商品表にあります。 goods_idや商品に関するいくつかの情報を "goods" -field(dbクエリを実行して価格を取得してjs関数に入れる)、あるいはおそらく価格で取得して、上に書いたことを行うjsスクリプトに入れることはできますか?

どうすれば実現できますか?それは正しい方法ですか?

コード: ビュー

<?php $form = ActiveForm::begin([ 
      'options' => [ 
      'class' => 'form-horizontal col-lg-11', 
      'enctype' => 'multipart/form-data' 
      ], 
     ]); ?> 
    <?= $form->field($type_of_goods, 'id') 
     ->dropDownList(
      ArrayHelper::map(Type_of_goods::find()->all(), 'id', 'name'),  
      ['id'=>'type_of_goods_id'] 
     ); 
    ?> 
    <?= $form->field($goods, 'id')->widget(DepDrop::classname(), [ 
      'options' => ['id' => 'id'], 
      'pluginOptions' => [ 
        'depends' => ['type_of_goods_id'], 
        'placeholder' => 'Choose your goods', 
        'url' => \yii\helpers\Url::to(['goods/goods-dep-type']) 
      ] 
     ]); 
    ?> 

    <?= $form->field($goods, 'price')->textInput(); 

    ?> 

    <?= $form->field($order, 'amount')->textInput(); 

    ?> 

    <?php ActiveForm::end(); ?> 

コントローラー:

public function actionGoodsDepType() 
{ 
    $out = []; 
    if (isset($_POST['depdrop_parents'])) { 
     $parents = $_POST['depdrop_parents']; 

     if ($parents != null) { 
      $game_id = $parents[0]; 
      $out = \app\models\Goods::gelGoodsList($goods_type_id); 
      echo Json::encode(['output' => $out, 'selected' => '']); 
      return; 
     } 
    } 
    echo Json::encode(['output' => '', 'selected' => '']); 
} 

モデル:あなたはAJAXリクエストごとにユーザ入力の新しい値を作成する必要があります

public static function gelGoodsList($type_id) 
{ 
    $query = self::find() 
     ->where(['type_id' => $type_id]) 
     ->select(['id', 'name'])->asArray()->all(); 

    return $query; 
} 
public static function getPrice($id) 
{ 
    $query = self::find() 
     ->where(['id' => $id]) 
     ->select(['price'])->asArray()->one(); 

    return $query; 
} 

答えて

0

。これは、(ビューファイルの一番下にある場所)うまくいくかもしれません:あなたはこの例のみを使用した(コントローラに正しい要素の正しいIDを設定し、メソッドを記述する必要が

$this->registerJs(" 
    $('#Type_of_goods-price').on('change', function() { // Should be ID of a field where user writes something 
     $.post('index.php?r=controller/get-price', {  // Controller name and action 
      input_price: $('#Type_of_goods-price').val() // We need to pass parameter 'input_price' 
     }, function(data) { 
      total_price = $.parseJSON(data)['result'];  // Let's say, controller returns: json_encode(['result' => $totalPrice]); 
      $('#Type_of_goods-total').value = total_price; // Assign returned value to a different field that displays total amount of price 
     } 
    }); 
"); 

、それはcontrollerコントローラ名になりますと、 actionGetPriceメソッド名)。

+0

ありがとうございますが、それが動作するかどうかわからない、私はすべての私の値を置くと、私の依存ドロップダウンリストは動作を停止します。なぜわからないのですか – wiaim

+0

少しの情報が欠けているので、私は確信できません。私はおおよその解決策を書いた。依存するドロップダウンが機能しなくなった場合は、コンソールでエラーがないかチェックしてください。何もない場合は、おそらく "ネットワーク"セクションですか? –

+0

私は説明してください、コンソールは "SyntaxError:missing)after argument list"と書くことができますが、どこに置くべきかわかりません。そして、私が間違っていない場合、2つのかっこがありません – wiaim

関連する問題