@AlexSer

Как работать с Pjax в yii2?

у меня есть форма быстрого поиска
<?php yii\widgets\Pjax::begin(['id' => 'new_note']) ?>
        <?= Html::beginForm(['/system/system/fastsearch'], 'post', ['data-pjax' => '','enctype' => 'multipart/form-data', 'class'=>'form-inline' ]) ?>
        <?= Html::input('text', 'search', "", ['class' => "form-control form-control-sm ml-3 w-75"]) ?>
        <?= Html::submitButton('<i class="glyphicon glyphicon-search"></i>&nbsp;Найти', ['class' => 'btn btn-default', 'id'=>'press_search'])?>
        <?= Html::endForm() ?>
        <?php Pjax::end(); ?>

Вид отображается в actionIndex(); Запрос на поиск передается в actionFastsearch();
Вопрос как отобразить полученные данные в нужном div?
И почему у меня происходит роутинг на url в action?
  • Вопрос задан
  • 1390 просмотров
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Доброе утро.
Pjax имеет дело только с тем содержимым, которое располагается между begin() и end().
Поэтому можно просто добавить нужный div после формы.
Код формы.
<?php
   yii\widgets\Pjax::begin(['id' => 'new_note', 'enablePushState' => false]) ?>
        <?= Html::beginForm(['/system/system/fastsearch'], 'post', ['data-pjax' => '1','enctype' => 'multipart/form-data', 'class'=>'form-inline' ]) ?>
        <?= Html::input('text', 'search', "", ['class' => "form-control form-control-sm ml-3 w-75"]) ?>
        <?= Html::submitButton('<i class="glyphicon glyphicon-search"></i>&nbsp;Найти', ['class' => 'btn btn-default', 'id'=>'press_search'])?>
        <?= Html::endForm() ?>
        <div id="reload-pjax"><?= $search ?? null ?></div>
    <?php Pjax::end();
?>

Действие в контролере может быть таким.
public function actionFastsearch()
{
    if(Yii::$app->request->isAjax){
        $search = Yii::$app->request->post('search');
        return $this->render('index', ['search' => $search]);
    }
}

Или, что по моему мнению лучше, оправлять форму и обрабатывать ответ сервера используя обычный js или jquery.

P.S.
Хотя можно использовать и такой вариант. Поле формы должно быть заполнено обязательно.
<?php
Pjax::widget([
    'id' => 'reload-pjax',
    'enablePushState' => false, 
    'enableReplaceState' => false, 
    'formSelector' => '#options-form',
    'submitEvent' => 'submit',])
?>
<?= Html::beginForm(['/site/fastsearch'],
                    'post',
                    [
                        'class'=>'form-inline',
                        'id' => 'options-form'
                    ]) ?>
<?= Html::input('text', 'search', "", ['class' => "form-control form-control-sm ml-3 w-75"]) ?>
<?= Html::submitButton('<i class="glyphicon glyphicon-search"></i>&nbsp;Найти', ['class' => 'btn btn-default', 'id'=>'press_search'])?>
<?= Html::endForm() ?>
<div id="reload-pjax"></div>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы