Url при поиске

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
yii2Developer
Сообщения: 85
Зарегистрирован: 2016.07.07, 12:10

Url при поиске

Сообщение yii2Developer »

Есть 2 вопроса по sеarch модели

Ками образом можно подметить url запроса при поиске?
Сечас он такого типа -

Код: Выделить всё

http://standart.dev/site/sell?SellSearch%5Bsellbay%5D=&SellSearch%5Btype%5D=&SellSearch%5Bduration% 
Нужен вот такой -

Код: Выделить всё

http://standart.dev/site/sell?sellbay=1&type=2&duration=1 
Нужно убрать из url имя модели. Когда переопределяю formName на пустоту, и в load() -

Код: Выделить всё

load - $this->load($params, '') 
Тогда был вот такой url -

Код: Выделить всё

http://standart.dev/site/sell?sellbay=&sellbay=1&type=&type=2&duration=&duration=1 
Дублируюются параметры, и после нажатия копки поиск отмеченные фильтры пропадают. Значит такой вариант не подходит, или я что-то не так делаю ??

Второй вопрос это то, что при нажатии на кнопку поиск, если никакой фильтр не был выбран - в адресной строке всеравно передаются все параметры из формы _query. Можно каким-то образом сделать так, чтобы в URL передавались только те параметры, которые были введены, а не все ?

Заранее спасибо
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Url при поиске

Сообщение rak »

yii2Developer писал(а): Ками образом можно подметить url запроса при поиске?
Сечас он такого типа -

Код: Выделить всё

http://standart.dev/site/sell?SellSearch%5Bsellbay%5D=&SellSearch%5Btype%5D=&SellSearch%5Bduration%    
Нужен вот такой -

Код: Выделить всё

http://standart.dev/site/sell?sellbay=1&type=2&duration=1    
Нужно убрать из url имя модели. Когда переопределяю formName на пустоту, и в load() -

Код: Выделить всё

load - $this->load($params, '')
Тогда был вот такой url -

Код: Выделить всё

http://standart.dev/site/sell?sellbay=&sellbay=1&type=&type=2&duration=&duration=1    
Дублируюются параметры, и после нажатия копки поиск отмеченные фильтры пропадают. Значит такой вариант не подходит, или я что-то не так делаю ??
1. указать явно action у формы
2. указать имена полей формы

Код: Выделить всё

<?= Html::activeTextInput($searchModel, 'duration', ['class' => 'form-control', 'name' => 'duration']); ?>
yii2Developer писал(а): Второй вопрос это то, что при нажатии на кнопку поиск, если никакой фильтр не был выбран - в адресной строке всеравно передаются все параметры из формы _query. Можно каким-то образом сделать так, чтобы в URL передавались только те параметры, которые были введены, а не все ?
можно перед сабмитом проверять каждое из полей, и, если заполнено, то добавлять его в урл и потом делать редирект на получившийся урл

упощенно(без учета разных типов полей и т.п.) вот так:

Код: Выделить всё

$('form').submit(function(e){
        var data = [];
        $("form input").each(function(){
            var name = $(this).attr('name') ;
            var val = $(this).val();
            if(val != '') {
                data.push(name + '=' + val)
            }
        });
        window.location.href = $(this).attr('action') + '?' + data.join('&');
        e.preventDefault();
    });
 
yii2Developer
Сообщения: 85
Зарегистрирован: 2016.07.07, 12:10

Re: Url при поиске

Сообщение yii2Developer »

1. Явно указан action

Код: Выделить всё

 <?php $form = ActiveForm::begin([
        'action' => ['sell'],
        'method' => 'get',
    ]); ?>
2. Незнаю оправданно ли будет, там много фильтров разных (в районе 10)
То есть средствами yii этот вопрос нельзя решить?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Url при поиске

Сообщение rak »

ну разве ж 10 полей это много?
yii2Developer
Сообщения: 85
Зарегистрирован: 2016.07.07, 12:10

Re: Url при поиске

Сообщение yii2Developer »

rak писал(а):ну разве ж 10 полей это много?
Воспользовался Вашим советом, спасибо.

Теперь только вот такая мелочь осталась, как обозначение массива.

Такой url формирует

Код: Выделить всё

..?city[]=86&city[]=87&city[]=88.... 
Можно как-то сделать болеее seo-friendly ?И вообще какие еще можна символы обозначения массива в url-строке использовать ??
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Url при поиске

Сообщение ElisDN »

yii2Developer писал(а):Можно как-то сделать болеее seo-friendly?
Поиск вообще должен быть закрыт от поисковиков в robots.txt или через rel="canonical".
Аватара пользователя
Йож
Сообщения: 574
Зарегистрирован: 2015.08.26, 03:05

Re: Url при поиске

Сообщение Йож »

Лучше и то, и то.
Prooksius
Сообщения: 100
Зарегистрирован: 2019.01.17, 23:24

Re: Url при поиске

Сообщение Prooksius »

yii2Developer писал(а): Второй вопрос это то, что при нажатии на кнопку поиск, если никакой фильтр не был выбран - в адресной строке всеравно передаются все параметры из формы _query. Можно каким-то образом сделать так, чтобы в URL передавались только те параметры, которые были введены, а не все ?
По-моему есть решение проще - при нажатии на кнопку Фильтра проверять с пом. JS поля на пустоту и дизейблить их, если они пустые. Тогда они не принимают участия в дальнейшей работе формы и, соответственно, не проставляются в адресную строку.
Ответить