Не отправлять пустые поля формы
Понимаю, что вопрос не совсем по MODX, но всё же.
Мне нужно отправить данные с формы через GET на страницу с фильтром mFilter2.
Как отправить только заполненные поля, а незаполненные не включать в get-строку?
Сейчас же получается портянка из незаполненных параметров вида
Это соответственно нарушает логику работы mFilter2, т.к. он ищет только по указанным в строке параметрам, даже если они пустые, и результат поиска будет соответственно пустой…
Пытаюсь использовать jQuery для этого, но пока не получается, как бы вы решили эту задачу?
Мне нужно отправить данные с формы через GET на страницу с фильтром mFilter2.
Как отправить только заполненные поля, а незаполненные не включать в get-строку?
Сейчас же получается портянка из незаполненных параметров вида
?parametr1=¶metr2=¶metr3=заполнено¶metr4=
Это соответственно нарушает логику работы mFilter2, т.к. он ищет только по указанным в строке параметрам, даже если они пустые, и результат поиска будет соответственно пустой…
Пытаюсь использовать jQuery для этого, но пока не получается, как бы вы решили эту задачу?
Поблагодарить автора
Отправить деньги
Комментарии: 9
На jQuery пытаюсь решить в эту сторону:
<script type="text/javascript">
$(document).ready(function() {
$("#form").submit(function() {
if($("[name='parametr1']").val()=="") {
$("[name='parametr1']").remove();
}
if($("[name='parametr2']").val()=="") {
$("[name='parametr2']").remove();
}
....
});
});
</script>
Пока что-то не получается…
Попробуйте повесить это событие на:
<script type="text/javascript">
$(document).ajaxStop(function(){
});
</script>
— и без .submit-условия. Но это плохое решение
Здравствуйте! Точно такой же вопрос всплыл. Как в итоге решили эту задачу? Из предложеных решений не до конца понял как передать GET в сторонний сниппет? Создать промежуточную страницу с его вызовом?
Да нет, вызываю сниппет на той же странице что и форма, а форму посылаю на саму себя через POST. А сниппет уже редиректит на ту страницу, которая указана в скрытом поле pageId у формы:
Сниппет:
<form class="form-horizontal col-xs-12" action="[[~[[*id]]]]" method="post">
<input type="hidden" value="35" name="pageId">
Сниппет:
<?php
if(isset($_POST['pageId'])) {
$pageId = $_POST['pageId'];
// тут нужно перечисляем все нужные нам GET параметры
$parametrs = array();
if(isset($_POST['country']) && !empty($_POST['country'])) {$parametrs[country'] = $_POST['country'];}
// создаём из них ссылку
if (!empty($parametrs)){
foreach($parametrs as $key => $value){
if ($firstItemExist == 1) {
$urlParametrs .= "&" . $key . "=" . $value;
}
else {
$urlParametrs = "?" . $key . "=" . $value;
$firstItemExist = 1;
}
}
}
$url = $modx->makeUrl($pageId, '', '', 'full');
$redirectLink = $url.$urlParametrs;
header('Location: '.$redirectLink);
die();
}
else {return;}
Сформировать строку параметров из массива можно проще
$query = '?'.$modx->toQueryString($array);
Спасибо за развернутый ответ!
Если через get-параметр стороннего сниппета, формируя ссылку для редиректа на страницу с mFilter, то как-то так (в сниппете, где формируется строка):
$parametrs = array();
if(isset($_GET[название_параметра1])) {
$parametrs[ключ_переменной] = $_GET[название_параметра1];
// Пример: если нужно передать в строку power=9, то ключ переменной - power
}
//повторяем столько раз, сколько значений из сниппета теоретически можно получить
$pageId = "айди страницы с фильтрами";
$url = $modx->makeUrl($pageId, '', '', 'full');
if (!empty($parametrs)){
foreach($parametrs as $key => $value){
if ($firstItemExist == 1) {
$urlParametrs .= "&" . $key . "=" . $value;
}
else {
$urlParametrs = "?" . $key . "=" . $value;
$firstItemExist = 1;
}
}
}
$redirectLink = $url . "/" . $urlParametrs;
header('Location: '.$redirectLink);
die();
Классно! Спасибо за идею прогонять ссылку через отдельный сниппет! Так и надёжнее и кроссбраузернее, и удобнее.
Не за что.)
Вообще, в этом примере я предлагал подставить его в уже существующий сниппет, формирующий урл.
Если использовать как отдельный — то можно вызывать его в шаблоне со страницей формы где-нибудь в самом низу, и обернуть все в условие:
Вообще, в этом примере я предлагал подставить его в уже существующий сниппет, формирующий урл.
Если использовать как отдельный — то можно вызывать его в шаблоне со страницей формы где-нибудь в самом низу, и обернуть все в условие:
if(isset($_POST['submit'])) {
(код проверки)
}
else {return;}
Ну и редирект и die тоже обернуть в условие, что кол-во get-переменных не нулевое.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.