We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 1788
    • 1,103 Posts
    Quote from: rellai at Jun 25, 2010, 05:19 AM

    тоже самое что и в форме ввода
    тоесть тут все правильно
    А сниппет для обработки post <=> session ставили в начале шаблона?
    как в http://modxcms.com/forums/index.php/topic,47285.0.html описано
      • 24803
      • 61 Posts
      <?php
      // zagonjaem s formy v sessiju
      if (isset($_POST['cena_ot'])) { $_SESSION['cena_ot'] = $_POST['cena_ot']; } else { $_SESSION['cena_ot'] = $_SESSION['cena_ot'];}
      if (isset($_POST['cena_do'])) {$_SESSION['cena_do'] = $_POST['cena_do'];} else { $_SESSION['cena_do'] = $_SESSION['cena_do'];}
      if (isset($_POST['produkciya'])) { $_SESSION['produkciya'] = $_POST['produkciya'];} else { $_SESSION['produkciya'] = $_SESSION['produkciya'];}
      if (isset($_POST['year'])) { $_SESSION['year'] = $_POST['year'];} else { $_SESSION['year'] = $_SESSION['year'];}
      ?>


      Добавил эот сниппет в чанк(перед тегом <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> .....), который1 вызывается в шаблоне.

      зы: как только его добавил - содрежимое фильтра стал сохраняться при переходе по страницам
      и $_SESSION[’cena_ot’] - выводит правильное значение переменной же
        • 1788
        • 1,103 Posts
        Quote from: rellai at Jun 25, 2010, 06:20 AM

        зы: как только его добавил - содрежимое фильтра стал сохраняться при переходе по страницам
        и $_SESSION[’cena_ot’] - выводит правильное значение переменной же
        Если не нужно сохранять значение фильтра при переходе на другие страницы сайта, добавьте условие сброса сессии или обнуления переменных в таких случаях.
          • 24803
          • 61 Posts
          antey, спасибо!!!
          Очень сильно помогал.
          Это мой косяк был )
          поправил фильтр заработал терь дорабатывать буду )
            • 785
            • 2,113 Posts
            В таких случаях (когда неверно работают запросы к базе) часто проще всего в программе поставить печать сгенерированного запроса, а потом выполнить этот запрос в phpMyAdmin. Далее можно разобраться в том, что в запросе неверно, а потом соответственно исправить программу, его генерирующую.
              Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
              Статьи о MODx, регулярно новые публикации
              • 16310
              • 8 Posts
              Здравствуйте!

              Сделала сортировку по совету, поправила под свои нужды.
              Что получилось:

              форма сортировки

              на странице результатов шаблон начинается с:

              [!start_for_filter!]
              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

              далее кешируемый вызов дитто на некешируемой странице
              [Ditto? &tpl=`shopStuff3` &language=`russian-UTF8` &documents=`[[vibor]]` &startID=`32`
              &extenders=`request` &sortBy=`tvmanufacture` &sortDir=`ASC` &summarize=`10` &paginate=`1` &paginateAlwaysShowLinks=`1` ]]

              ..
              и даже работает.. но как-то криво. сначала дитто выдает что результатов нет, а если обновить страницу они появляются в чем тут может быть дело? rolleyes

              заранее спасибо
                • 785
                • 2,113 Posts
                Quote from: krasotina at Sep 22, 2010, 09:40 AM

                и даже работает.. но как-то криво
                Все работает так, как и должно. Для начала «кешируемый вызов дитто на некешируемой странице» - это иллюзия, если страница не кэшируется, все сниппеты на ней тоже не кэшируются, то есть выполняются каждый раз. При этом сниппеты [[ ]] выполняются всегда первыми, а [! !] – всегда после них. То есть сначала выполнился Ditto, а только потом start_for_filter. В момент выполнения Ditto в переменной $_SESSION ничего нет, но при перезагрузке страницы в переменной оказываются данные, записанные при первой загрузке start_for_filter и Ditto выдает верный результат.
                Кстати, вряд ли приведенный пример работает. Для начала в [Ditto? &tpl= пропущена вторая квадратная скобка: [[. Кроме того, вложение [[…[[ ]]…]] не должно работать, так как при разборе скобок не учитывается вложения – только [[…[! !]…]] или [!…[[ ]]…!] (на практике применить можно только последний вариант).
                  Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                  Статьи о MODx, регулярно новые публикации
                  • 16310
                  • 8 Posts
                  да заработало если [[start_for_filter]] кешируемым вывать.. тогда без обновления..

                  [[Ditto? &tpl=`shopStuff3` &language=`russian-UTF8` &documents=`[[vibor]]` &startID=`32`
                  &extenders=`request` &sortBy=`tvmanufacture` &sortDir=`ASC` &summarize=`10` &paginate=`1` &paginateAlwaysShowLinks=`1` ]]

                  срабатывает.. но вот пагинация..

                  она выводится но при переходе по страницам параметры сессии
                  "слетают" и выводятся все вподрят.. как будто отправилим пустую форму...

                  никак не могу понять как сделать чтобы работало.. помогите кто знает rolleyes)
                    • 1788
                    • 1,103 Posts
                    Quote from: krasotina at Sep 22, 2010, 12:06 PM

                    она выводится но при переходе по страницам параметры сессии
                    "слетают" и выводятся все вподрят.. как будто отправилим пустую форму...

                    никак не могу понять как сделать чтобы работало.. помогите кто знает rolleyes)
                    Полный код сниппета?
                      • 16310
                      • 8 Posts
                      start_for_filter:

                      <?php
                      if (isset($_POST[’height’])) { $_SESSION[’height’] = $_POST[’height’]; } else { $_SESSION[’height’] = $_SESSION[’height’];}
                      if (isset($_POST[’diametr’])) {$_SESSION[’diametr’] = $_POST[’diametr’];} else { $_SESSION[’diametr’] = $_SESSION[’diametr’];}
                      if (isset($_POST[’width’])) { $_SESSION[’width’] = $_POST[’width’]; } else { $_SESSION[’width’] = $_SESSION[’width’];}
                      if (isset($_POST[’manufacture’])) {$_SESSION[’manufacture’] = $_POST[’manufacture’];} else { $_SESSION[’manufacture’] = $_SESSION[’manufacture’];}
                      if (isset($_POST[’sezon’])) { $_SESSION[’sezon’] = $_POST[’sezon’]; } else { $_SESSION[’sezon’] = $_SESSION[’sezon’];}
                      if (isset($_POST[’tipavto’])) {$_SESSION[’tipavto’] = $_POST[’tipavto’];} else { $_SESSION[’tipavto’] = $_SESSION[’tipavto’];}
                      if (isset($_POST[’model’])) {$_SESSION[’model’] = $_POST[’model’];} else { $_SESSION[’model’] = $_SESSION[’model’];}
                      //if (isset($_POST[’is’])) {$_SESSION[’is’] = $_POST[’is’];} else { $_SESSION[’is’] = $_SESSION[’is’];}
                      //if (isset($_POST[’in’])) { $_SESSION[’in’] = $_POST[’in’]; } else { $_SESSION[’in’] = $_SESSION[’in’];}
                      ?>

                      vibor:

                      <?php
                      global $modx;

                      $height = $_SESSION[’height’];
                      $diametr = $_SESSION[’diametr’];
                      $width = $_SESSION[’width’];
                      $manufacture = $_SESSION[’manufacture’];
                      $sezon = $_SESSION[’sezon’];
                      //$is = $_SESSION[’is’];
                      //$in = $_SESSION[’in’];
                      $tipavto = $_SESSION[’tipavto’];
                      $model = $_SESSION[’model’];

                      $table = $modx->getFullTableName("site_content");
                      $table2 = $modx->getFullTableName("site_tmplvar_contentvalues");
                      $table3 = $modx->getFullTableName("site_tmplvar_templates");

                      $sqlheight = empty($_POST[’height’]) ? " " : "and id in (select contentid from $table2 where tmplvarid=7 and value=’$height’) ";
                      $sqldiametr = empty($_POST[’diametr’]) ? " " : "and id in (select contentid from $table2 where tmplvarid=8 and value=’$diametr’) ";
                      $sqlwidth= empty($_POST[’width’]) ? " " : "and id in (select contentid from $table2 where tmplvarid=6 and value=’$width’) ";
                      $sqlmanufacture = empty($_POST[’manufacture’]) ? " " : "and id in (select contentid from $table2 where tmplvarid=12 and value=’$manufacture’) ";
                      $sqlsezon = empty($_POST[’sezon’]) ? " " : "and id in (select contentid from $table2 where tmplvarid=11 and value=’$sezon’) ";
                      //$sqlis = empty($_POST[’is’]) ? " " : "and id in (select contentid from $table2 where tmplvarid=9 and value=’$is’) ";
                      //$sqlin = empty($_POST[’in’]) ? " " : "and id in (select contentid from $table2 where tmplvarid=10 and value=’$in’) ";
                      $sqltipavto= empty($_POST[’tipavto’]) ? " " : "and id in (select contentid from $table2 where tmplvarid=13 and value=’$tipavto’) ";
                      $sqlmodel= empty($_POST[’model’]) ? " " : "and id in (select contentid from $table2 where tmplvarid=2 and value=’$model’) ";

                      // sostavlenie zaprosa
                      $where = "template=10 $sqlheight $sqldiametr $sqlsezon $sqltipavto $sqlwidth $sqlmanufacture $sqlmodel";
                      //$sqlis $sqlin
                      $dbQuery = "SELECT id FROM $table WHERE $where";

                      // vivod id
                      $rs = $modx->db->query($dbQuery);
                      $row = $modx->db->getColumn("id",$rs);
                      $res = implode(",", $row);
                      return $res;
                      ?>