@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?
  • Вопрос задан
  • 73 просмотра
Решения вопроса 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>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Bezlimit Москва
от 100 000 до 130 000 руб.
Sky Way Capital Москва
от 100 000 до 150 000 руб.
25 авг. 2019, в 17:25
500 руб./за проект
25 авг. 2019, в 14:05
60000 руб./за проект