Я пытаюсь объединить фильтрацию в Kartik Gridview с виджетом Typehead.
Я следую инструкциям от Крае статьи, в сочетании с этим вопросом 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,
]);
Столбец успешно фильтрует данные, но не выполняет автоматическое заполнение / предложение, как демонстрация.
т.е. пользователь только вводит sau
Тип показывает все данные, которые содержат sau
а затем он использует автоматическую фильтрацию.
Но то, что я получаю, это обратное моему ожиданию.
и любой желающий может объяснить, для чего предназначены «datumTokenizer» и «prefetch» в файле index.php?
Можете ли вы иметь тот же идентификатор или класс на странице, попробуйте прокомментировать рендеринг _search файла.
<?php // echo $this->render('_search', ['model' => $searchModel]); ?>
Других решений пока нет …