Как сделать сортировку товаров по цене, названию?

Здравствуйте!

Использую minishop2 и столкнулся с тем, что не знаю, как вывести на странице категории товаров сортировку по цене, названию, количеству выводимых товаров? Подскажите, пожалуйста, кто знает.

Заранее спасибо!
Константин
01 ноября 2017, 21:14
modx.pro
4
5 052
+1

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

Aleksey
02 ноября 2017, 04:24
0
Доброго времени суток! Я подобную задачу решал через компонент mSearch2.
    Константин
    02 ноября 2017, 12:04
    0
    Вы хотите сказать, что мне нужно купить целый компонент, чтобы решить мою задачу? Там же огромный функционал, большая половина которого мне не нужна, например, фильтрация данных или живой поиск. Ну живой поиск, ладно, это отличная вещь, но, например, тот же фильтр не в каждом магазине используется, но наверняка удорожает общую стоимость компонента.

    Первый раз делаю магазин на MODX с использованием minishop2. Отличный компонент магазина. До этого делал на Opencart и отсутствие в minishop2 по умолчанию такой сортировки меня немного расстроило.

    Может другое есть решение?
      Aleksey
      02 ноября 2017, 12:45
      0
      Я сам только недавно начал осваивать Modx, и как понял нужно самому написать сниппет.
        Aleksey
        02 ноября 2017, 12:56
        0
        вот здесь этот вопрос поднимали --> modx.ru/vopros-otvet/info/2029/
          Константин
          02 ноября 2017, 13:38
          0
          Спасибо. Вижу что за два с небольшим года так и нашлось решения.
            Константин
            02 ноября 2017, 13:50
            0
            Обращаюсь к разработчику minishop2 Василию Наумкину! Если есть такая возможность сделайте, пожалуйста, в следующих обновлениях minishop сортировку некоторых параметров по умолчанию. И еще хотелось бы, чтобы компонент поиска и фильтрации можно было бы купить по отдельности. Вы же когда покупаете, например, холодильник, стиралку или автомобиль, делаете выбор, согласно характеристикам, необходимым Вам и не хотите переплачивать за то, что Вам не нужно.

            Я пока пишу, понимаю, что, наверное, разработчик меня пошлет подальше с моими запросами.)) Но тем не менее, попытка не пытка.
              Сергей Кепкин
              02 ноября 2017, 14:58
              2
              0
              ну поискал бы тут на форуме!!! почему предлагаю это — я уже псыкал разжеванный ответ!!!
              еще раз, ок))):
              1. создаешь сниппет под названием yaSuperProger
              <?php
              //умолчальная сортировка по убыванию id
              $DetectGetBy = 'id';
              $DetectGetDir = 'desc';
              //подсветка активного пункта
              $DetectGetHL = 'default';
              $DetectGetText = 'сначала новинки';
              
              if (!empty($_GET['sort'])) {
              	if ($_GET["sort"] == "price_up") { //сортировка по возрастанию цены
              		$DetectGetBy = 'Data.price';
              		$DetectGetDir = 'asc';
              		$DetectGetHL = 'price_up';
              		$DetectGetText = 'сначала подешевле';
              	}
              	if ($_GET["sort"] == "price_down") { //сортировка по убыванию цены
              		$DetectGetBy = 'Data.price';
              		$DetectGetDir = 'desc';
              		$DetectGetHL = 'price_down';
              		$DetectGetText = 'сначала подороже';
              	}
              }
              
              $modx->setPlaceholder('DetectGetBy', $DetectGetBy);
              $modx->setPlaceholder('DetectGetDir', $DetectGetDir);
              $modx->setPlaceholder('DetectGetHL', $DetectGetHL);
              $modx->setPlaceholder('DetectGetText', $DetectGetText);
              2. в шаблон страницы категории вставляешь вызов этого сниппета и чанк с кнопками, или упрощенно без чанка так:
              [[!yaSuperProger]]
              <div class="row box-filter">
              <div class="col-sm-12">
              	<div class="btn-group">
              		<button type="button" class="btn btn-default dropdown-toggle sort" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
              							[[+DetectGetText]] <span class="caret"></span>
              		</button>
              		<ul class="dropdown-menu [[+DetectGetHL]]">
              			<li class="first"><a class="sort_default" href="[[~[[*id]]]]">сначала новинки</a></li>
              			<li><a  class="sort_price_up"href="[[~[[*id]]]]?sort=price_up">сначала подешевле</a></li>
              			<li class="last"><a class="sort_price_down" href="[[~[[*id]]]]?sort=price_down">сначала подороже</a></li>
              		</ul>
              	</div>
              </div>
              </div>
              [[!pdoPage?
              	&element=`msProducts`
              	&limit=`12`
              	&depth=`0`
              	&sortby=`[[+DetectGetBy]]` &sortdir=`[[+DetectGetDir]]`
              	&ajaxMode=`default`
              ]]
                Сергей Кепкин
                02 ноября 2017, 15:06
                0
                еще есть вариант подставлять информацию из гет-параметра сразу в вызов pdoPage, через штатный сниппет alias-как-то-там-не-помню, так советуют в 90%, НО не будет юзабельности, а именно как в моем варианте — подсветка выбранного пункта и вставка того что выбрано в первую (видимую) option селект, согласись, клиент будет чувствовать себя неуютно, если выбрав какую-то сортировку и полазив по списку товаров, он захочет например другую сортировку, а какая текущая — огромный хз!!! в моем варианте это все обеспечивается.

                ну и конечно мой вариант — с перезагрузкой страницы, если надо аджакс — то покупай мсеарч2
                Вадим
                28 августа 2018, 19:36
                0
                Доброго времени суток, что то у меня не получается сделать сортировку хотя все сделал как написано, скажите код рабочий?
                  Константин
                  28 августа 2018, 20:12
                  0
                  Добрый вечер. Хоть я и просил помочь мне с сортировкой, но до применения предложенного тут решения дело так и не дошло. Так что, насчет работоспособности кода, сказать ничего не могу.
                    Вадим
                    28 августа 2018, 20:21
                    0
                    Подскажите, может вы каким то другим вариантом воспользовались?
                      Константин
                      28 августа 2018, 20:25
                      0
                      Нет. От сортировки отказались. Просто не понадобилась.
        Александр Мельник
        03 ноября 2017, 17:56
        2
        0
        Я делаю так
        <div class="sort-title">Сортировать по:</div>
        	<div class="sort-item">
        	<a href="{$_modx->resource.id | url}?sortby=price&sortdir=DESC">убыванию </a>
        	<i class="zmdi zmdi-long-arrow-down"></i>
        	</div>
        	<div class="sort-item">
        	<a href="{$_modx->resource.id | url}?sortby=price&sortdir=ASC">возрастанию</a>
        	<i class="zmdi zmdi-long-arrow-up"></i>
        	</div>
        В вызове сниппета, который будет выводить товары
        'sortby' => $_modx->runSnippet('sortItName.php'),
            'sortdir' => $_modx->runSnippet('sortItDir.php'),
        Ну и собственно содержание этих сниппетов
        sortItDir.php'
        <?php
        $request=$_GET['sortby'];
        switch($request) {
        case "price":
            return ("Data.price");
            break;
        case "rating":
            return("rating");
            break;
        default:
            return("{\"menuindex\":\"DESC\"}");
            break;
        }
        sortItName.php
        <?php
        $request=$_GET['sortdir'];
        switch($request) {
        case "ASC":
            return("ASC");
            break;
        case "DESC":
            return("DESC");
            break;
        default:
            return("DESC");
            break;
        }
        Таким образом к ссылкам можно прикреплять любые поля и направления в GET параметрах.
        Работает с перезагрузкой страницы, что можно считать минусом. А можно и плюсом, потому что сортировка без перезагрузки приводит к тому, что пагинация перестает работать. Если по умолчанию на странице 20 товаров, отсортировали и скажем товаров стало 10, то изменение пагинации требует сложной (уточню — для меня сложной работы с хешем), а так все ок.
          Кирилл
          17 ноября 2020, 00:08
          0
          Спасибо огромнейшее, за предоставленнный пример!
            Aborrol
            17 ноября 2020, 01:09
            0
            Можно кстати это делать гораздо лучше если добавить в вариант Уткина сортировку
            ilyaut.ru/tips-and-tricks/simple-ajax-filter-using-pdopage/
              Кирилл
              17 ноября 2020, 18:48
              0
              спасибо за совет
              Можно кстати это делать гораздо лучше если добавить в вариант Уткина сортировку
              ilyaut.ru/tips-and-tricks/simple-ajax-filter-using-pdopage/
              буду ну очень признателен если ктонибудь приведёт пример, как сделать как на офицальном сайте ms2 demo пример фильтрации товаров со слайдером по цене

              выложите кому нежалко пожалуйста
          Кирилл
          19 января 2021, 01:11
          0
          подскажите как дополнить с сортировкой по названию, кому несложно
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            20