У меня есть таблица с записями за несколько лет (2017, 2018, 2019 и т. Д.).Мне нужно, чтобы по умолчанию gridView показывал больше года (в этом примере это «2019»).Я сделал это таким образом.это нормально?
MaintenanceController.php
$greaterYear = Maintenance::find()->select(['year'])->where(['id_type' => $id_type])->orderBy(['year' => SORT_DESC])->one();
$searchModel->year = $greaterYear->year;
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('view', [
'model' => $this->findModel($id_type),
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
?>
но мне нужен фильтр с другими годами, теперь у меня уже есть связь с другими годами, как это:
view.php
<?php echo Html::a('2017', '', ['class' => 'year label label-default', 'id' => '2017']) ; ?>
теперь мне нужен фильтр gridView, когда я нажимаю на ссылку других лет, я сделал этот "трюк", используя Pjax, но я думаю, что это не хорошо, и еслия скрываю «год» от gridView, очевидно, не работает.
view.php
<?php
$script = <<< JS
$(function(){
$('body').on('click', '.year', function(e) {
e.preventDefault();
$('input[name="PlanoManutencaoSearch[ano]"').val($(this).attr("id"));
$("#w0").yiiGridView("applyFilter");
});
});
JS;
$this->registerJs($script);
?>
какой способ реализации этого?
noteя использую этот gridView с параметрами в URL, например, this/controller/action?id_type=8
, поэтому URL не может быть полностью изменен, и мне нужно, чтобы это было возможно, добавить фильтр из других «атрибутов» (URL является инкрементным).
Обновление Добавление файла полного вида.
<div class="maintenance-view">
<div class="panel-group">
<div class="panel panel-primary">
<div class="panel-heading">Filter</div>
<div class="panel-body">
<?php echo Html::a('2019', '', ['class' => 'year label label-default', 'id' => '2019']) ; ?>
<?php echo Html::a('2018', '', ['class' => 'year label label-default', 'id' => '2018']) ; ?>
<?php echo Html::a('2017', '', ['class' => 'year label label-default', 'id' => '2017']) ; ?>
</div>
</div>
</div>
<?php Pjax::begin(); ?> <?php echo GridView::widget([
'dataProvider' => $dataProvider,
//'filterModel' => $searchModel,
'columns' => [
'year',
['attribute' => 'id_client',
'value' => function($model){
if (isset($model->idClient->name)) {
return $model->idClient->name;
}
}
],
],
]); ?>
<?php Pjax::end(); ?>
</div>
<?php
$script = <<< JS
$(function(){
$('body').on('click', '.year', function(e) {
e.preventDefault();
$('input[name="PlanoManutencaoSearch[ano]"').val($(this).attr("id"));
$("#w0").yiiGridView("applyFilter");
});
});
JS;
$this->registerJs($script);
?>
В этом случае мне нужно при загрузке страницы показывать записи в gridView с "year" = "2019" ($greaterYear->year
(переменная изконтроллер)).И когда я нажимаю label
с другим годом (например, "2017"), gridView показывает только запись с year = "2017".