gridviewのkartikSelect2ウィジェットでデータをフィルタリングする

エイリアス

インデックスページの上部にkartikselect2ウィジェットを追加しました。私の意図は、同じページで同じ選択値を使用して2つのグリッドビューを同時にフィルタリングすることです。jqueryを作成しましたが、jsonの結果(アラート)は正常に表示されています。しかし、グリッドビューで結果を取得することはできません。助けてください。この点に関してもっと良いアプローチがあれば教えてください。私のindex.phpファイル-

<?php

use yii\helpers\Html;
use yii\grid\GridView;
use kartik\select2\Select2;
use yii\helpers\ArrayHelper;
use frontend\modules\productstockbook\models\Productnames;
use yii\helpers\Json;

/* @var $this yii\web\View */
/* @var $searchModel frontend\modules\productstockbook\models\ProductionSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */

$this->title = 'Productions';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="production-index">

    <h1><?= Html::encode($this->title) ?></h1>
    <?php // echo $this->render('_search', ['model' => $searchModel]); ?>

    <?php

        //echo $list=CHtml::listData(Productnames::model()->findAll(), 'productnames_productname', 'productnames_productname');

        //$model->productnames_productname = 2;
        echo Select2::widget([
        'model' => $model,
        'attribute' => 'productnames_productname',
        'data' => ArrayHelper::map(Productnames::find()->all(),'productnames_productname','productnames_productname'),
        'options' => ['placeholder' => 'Select Product', 'id' => 'catid'],
        'pluginOptions' => [
            'allowClear' => true
        ],
        ]);
     // echo Select2::widget([
     //                        'attribute' => 'productnames_productname',
     //                        //'model' => $model,
     //                        'data' => ArrayHelper::map(Productnames::find()->all(),'productnames_productname','productnames_productname'),
     //                        'options' => ['placeholder' => 'Pilih Guru...', 'id' => 'guru-id', 'class' => "form-control"],
     //                        'pluginOptions' => [
     //                            'allowClear' => true,
     //                            'theme' => \kartik\widgets\Select2::THEME_BOOTSTRAP
     //                        ],
     //                    ]);
    ?>
    <div class= 'col-md-6'>
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            //'productionid',
            'productiondate',
            //'itemid',
            'productname',
            //'batchno',
            'prodqty',

            //['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>
</div>

<div class='col-md-6'>

    <?php
        echo GridView::widget([
        'dataProvider' => $dataProvider2,
        'filterModel' => $searchModel2,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'billdate',
            'productsales_partyname',
            'productname',
            'total',

        ], 
        ]); 
      ?>
  </div>
</div>
<?php
$script = <<< JS
$('#catid').change(function(){   
    var catid = $(this).val();

     $.get('index.php?r=productstockbook/production/get-for-production',{ catid : catid }, function(data){
        alert(data);
        var data = $.parseJSON(data);
        //I'm missing this part
    });
});
JS;
$this->registerJs($script);
?>

私のコントローラー

<?php

namespace frontend\modules\productstockbook\controllers;

use Yii;
use frontend\modules\productstockbook\models\Production;
use frontend\modules\productstockbook\models\ProductionSearch;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use frontend\modules\productstockbook\models\ProductsalesSearch;
use yii\helpers\Html;
use frontend\modules\productstockbook\models\Productnames;
use yii\helpers\Json;

/**
 * ProductionController implements the CRUD actions for Production model.
 */
