Как передать параметры для поиска в mFilter в GET?

Нужна помощь в правильном способе формирования URL с одной страницы сайта для перехода в каталог, где используется mFilter2, чтобы фильтр этот 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, чтобы фильтр его правильно «разобрал».

Заранее благодарен!
Серьёзный
10 марта 2015, 21:28
modx.pro
3
2 320
-1

Комментарии: 8

Серьёзный
12 марта 2015, 00:17
0
Никто ничего не может подсказать?
Вариант с удалением select если он пуст я сделал, но это же не выход…
    Максим
    12 марта 2015, 02:14
    1
    +1
    Попробуйте в сниппете mFilter2 добавить в самом начале строку $_REQUEST = array_filter($_REQUEST);
      Серьёзный
      12 марта 2015, 11:41
      0
      Спасибо! Работает! =)
        Максим
        12 марта 2015, 11:52
        0
        Тут не все так просто. Для конкретной ситуации такой костыль сойдет, но лучше и правильнее сделать, как написал Василий (т.е. расширить класс).
          Серьёзный
          12 марта 2015, 11:53
          0
          Если бы еще я знал как это делается )))
          Если есть желающие за вознаграждение помочь, буду рад.
            Максим
            12 марта 2015, 12:52
            +1
            В общем, придумал я такое решение.
            В папке /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 ничему не равен, то выведутся все товары.
      Василий Наумкин
      12 марта 2015, 06:21
      0
      Любая цена != отсутствие цены.

      Можно сделать так:
      <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», то она всегда будет его отправлять.
        Серьёзный
        12 марта 2015, 11:42
        0
        <option value="0,1000000">Любая</option>
        Так делал изначально, но это не нравится.

        Спасибо, Василий.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8