Как передать параметры для поиска в mFilter в GET?
        Нужна помощь в правильном способе формирования URL с одной страницы сайта для перехода в каталог, где используется mFilter2, чтобы фильтр этот URL с параметрами правильно разобрал и отфильтровал товары.
На данный момент имеется вот такая форма:
при нажатии на кнопку «Подобрать» мы переходим на страницу catalog/vse-tovaryi/?ms|price=500&msoption|tags=1
А если в селекте «Цена» мы выбираем «Любая» (у неё value=""), переходим на catalog/vse-tovaryi/?ms|price=&msoption|tags=1
Соответственно товары не найдены, т.к. цена не указана. От 0 до 0.
Вопрос: как вообще не печатать этот параметр «ms|price=» в URL, если выбрано значение с пустым value?
Чтобы при выборе цены «Любая» при переходе ссылка была такой: catalog/vse-tovaryi/?msoption|tags=1
Обрыл весь google, ответа не нашел.
Мне подсказали на тостере, что как-то с помощью JS вырезать сам селект, если он пустой, но это как-то странно.
Либо изменить в самом обработчике mFilter… чтобы он пустые «ms|price=» игнорировал?
Мне всего лишь нужно с главной страницы сайта дать клиентам возможность выбрать нужные параметры для сортировки (блок «Подбор по параметрам» вверху страницы) и путём нажатия на кнопку перейти на страницу каталога с правильно сгенерированным URL, чтобы фильтр его правильно «разобрал».
Заранее благодарен!
    
    
                                                                                
            На данный момент имеется вот такая форма:
<form role="form" action="catalog/vse-tovaryi/">
  <select name="ms|price">
      <option value="">Любая</option>
      <option value="500">500 рублей</option>
  </select>
  <select name="msoption|tags">
      <option value="1">Тэг 1</option>
      <option value="2">Тэг 2</option>
  </select>
  <button type="submit">Подобрать</button>
</form>В селекте Цена выбираем 500 рублей,при нажатии на кнопку «Подобрать» мы переходим на страницу catalog/vse-tovaryi/?ms|price=500&msoption|tags=1
А если в селекте «Цена» мы выбираем «Любая» (у неё value=""), переходим на catalog/vse-tovaryi/?ms|price=&msoption|tags=1
Соответственно товары не найдены, т.к. цена не указана. От 0 до 0.
Вопрос: как вообще не печатать этот параметр «ms|price=» в URL, если выбрано значение с пустым value?
Чтобы при выборе цены «Любая» при переходе ссылка была такой: catalog/vse-tovaryi/?msoption|tags=1
Обрыл весь google, ответа не нашел.
Мне подсказали на тостере, что как-то с помощью JS вырезать сам селект, если он пустой, но это как-то странно.
Либо изменить в самом обработчике mFilter… чтобы он пустые «ms|price=» игнорировал?
Мне всего лишь нужно с главной страницы сайта дать клиентам возможность выбрать нужные параметры для сортировки (блок «Подбор по параметрам» вверху страницы) и путём нажатия на кнопку перейти на страницу каталога с правильно сгенерированным URL, чтобы фильтр его правильно «разобрал».
Заранее благодарен!
Комментарии: 8
                Никто ничего не может подсказать?
Вариант с удалением select если он пуст я сделал, но это же не выход…
                    Вариант с удалением select если он пуст я сделал, но это же не выход…
                Попробуйте в сниппете mFilter2 добавить в самом начале строку $_REQUEST = array_filter($_REQUEST);            
                    
                Спасибо! Работает! =)            
                    
                Тут не все так просто. Для конкретной ситуации такой костыль сойдет, но лучше и правильнее сделать, как написал Василий (т.е. расширить класс).            
                    
                Если бы еще я знал как это делается )))
Если есть желающие за вознаграждение помочь, буду рад.
                    Если есть желающие за вознаграждение помочь, буду рад.
                В общем, придумал я такое решение.
В папке /core/components/msearch2/custom создаем файл custom.class.php:
Теперь если ms|price ничему не равен, то выведутся все товары.
                    В папке /core/components/msearch2/custom создаем файл custom.class.php:
<?php
class _mse2FiltersHandler extends mse2FiltersHandler {
    public function filterNumber(array $requested, array $values, array $ids) {
        $requested = array_diff($requested, array(''));
        return empty($requested) ? $ids : parent::filterNumber($requested,$values,$ids);
    }
}В настройках указываем обработчик фильтров: _mse2FiltersHandlerТеперь если ms|price ничему не равен, то выведутся все товары.
                Любая цена != отсутствие цены.
Можно сделать так:
Но более правильный и красивый вариант — расширить стандартный метод фильтрации number и сделать так, чтобы он возвращал все значения при пустом запросе.
Убрать данные селекта при отправке формы можно только через javascript. Потому что, если у формы есть поле name=«ms|price», то она всегда будет его отправлять.
                    Можно сделать так:
<select class="form-control input-sm" name="ms|price" id="msprice">
	<option value="0,1000000">Любая</option>
	<option value="0,500">до 500 рублей</option>
	<option value="0,1000">до 1000 рублей</option>
	<option value="0,1500">до 1500 рублей</option>
	<option value="0,2000">до 2000 рублей</option>
	<option value="0,5000">до 5000 рублей</option>
</select>Но более правильный и красивый вариант — расширить стандартный метод фильтрации number и сделать так, чтобы он возвращал все значения при пустом запросе.
Убрать данные селекта при отправке формы можно только через javascript. Потому что, если у формы есть поле name=«ms|price», то она всегда будет его отправлять.
<option value="0,1000000">Любая</option>Так делал изначально, но это не нравится.Спасибо, Василий.
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.