We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 32672
    • 38 Posts
    Облазил пол интернета в поисках готового решения. нечего не нашёл!
    Есть TV имя price, в нём есть циферки, нужно в дито задать запрос через форму сортировать по убыванию или по возрастанию результаты содержащие цифры.
    Пример:
    http://modxcms.com/extras/repository/packages/?tag=Personalization&repository=10

    Что нашёл:
    http://www.kunane.com/modx/ditto-multiple-filters.html - это не подходит, так как жосткие параметры нужно задавать

    http://www.pogwatch.com/ditto/ditto-config.html совершенно не понял как его заставить работать

    Форма работает через POST делал фильтрацию по этой статье
    http://modx.ru/blog/409/?jnc9b376fb=3
      • 9085
      • 630 Posts
      В форме добавить выпадающий список вроде такого:
      <select name="orderby">
      <option value="desc">По убыванию</option>
      <option value="asc">По возрастанию</option>
      </select>
      

      И в зависимости от значения устанавливать параметр sortBy в вызове Ditto...

      Если работает
      filter=`tvrooms,@EVAL return $_POST['rooms'];`...


      то, должно работать и что-то вроде
      &sortBy=`tvprice` &sortDir=`@EVAL return $_POST['orderby'];`


      От "шаловливых ручек" можно защититься проверкой на точное соответствие,например, так:
      &sortDir=`@EVAL return $_POST['orderby']=='asc'?'asc':'desc';



      Или не работает?

      С документацией, кстати, не совсем понятно:
      http://ditto.modxcms.com/files/snippet-ditto-php.html#orderBy

        Правильно заданный вопрос повышает вероятность получения нужного ответа.
        Что-то не работает? Загляните в лог ошибок!
        Есть проблема? "Локализуйте" её!
        Ответы на большинство вопросов по MODx | MODx RTFM | API Evo Revo | галопом по Европам Азиям smiley wikibooks(ru) Ditto(en) | Wayfinder e-book | Заметки и о MODx
        • 32672
        • 38 Posts
        У меня так не работает, в sortBuy нельзя использовать @eval
        выдает ошибку Parse error: syntax error, unexpected ’@’ in /home/dir/domains/xxxxxx.org.ua/public_html/assets/snippets/ditto/classes/ditto.class.inc.php(566) : eval()’d code on line 1
        и нечего не происходит!
        Ребята, тема очень актуально и поможет не только мне, помогите разобраться...
          • 7662 ☆ A M B ☆
          • 276 Posts
          как вариант использовать ещё 1 снипет:)
          и его и в ставлять в sort by

          снипет с 1 строкой:
          echo значение переданное через post ;
            http://modx.im - Russian community
            http://extras.evolution-cms.com - Repository for Evolution
            • 9085
            • 630 Posts
            Quote from: wowkas at Oct 16, 2010, 12:38 PM

            У меня так не работает, в sortBuy нельзя использовать @eval
            Да.. @Eval только для фильтров.. sad
            Смысл, правда, не меняется - вместо него используем отдельный сниппет.. (или PHx?) Код сниппета аналогичный..
              Правильно заданный вопрос повышает вероятность получения нужного ответа.
              Что-то не работает? Загляните в лог ошибок!
              Есть проблема? "Локализуйте" её!
              Ответы на большинство вопросов по MODx | MODx RTFM | API Evo Revo | галопом по Европам Азиям smiley wikibooks(ru) Ditto(en) | Wayfinder e-book | Заметки и о MODx
              • 32672
              • 38 Posts
              Получилось, большое спасибо...
              Кому нужно код снипета, название sorting
              <?php
              $sorting = $_POST['orderby'];
              echo $sorting;
              ?>


              форма
              <select name="orderby">
              <option value="ASC">По возрастанию</option>
              <option value="DESC">По убыванию</option>
              
              </select>


              Ditto:
              &sortBy=`price` - по какому TV искать
              &sortDir=`[[sorting]]` - название сниппета
              


              У меня возник ещё один вопрос, который я уже изучал в интернете, но так и не нашел ответа...
              Как сделать что бы значение в select сохранялось, то-есть если человек выбрал в форме-фильтра цена по убыванию, нажал на submit, при reload страницы значение select не изменялось... В интеренет много воды по этому поводу, конкретики ноль
                • 20380
                • 118 Posts
                Quote from: wowkas at Oct 16, 2010, 03:22 PM

                ...
                Ditto:
                &sortBy=`price` - по какому TV искать
                &sortDir=`[[sorting]]` - название сниппета
                


                У меня возник ещё один вопрос, который я уже изучал в интернете, но так и не нашел ответа...
                Как сделать что бы значение в select сохранялось, то-есть если человек выбрал в форме-фильтра цена по убыванию, нажал на submit, при reload страницы значение select не изменялось... В интеренет много воды по этому поводу, конкретики ноль

                Только сниппет нужно вызывать некешируемо [!sorting!] (или [[!sorting]] для Revo)
                  • 21854
                  • 58 Posts
                  Brezhnev Ivan Reply #8, 16 years ago
                  Quote from: Mraymax at Oct 17, 2010, 07:42 AM

                  &sortBy=`price` &sortDir=`[[sorting]]`

                  У меня дитто ругается на ошибку, не хочет он в &sortDir=`[[sorting]]` вставлять сниппет
                  Вот что пишет на странице с сортировкой Parse error: syntax error, unexpected ’[’, и так тоже не работает &sortDir=`[!sorting!]`
                  Как эту конструкция заработала у вас???
                    Working with MODX Revo|Evo, Laravel Framework. My website http://vanchelo.pp.ua
                    • 9085
                    • 630 Posts
                    Quote from: wowkas at Oct 16, 2010, 03:22 PM


                    <select name="orderby">
                    <option value="ASC">По возрастанию</option>
                    <option value="DESC">По убыванию</option>
                    
                    </select>


                    Как сделать что бы значение в select сохранялось, то-есть если человек выбрал в форме-фильтра цена по убыванию, нажал на submit, при reload страницы значение select не изменялось... В интеренет много воды по этому поводу, конкретики ноль


                    0. Ну это в основы HTML...
                    1. Вставить в нужный (который должен быть выбран) option текст выделенный жирным.

                    <option value="DESC" selected="selected">По убыванию</option>

                    ps реализаций может быть много.. написать "универсальный" сниппет с двумя параметрами ( [!isselected? &name=`orderby` value=`DESC`!]), который будет возвращать "пустоту", либо selected="selected"... если значение переменной name равно value примерно так:
                    // snippet [!isselected!]
                    
                    if (isset ($_POST[$name])&& $_POST[$name]==$value) 
                     return 'selected="selected"';
                    else 
                     return '';
                    


                    Вставлять сюда:
                    <select name="orderby">
                    <option value="ASC" [!isselected? &name=`orderby` value=`ASC`!]>По возрастанию</option>
                    <option value="DESC" [!isselected? &name=`orderby` value=`DESC`!]>По убыванию</option>

                    </select>

                      Правильно заданный вопрос повышает вероятность получения нужного ответа.
                      Что-то не работает? Загляните в лог ошибок!
                      Есть проблема? "Локализуйте" её!
                      Ответы на большинство вопросов по MODx | MODx RTFM | API Evo Revo | галопом по Европам Азиям smiley wikibooks(ru) Ditto(en) | Wayfinder e-book | Заметки и о MODx
                      • 32672
                      • 38 Posts
                      Quote from: npobolka at Oct 17, 2010, 11:50 AM

                      Quote from: Mraymax at Oct 17, 2010, 07:42 AM

                      &sortBy=`price` &sortDir=`[[sorting]]`

                      У меня дитто ругается на ошибку, не хочет он в &sortDir=`[[sorting]]` вставлять сниппет
                      Вот что пишет на странице с сортировкой Parse error: syntax error, unexpected ’[’, и так тоже не работает &sortDir=`[!sorting!]`
                      Как эту конструкция заработала у вас???
                      Попробуйте почистить кеш, и проверте весь код в Дитто в форме и в снипетах.
                      Попробуйте воспользоваться функцией &debug в Дитто, что бы посмотреть по каким критериям работают фильтра
                      Quote from: Mraymax at Oct 17, 2010, 07:42 AM

                      Quote from: wowkas at Oct 16, 2010, 03:22 PM

                      ...
                      Ditto:
                      &sortBy=`price` - по какому TV искать
                      &sortDir=`[[sorting]]` - название сниппета
                      


                      У меня возник ещё один вопрос, который я уже изучал в интернете, но так и не нашел ответа...
                      Как сделать что бы значение в select сохранялось, то-есть если человек выбрал в форме-фильтра цена по убыванию, нажал на submit, при reload страницы значение select не изменялось... В интеренет много воды по этому поводу, конкретики ноль

                      Только сниппет нужно вызывать некешируемо [!sorting!] (или [[!sorting]] для Revo)
                      Я знаю что нужно не кешируемый, но когда я так делаю у меня пишет ERROR.
                      А когда кешируемый всё тип-топ

                      Quote from: esche at Oct 17, 2010, 11:59 AM

                      Quote from: wowkas at Oct 16, 2010, 03:22 PM


                      <select name="orderby">
                      <option value="ASC">По возрастанию</option>
                      <option value="DESC">По убыванию</option>
                      
                      </select>


                      Как сделать что бы значение в select сохранялось, то-есть если человек выбрал в форме-фильтра цена по убыванию, нажал на submit, при reload страницы значение select не изменялось... В интеренет много воды по этому поводу, конкретики ноль


                      0. Ну это в основы HTML...
                      1. Вставить в нужный (который должен быть выбран) option текст выделенный жирным.

                      <option value="DESC" selected="selected">По убыванию</option>

                      ps реализаций может быть много.. написать "универсальный" сниппет с двумя параметрами ( [!isselected? &name=`orderby` value=`DESC`!]), который будет возвращать "пустоту", либо selected="selected"... если значение переменной name равно value примерно так:
                      // snippet [!isselected!]
                      
                      if (isset ($_POST[$name])&& $_POST[$name]==$value) 
                       return 'selected="selected"';
                      else 
                       return '';
                      


                      Вставлять сюда:
                      <select name="orderby">
                      <option value="ASC" [!isselected? &name=`orderby` value=`ASC`!]>По возрастанию</option>
                      <option value="DESC" [!isselected? &name=`orderby` value=`DESC`!]>По убыванию</option>

                      </select>


                      Насколько мне известно это можно реализовать с помощью jquery и плагина cooke, http://alt-f4.ru/expanding-menu-by-jquery#0 там есть меню, которое помнит пользователь открывал subMenu или нет, вот я думаю это можно прикрутить и к моей форме, люди знающие подскажите, хорошо будет всем и вам и нам.
                      Спасибо