Не отправлять пустые поля формы

Понимаю, что вопрос не совсем по MODX, но всё же.

Мне нужно отправить данные с формы через GET на страницу с фильтром mFilter2.
Как отправить только заполненные поля, а незаполненные не включать в get-строку?

Сейчас же получается портянка из незаполненных параметров вида
?parametr1=¶metr2=¶metr3=заполнено¶metr4=

Это соответственно нарушает логику работы mFilter2, т.к. он ищет только по указанным в строке параметрам, даже если они пустые, и результат поиска будет соответственно пустой…

Пытаюсь использовать jQuery для этого, но пока не получается, как бы вы решили эту задачу?
Василий Столейков
20 июня 2015, 16:49
modx.pro
3
3 824
+1
Поблагодарить автора Отправить деньги

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

Василий Столейков
20 июня 2015, 19:52
0
На 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>
Пока что-то не получается…
    Максим Кузнецов
    20 июня 2015, 20:14
    0
    Попробуйте повесить это событие на:

    <script type="text/javascript">
        $(document).ajaxStop(function(){
         });
    </script>
    — и без .submit-условия. Но это плохое решение
      Роман Ильин
      23 ноября 2015, 20:34
      0
      Здравствуйте! Точно такой же вопрос всплыл. Как в итоге решили эту задачу? Из предложеных решений не до конца понял как передать GET в сторонний сниппет? Создать промежуточную страницу с его вызовом?
        Василий Столейков
        23 ноября 2015, 22:27
        1
        +1
        Да нет, вызываю сниппет на той же странице что и форма, а форму посылаю на саму себя через 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;}
          Сергей Шлоков
          24 ноября 2015, 07:06
          +1
          Сформировать строку параметров из массива можно проще
          $query = '?'.$modx->toQueryString($array);
            Роман Ильин
            24 ноября 2015, 10:13
            0
            Спасибо за развернутый ответ!
        Максим Кузнецов
        20 июня 2015, 20:07
        0
        Если через 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();
          Василий Столейков
          20 июня 2015, 20:20
          0
          Классно! Спасибо за идею прогонять ссылку через отдельный сниппет! Так и надёжнее и кроссбраузернее, и удобнее.
            Максим Кузнецов
            20 июня 2015, 20:26
            0
            Не за что.)

            Вообще, в этом примере я предлагал подставить его в уже существующий сниппет, формирующий урл.
            Если использовать как отдельный — то можно вызывать его в шаблоне со страницей формы где-нибудь в самом низу, и обернуть все в условие:

            if(isset($_POST['submit'])) {
            	(код проверки)
            }
            else {return;}
            Ну и редирект и die тоже обернуть в условие, что кол-во get-переменных не нулевое.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          9