Как передать параметры для поиска в 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>
Так делал изначально, но это не нравится.Спасибо, Василий.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.