class ProductionController extends Controller
{
    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'delete' => ['POST'],
                ],
            ],
        ];
    }

    /**
     * Lists all Production models.
     * @return mixed
     */
    public function actionIndex()
    {
        $searchModel = new ProductionSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        $searchModel2 = new ProductsalesSearch();
        $dataProvider2 = $searchModel2->search(Yii::$app->request->queryParams);
        $model = new Productnames();
        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
            'searchModel2' => $searchModel2,
            'dataProvider2' => $dataProvider2,
            'model' => $model,
        ]);
    }

    /**
     * Displays a single Production model.
     * @param integer $id
     * @return mixed
     */
    public function actionView($id)
    {
        return $this->render('view', [
            'model' => $this->findModel($id),
        ]);
    }

    /**
     * Creates a new Production model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     * @return mixed
     */
    public function actionCreate()
    {
        $model = new Production();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->productionid]);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    }

    /**
     * Updates an existing Production model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id
     * @return mixed
     */
    public function actionUpdate($id)
    {
        $model = $this->findModel($id);

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->productionid]);
        } else {
            return $this->render('update', [
                'model' => $model,
            ]);
        }
    }

    /**
     * Deletes an existing Production model.
     * If deletion is successful, the browser will be redirected to the 'index' page.
     * @param integer $id
     * @return mixed
     */
    public function actionDelete($id)
    {
        $this->findModel($id)->delete();

        return $this->redirect(['index']);
    }

    /**
     * Finds the Production model based on its primary key value.
     * If the model is not found, a 404 HTTP exception will be thrown.
     * @param integer $id
     * @return Production the loaded model
     * @throws NotFoundHttpException if the model cannot be found
     */
    protected function findModel($id)
    {
        if (($model = Production::findOne($id)) !== null) {
            return $model;
        } else {
            throw new NotFoundHttpException('The requested page does not exist.');
        }
    }
    public function actionGetForProduction($catid)
    {
        $production = Production::find()->where(['productname'=>$catid])->asArray()->all();
        //$bottle -> select(['productnames.productnames_productname','productnames.bottletype','bottlename.unitprice'])->from('Productnames')->leftJoin('bottlename','productnames.bottletype = bottlename.bottlename')->where(['productnames_productname'=>$catid])->limit(1);
        echo Json::encode($production);
    }
}
ck_arjun

スクリプトを次のように変更します

<?php
 $script = <<< JS
 $('#catid').change(function(){   
   var catid = $(this).val();
   // make http request as select value changes , 
   window.location = 'index.php?r=productstockbook/production/get-for-production&catId='+catid; 
});
JS;

$this->registerJs($script);
?>

コントローラのアクションを変更する

public function actionIndex()
{   
    $catId = yii::$app->request->get('catId');

    $searchModel = new ProductionSearch();
    // pass catId to search model function
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams,$catId);

    $searchModel2 = new ProductsalesSearch();
    $dataProvider2 = $searchModel2->search(Yii::$app->request->queryParams,$catId);

    $model = new Productnames();
    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
        'searchModel2' => $searchModel2,
        'dataProvider2' => $dataProvider2,
        'model' => $model,
    ]);
}

新しい変数を含めることにより、両方の検索モデル検索機能をカスタマイズします。

例えば

public function search($params,$catId)
{
    $query = YourModel::find();

    // filter query object with the passed value.
    $query->andWhere(['your_search_column' => $catId]);



    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    if (!($this->load($params) && $this->validate())) {
        return $dataProvider;
    }

    $query->andFilterWhere([
        // your filtering codes
    ]);

    return $dataProvider;
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

kartikselect2ウィジェットデータをモデルで保存する

分類Dev

Bokeh:2つのインタラクティブウィジェットを使用してCustomJSでデータセットをフィルタリングする

分類Dev

CKEditor-2つのエディターで高度なコンテンツフィルターとウィジェットを一緒に使用する方法

分類Dev

Bokehドロップダウンウィジェット/ CustomJSを使用してデータフレームをフィルタリングする

分類Dev

GridViewウィジェットにフィルターを追加する

分類Dev

データ属性でオブジェクトをフィルタリングし、使用するたびにフィルターをリセットします

分類Dev

QListWidgetのカスタムウィジェットを検索/フィルタリングする

分類Dev

lodashでオブジェクト配列のデータをフィルタリングする方法

分類Dev

Django RestFrameworkで関連オブジェクトのデータをフィルタリングする

分類Dev

インデックス以外の列でxtsオブジェクトをフィルタリングする方法

分類Dev

オブジェクトの配列をインデックスでフィルタリングする

分類Dev

フラッタートグルボタンウィジェットの幅を設定する方法

分類Dev

フラッタートグルボタンウィジェットの幅を設定する方法

分類Dev

ページIDでデータオブジェクトをフィルタリングするSilvertStripe3

分類Dev

他のウィジェットがフラッターでウィジェットの上にあるときに、特定のウィジェットのレンダリングを防ぐにはどうすればよいですか?

分類Dev

OnetoOneモデルのフィールドでクエリセットをフィルタリングする

分類Dev

ロダッシュでオブジェクトのキーをフィルタリングする方法は?

分類Dev

オブジェクトをフィルタリングするためのデザインパターン

分類Dev

ドロップダウンリストでGridViewをフィルタリングする

分類Dev

異なるクラスの2つのオブジェクトとJavaの比較フィールドでリストをフィルタリングする方法

分類Dev

nodejsでJSONデータ(オブジェクト配列を含む)をフィルタリングする

分類Dev

再帰を使用してJavaScriptでオブジェクトデータをフィルタリングする

分類Dev

別のモデルオブジェクトリストを__inでフィルタリングする方法

分類Dev

データストアのフィルタリング部分文字列をオブジェクト化する

分類Dev

Dojoフィルタリングウィジェットデータオーバーフロー

分類Dev

オンプレミスのデータゲートウェイトラフィックをサイト間VPN経由でルーティングする方法

分類Dev

オブジェクトの複数の配列からデータをフィルタリングする方法

分類Dev

Angular 6のドロップダウンでjsonデータをフィルタリングする方法は?

分類Dev

キーでオブジェクトのオブジェクトをフィルタリングする

Related 関連記事

  1. 1

    kartikselect2ウィジェットデータをモデルで保存する

  2. 2

    Bokeh:2つのインタラクティブウィジェットを使用してCustomJSでデータセットをフィルタリングする

  3. 3

    CKEditor-2つのエディターで高度なコンテンツフィルターとウィジェットを一緒に使用する方法

  4. 4

    Bokehドロップダウンウィジェット/ CustomJSを使用してデータフレームをフィルタリングする

  5. 5

    GridViewウィジェットにフィルターを追加する

  6. 6

    データ属性でオブジェクトをフィルタリングし、使用するたびにフィルターをリセットします

  7. 7

    QListWidgetのカスタムウィジェットを検索/フィルタリングする

  8. 8

    lodashでオブジェクト配列のデータをフィルタリングする方法

  9. 9

    Django RestFrameworkで関連オブジェクトのデータをフィルタリングする

  10. 10

    インデックス以外の列でxtsオブジェクトをフィルタリングする方法

  11. 11

    オブジェクトの配列をインデックスでフィルタリングする

  12. 12

    フラッタートグルボタンウィジェットの幅を設定する方法

  13. 13

    フラッタートグルボタンウィジェットの幅を設定する方法

  14. 14

    ページIDでデータオブジェクトをフィルタリングするSilvertStripe3

  15. 15

    他のウィジェットがフラッターでウィジェットの上にあるときに、特定のウィジェットのレンダリングを防ぐにはどうすればよいですか?

  16. 16

    OnetoOneモデルのフィールドでクエリセットをフィルタリングする

  17. 17

    ロダッシュでオブジェクトのキーをフィルタリングする方法は?

  18. 18

    オブジェクトをフィルタリングするためのデザインパターン

  19. 19

    ドロップダウンリストでGridViewをフィルタリングする

  20. 20

    異なるクラスの2つのオブジェクトとJavaの比較フィールドでリストをフィルタリングする方法

  21. 21

    nodejsでJSONデータ(オブジェクト配列を含む)をフィルタリングする

  22. 22

    再帰を使用してJavaScriptでオブジェクトデータをフィルタリングする

  23. 23

    別のモデルオブジェクトリストを__inでフィルタリングする方法

  24. 24

    データストアのフィルタリング部分文字列をオブジェクト化する

  25. 25

    Dojoフィルタリングウィジェットデータオーバーフロー

  26. 26

    オンプレミスのデータゲートウェイトラフィックをサイト間VPN経由でルーティングする方法

  27. 27

    オブジェクトの複数の配列からデータをフィルタリングする方法

  28. 28

    Angular 6のドロップダウンでjsonデータをフィルタリングする方法は?

  29. 29

    キーでオブジェクトのオブジェクトをフィルタリングする

ホットタグ

アーカイブ