【问题标题】:How to use pagination without reloading main page without pjax如何在没有 pjax 的情况下使用分页而不重新加载主页
【发布时间】:2020-07-25 22:10:43
【问题描述】:

我是 Yii2 的新手, 我试图在提交表单后“调用”我的 gridview。好的,我得到了我的网格视图。但是当我想更改页面时,它会重新加载。我的问题是,如果我想查看 gridview 的下一页,我必须再次提交表单。我想要的只是更改页面而不刷新我的主页。我应该怎么办?我在哪里做错了?请没有 pjax,但如果它不可能,那也没关系。我会很高兴看到这个问题的解决方案!

我的模特:

public function search($params)
    {
        $query = Person::find();
 
        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'pagination' => [
                'pageSize' => 5,
            ],
        ]);
 
        $this->load($params);
 
        if (!$this->validate()) {
            return $dataProvider;
        }
 
 
        $query->andFilterWhere(['like', 'name', $this->full_name])
            ->andFilterWhere(['like', 'age', $this->age]);
 
        return $dataProvider;

我的控制器:

$model = new Person();

        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            $searchModel = new Person();         
            $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 
            return $this->render('persons', [
                'model' => $model,
                'dataProvider' => $dataProvider,
            ]);
        }
        return $this->render('person_search', [
            'model' => $model,
        ]);

person_search.php - 带有过滤器的主表单:

<div class="search">
<?php $form = ActiveForm::begin([
        'method' => 'post'
    ]) ?>
<?php
echo $form->field($data, 'name')->textInput();
echo $form->field($data, 'age')->textInput();
?>
</div>
<?= Html::submitButton('search'); ?>
<?php $form = ActiveForm::end() ?>

persons.php - 我为过滤器和我的网格视图呈现该表单,这里是:

<div class="card">

<?php echo $this->render('_search', ['model' => $model]); ?>

<div class="gridview">
        <?= GridView::widget([
            'dataProvider' => $dataProvider,
            'columns' => [
                ['class' => 'yii\grid\SerialColumn'],
                'name',
                'age',
        ]); ?>
    </div>
</div>

【问题讨论】:

  • 你可以使用 Ajax 吗?
  • 我不知道如何
  • @MagnusEriksson 我不知道该怎么做:(
  • 从 google 开始“Ajax 入门”并浏览众多教程中的一些。

标签: php gridview pagination yii2 pjax


【解决方案1】:

如果您在搜索表单中使用 GET 而不是 POST,则分页将使用 pajax。

如果您只想使用 POST 方法,您仍然可以通过在表单中​​添加“页面”作为隐藏字段并在分页按钮单击时更改其值来使用 pajax。之后,您所要做的就是使用 pajax 提交表单。以下是示例代码,请根据需要更改属性名称。

$(document).on('click', '.pagination-btn', function(event) {
  $("#page").val($(this).html());
  $.pjax.submit(event, '#pjax-container')
})

来源:https://github.com/yiisoft/jquery-pjax#pjaxsubmit

这将解决您在使用分页链接时重新加载页面的问题。

【讨论】:

    猜你喜欢
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    相关资源
    最近更新 更多