我正在尝试将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那样执行自动完成/建议。
即,用户只输入sau
,Typehead会显示包含sau
的所有数据,然后使用自动过滤。
但我得到的是我期望的反面。
任何人都可以解释 index.php 文件中'datumTokenizer'和'prefetch'的用途是什么?
答案 0 :(得分:0)
可能您在页面上有相同的ID或类,尝试评论渲染_search文件。
<?php // echo $this->render('_search', ['model' => $searchModel]); ?>