Суть задачи такая.
Нужно при нажатии в форме кнопки "поиск" вывести список адресов (listview widget) по критерию из формы и так же вывести их на яндекс карте. Считаем что карта уже выведена на страницу.
И нужно чтоб страница не перезагружалась полностью а только обновится должен список и данные на карте и данные в форме должны остаться.
Как правильно написать view и action ?
Заранее спасибо за советы.
Форма фильтра для listview без обновления страницы
Re: Форма фильтра для listview без обновления страницы
иногда такое впечатление, что люди сюда приходят и просто ставят свои задачи. причём в большинстве случаев тривиальные, требующие построения архитектурной логики и мало касающиеся самого фреймворка.
Уважаемый, вы сами то уже что то начали делать? может покажете что у Вас конкретно не получается в данном вопросе?
Уважаемый, вы сами то уже что то начали делать? может покажете что у Вас конкретно не получается в данном вопросе?
Re: Форма фильтра для listview без обновления страницы
Да пробою с помощью pjax по этому примеру http://www.yiiframework.com/wiki/772/pj ... view-yii2/
index.php
controller
В итоге у меня index вызывается 3 раза. Первый с данными формы через post, второй он вызывается с get _pjax='#list' и третий без параметров. После чего данные формы сбрасываются так как в третий раз не передается модель формы и так же не пойму как сохранить данные формы для последующей выборки .
Я новичок в yii и это мой первый крупный проект на нем, поэтому и есть много вопросов. Может я конечно где-то не до конца и сам разобрался поэтому и прошу помощи.
index.php
Код: Выделить всё
<?php
use yii\helpers\Html;
use yii\helpers\ArrayHelper;
use yii\widgets\ActiveForm;
use common\models\agct;
use yii\widgets\ListView;
use frontend\assets\AppAsset;
use yii\web\View;
AppAsset::register($this);
$js = "var map;\nvar myCollection;\nymaps.ready(init);\n";
$js .="function init(){
map = new ymaps.Map('map', {
center: [59.95, 30.34],
zoom: 10,
type: 'yandex#map',
behaviors: ['default', 'scrollZoom']
});
myCollection = new ymaps.GeoObjectCollection();
}";
Yii::$app->view->registerJs($js, View::POS_READY,'yandex-map');
?>
<div class="ugolAll darkgreen ovfw">
<b class="ugol rt"></b><b class="ugol rb"></b><b class="ugol lt"></b><b class="ugol lb"></b>
<div class="lightgreen otstup ovfw">
<div class="otstup">
<h1 class="PageName">Я ИЩУ</h1>
<!--<div class="searchform">-->
<?php yii\widgets\Pjax::begin(['id' => 'searchform']) ?>
<?php $form = ActiveForm::begin(['options' => ['data-pjax' => true,'id'=>'Form',]]); ?>
<?= $form->field($fmodel, 'whatSearch', [
'template' => '{input}',
])->radioList([1 => 'Клиника', 2 => 'Доктор'],['id'=>'whatSearch']) ?>
<?= $form->field($fmodel, 'IsAdult', [
'template' => '{input}',
])->checkbox(['id' => 'checkIsAdult']); ?>
<?= $form->field($fmodel, 'IsChild', [
'template' => '{input}',
])->checkbox(['id' => 'checkIsChild']); ?>
<div class="form-group">
<?= Html::submitButton('Найти', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
<!--</div>-->
<?php yii\widgets\Pjax::end() ?>
<?
?>
</div>
</div>
<div id="map"></div>
</div>
<h3> Список</h3>
<!--<div id="list">
</div>-->
<?php
yii\widgets\Pjax::begin(['id' => 'list']);
echo ListView::widget([
'dataProvider' => $dataProvider,
'itemView' => function ($model, $key, $index, $widget) {
$substations=[];
foreach($model->subStations as $obj) {
$substations[] = $obj->name;
}
return '
<div class="fonemenu ovfw listing col-1-2">
<div class="col2 otstup"><a href="/hospitals/centr-membrannogo-plazmafereza.htm">'.$model->hName.'</a></div>
<div id="id_spec_data_1" class="otstupL show_off" style="display: block;">
<div style="width:100px; height: 10px; float: right; margin-top: -25px;">
<div class="ratingblock">
<div id="unit_longo1939">
<ul id="unit_ulo1939" class="unit-rating" style="width:100px;">
<li class="current-rating" style="width:53.8px;">2.69/5</li>
</ul>
<div class="static" style="text-align:center;">Рейтинг: <strong> 2.7</strong> из 5<br>(72 голоса/ов)</div>
</div>
</div>
<div style="color:#36AA3D; text-align: center; font-size: 11px;"><em>Суммарный рейтинг по Подразделениям</em></div>
</div>
район: '.$model->areacity->name.'<br>станции метро: '.implode(',',$substations).'<br>'.$model->hAddress.'<br>'.$model->hPhone.
'</div>
</div>
';
},
]);
yii\widgets\Pjax::end();
?>
Код: Выделить всё
public function actionIndex()
{
$SearchForm = new SearchForm();
if ($SearchForm->load(Yii::$app->request->post())) {
if ($SearchForm->whatSearch == 1) {
$searchModel = new HospitalsSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
}
if ($SearchForm->whatSearch == 2) {
$searchModel = new DoctorsSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
}
} else {
$searchModel = new HospitalsSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
}
return $this->render('index',
['fmodel' => $SearchForm,
'dataProvider' => $dataProvider,
]
);
}
Я новичок в yii и это мой первый крупный проект на нем, поэтому и есть много вопросов. Может я конечно где-то не до конца и сам разобрался поэтому и прошу помощи.
Re: Форма фильтра для listview без обновления страницы
Да забыл через assetподключается js скрипт
Код: Выделить всё
$("document").ready(function () {
$("#searchform").on("pjax:end", function () {
$.pjax.reload({container: "#list"}); //Reload GridView
});
})