Есть представление с вот таким GridView
GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'rowOptions' => function ($model, $key, $index, $grid) {
},
'columns' => [
['class' => 'yii\grid\SerialColumn'],
[
'label' => 'День новости',
'format' => 'date',
'attribute' => 'day',
'format' => ['datetime', 'php:j'],
'contentOptions' => ['style' => 'width: 15%'],
'value' => 'news_date',
'filter' => function ($searchModel) {
$num = cal_days_in_month(CAL_GREGORIAN, date('m', $searchModel->month), date('Y', $searchModel->cdate));
$dates_month = array();
for ($i = 1; $i <= $num; $i++) {
$mktime = mktime(0, 0, 0, date('m', $searchModel->month), $i, date('Y', $searchModel->cdate));
$date = date("d", $mktime);
$dates_month[$i] = $date;
}
return $dates_month;
},
],
[
'label' => 'Месяц новости',
'format' => 'date',
'attribute' => 'month',
'format' => ['datetime', 'php:F'],
'contentOptions' => ['style' => 'width: 15%;'],
'value' => 'news_date',
],
[
'label' => 'Заголовок новости',
'format' => 'html',
'attribute' => 'news_name',
'value' => function($data) {
return Html::a($data->news_name, $data->news->getNewsUrl());
},
],
['class' => \yii\grid\ActionColumn],
],
'layout' => "<div class='table-responsive'>{summary}\n{items}</div>\n{pager}"
]);
У первого стоблца таблицы "День новости" в параметре 'filter' находится функция которая возвращает кол-во дней в месяце массивом. Я взял ее здесь. Возвращается массив вида
array(31) { [1]=> string(2) "01" [2]=> string(2) "02" [3]=> string(2) "03" [4]=> string(2) "04" [5]=> string(2) "05" [6]=> string(2) "06" [7]=> string(2) "07" [8]=> string(2) "08" [9]=> string(2) "09" [10]=> string(2) "10" [11]=> string(2) "11" [12]=> string(2) "12"
... и т.д до конца дней в месяце.
Я хочу чтобы указанный массив появился у меня в качестве dropDown списка для фильтрации по дням. Но вместо него там пустой input. В тоже время в другом модуле реализовала вот такая конструкция для фильтрации по типу мессенджера/соц. сети:
'filter' => ['tg' => 'Telegram', 'fb' => 'Facebook', 'wa' => 'WhatsApp', 'vb' => 'Viber', 'ins' => 'Instagram', 'od' => 'Одноклассники', 'tw' => 'Twitter', 'vk' => 'ВКонтакте'],
И тогда в поле для фильтра у GridView появляется выпадающий список с пунктами из массива.
Как мне добиться такого же результата от моего кода?
Вставьте что то подобное в filter
'filter' => Html::activeDropDownList(
$searchModel,
'news_date',
[__ВАШ МАССИВ__],
['class' => 'form-control', 'prompt' => '-']
),
P.S. Не нужно передавать в filter анонимную функцию, это не сработает. Лучше получите массив где-нибудь отдельно и позже вставьте его вместо [__ВАШ МАССИВ__] в моём примере.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей