Как добавить фильтр вне GridView?

Для добавления фильтра вне GridView в Yii, вам понадобится выполнить несколько шагов.

1. Создайте вид фильтра:
- Создайте файл filter.php в папке views вашего приложения (например, views/site/filter.php).
- В файле filter.php определите необходимые элементы фильтра, такие как поля ввода, выпадающие списки или чекбоксы.
- Реализуйте логику валидации и обработки формы фильтрации.

Пример кода для filter.php:

<?php

use yiihelpersHtml;
use yiiwidgetsActiveForm;

$form = ActiveForm::begin([
    'action' => ['/site/index'], // замените `site/index` на действие вашего контроллера, где будет обрабатываться фильтр
    'method' => 'get',
]);
?>

<?= $form->field($model, 'attribute1')->textInput(['maxlength' => true]) ?>

<?= $form->field($model, 'attribute2')->dropDownList(['value1' => 'Option 1', 'value2' => 'Option 2'], ['prompt' => 'Select']) ?>

<?= $form->field($model, 'attribute3')->checkbox() ?>

<?= Html::submitButton('Filter', ['class' => 'btn btn-primary']) ?>

<?php ActiveForm::end(); ?>

2. Обновите метод в контроллере, который будет обрабатывать форму фильтрации:
- Откройте соответствующий контроллер (например, controllers/SiteController.php).
- Обновите метод, который будет обрабатывать форму (например, actionIndex()), чтобы принять параметры фильтра.
- Используйте параметры фильтра для настройки запроса к базе данных или фильтрации данных, переданных в GridView.

Пример кода для обновления SiteController.php:

public function actionIndex()
{
    $searchModel = new YourModelSearch();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

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

3. Измените представление GridView, чтобы использовать фильтрованные данные:
- Откройте представление, где расположен GridView (например, views/site/index.php).
- Обновите конфигурацию GridView, чтобы использовать $searchModel и $dataProvider, переданные из контроллера.
- Используйте фильтрованные данные, полученные из $dataProvider, для вывода данных в GridView.

Пример кода для обновленного index.php:

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        'id',
        'attribute1',
        'attribute2',
        'attribute3',
        // ...
        ['class' => 'yiigridActionColumn'],
    ],
]); ?>

4. Добавьте ссылку или кнопку для отображения вид фильтра:
- Откройте соответствующее представление (например, views/site/index.php).
- Добавьте ссылку или кнопку, которая будет открывать вид фильтра.
- Настройте URL ссылки или кнопки, чтобы открыть вид фильтра.

Пример кода для добавления ссылки или кнопки:

<?= Html::a('Show Filter', ['site/filter'], ['class' => 'btn btn-primary']) ?>

5. Создайте действие в контроллере для отображения вид фильтра:
- Откройте соответствующий контроллер (например, controllers/SiteController.php).
- Добавьте новый метод действия, который будет открывать вид фильтра.
- В методе действия отображайте вид фильтра и настройте обработку формы фильтрации (если нужно).

Пример кода для добавления метода действия в SiteController.php:

public function actionFilter()
{
    $model = new YourModel();
    
    // Добавьте logiku валидации или обработки формы фильтрации, если нужно
    
    return $this->render('filter', [
        'model' => $model,
    ]);
}

В результате, после выполнения всех шагов, у вас должна появиться ссылка или кнопка, которая откроет вид фильтра. После отправки формы фильтрации, данные из формы будут передаваться в контроллер, где вы сможете использовать их для настройки GridView.