使用Typehead在网格中过滤Yii2

时间:2017-08-07 01:10:23

标签: php yii2 grid typehead

我正在尝试将Kartik Gridview中的过滤与Typehead小部件结合起来。

我正在关注Krajee Article的指导,并结合此问题Github Issue

这是我的index.php中的代码

[
    'attribute' => 'type',
    'vAlign' => 'middle',
    'value' => 'type',
    'filterType' => GridView::FILTER_TYPEAHEAD,
    'filterWidgetOptions' => [
        'pluginOptions' => ['highlight' => true],
        'dataset' => [
            [
                'local' => ArrayHelper::map(MasterProduct::find()->orderBy('master_prod_id')->where(['user_id' => $userId])->asArray()->all(), 'type', 'typr'),
                // 'datumTokenizer' => "Bloodhound.tokenizers.obj.whitespace('value')",
                'display' => 'value',
                // 'prefetch' => $baseUrl . '/samples/countries.json',
                'remote' => [
                    'url' => Url::to(['/master-product/index']) . '?q=%QUERY',
                    'wildcard' => '%QUERY'
                ]
            ]
        ]
    ],
    'filterInputOptions' => ['placeholder' => 'Select Type..'],
    'width' => '210px',
    'hAlign' => 'center'
],

这是我在controller.php中的代码

 public function actionIndex($q = null) {
    $model = new MasterProduct();
    $searchModel = new MasterProductSearch();
    $query = new \yii\db\Query();

    $query->select('type')
            ->from('master_product')
            ->where('type LIKE "%' . $q . '%"')
            ->orderBy('type');
    $command = $query->createCommand();
    $data = $command->queryAll();
    $out = [];
    foreach ($data as $d) {
        $out[] = ['value' => $d['type']];
    }
    Json::encode($out);
    $userId = Yii::$app->user->identity->id;
    $searchModel->user_id = $userId;
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    $dataProvider->pagination->pageSize = 50;

    return $this->render('index', [
                'searchModel' => $searchModel,
                'dataProvider' => $dataProvider,
                'model' => $model,
                'userId' => $userId,
    ]);

该列成功过滤了数据,但它没有像Demo那样执行自动完成/建议。

实施例: 我的期望是这样的, enter image description here

即,用户只输入sau,Typehead会显示包含sau的所有数据,然后使用自动过滤。

但我得到的是我期望的反面。

如何使Typehead正常工作?

任何人都可以解释 index.php 文件中'datumTokenizer'和'prefetch'的用途是什么?

1 个答案:

答案 0 :(得分:0)

可能您在页面上有相同的ID或类,尝试评论渲染_search文件。

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