【问题标题】:Yii2: Search form not working with Gridview in PjaxYii2:搜索表单在 Pjax 中无法与 Gridview 一起使用
【发布时间】:2018-02-03 08:25:29
【问题描述】:

这里有一些问题,但问题在于网格视图中的过滤器。

我的问题是我无法将外部表单与 gridview 本身集成,因为我不想使用作为 gridview 一部分的搜索表单。

控制器

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

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

观看次数 index.php

<?= Html::button('Filter', ['data-toggle' => 'modal', 'data-target' => '#filter-modal', 'class' => 'btn btn-primary']) ?>

<?php
    Modal::begin([
        'header' => '<h3>Search Blog</h3>',
        'id' => 'filter-modal'
    ]);
    echo $this->render('_search', ['model' => $searchModel]);
    Modal::end();
?>

<?php Pjax::begin(); ?>
<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        'title',
        'content'
    ]
]); ?>
<?php Pjax::end(); ?>

_search.php

<?php $form = ActiveForm::begin([
    'action' => ['index'],
    'method' => 'get',
]); ?>

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

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

<div class="form-group">
    <?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>
</div>

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

在“index.php”中,gridview 在 pjax 内,但搜索表单在外面,但即使表单在“Pjax :: begin”内,它也不起作用。

也就是说,当我进行搜索时,页面会重新加载。我只想更新gridview。

【问题讨论】:

  • 首先,您是说我的问题是我不能将外部表单与 gridview 本身集成,因为我不想使用属于 gridview 的搜索表单。 然后你到底用的是同一个表格吗?以及提交表单时实际发生的情况
  • 不,gridview 有一行(第一行)带有用于过滤结果的输入。但我想使用 _search.php 中生成的搜索表单。提交时页面索引重新加载,而不仅仅是gridview。
  • 所以当你输入并按回车时它不工作吗?
  • 或者您希望它不重新加载页面并像 gridview 过滤器字段一样工作?

标签: php yii2


【解决方案1】:

据我从讨论中了解到,您不想使用GridView 内的过滤器字段,而是想使用搜索表单来过滤GridView。如果这是正确的,你需要为此做两件事

1. 将您的表单移动到 pjax 块内

index.php

<?= Html::button('Filter', ['data-toggle' => 'modal', 'data-target' => '#filter-modal', 'class' => 'btn btn-primary']) ?>
<?php Pjax::begin(['enablePushState'=>false]); ?>
<?php
    Modal::begin([
        'header' => '<h3>Search Blog</h3>',
        'id' => 'filter-modal'
    ]);
    echo $this->render('_search', ['model' => $searchModel]);
    Modal::end();
?>


<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        'title',
        'content'
    ]
]); ?>
<?php Pjax::end(); ?>

2.第二个最重要的事情是在表单选项中包含data-pjax的选项。

_search.php

<?php $form = ActiveForm::begin([
    'action' => ['index'],
    'id'=>'my-form',
    'method' => 'get',
    'options' => [
        'data-pjax' => 1
    ],
]); ?>

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

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

<div class="form-group">
    <?= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>
</div>

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

编辑

您可能会发现模态叠加层停留在那里并且模态窗口本身隐藏的问题,为您的表单提供id 就像id=&gt;"my-form" 并在您的_search.php 文件中添加以下内容以绑定beforeSubmit 事件ActiveFormJS

$this->registerJs('$("#my-form").on("beforeSubmit", function (e) {
$("#filter-modal").modal("hide");
});', \yii\web\View::POS_READY);

【讨论】:

  • 解决了 99%!在“模态”中进行搜索时,搜索完成,弹出窗口消失,但模态覆盖仍然存在!当我提交表单时覆盖也消失了怎么办?
  • 我更新了答案,请参阅 EDIT 部分@Giest
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多