Вход • Регистрация

Сортировка списка товаров на сайте по значению дополнительной характеристки

  • 14 апреля 2017 г.
  • Собственно, сабдж как-то можно реализовать?
    Нужно отсортировать товары на сайте по значению одной из дополнительных характеристик, без возможности изменения пользователем порядка сортировки.
    Заранее всем спасибо за советы!
    • 14 апреля 2017 г.
    • Сортировку массива следует делать в моделе (shop.model.php) в соответствующей функции во время общего запроса к базе данных. Т.е. при получении списка товаров получаем уже отсортированный результат. Это классика. Но вы собираетесь сортировать по значениям определенной характеристики. Соответственно сама характеристика в данном случае - это динамически изменчивое понятие. Сегодня она есть, завтра заказчик ее удалил или пересоздал (измениться ее id, который будет участвовать в запросе к базе данных для сортировки). Соответственно необходимо предусматривать это, создавать пользовательский интерфейс для определения новой характеристики для сортировки. Исходя из этого, на мой взгляд, лучше делать сортировку массива во вьюшке (shop.view.list.php). Т.е. сама вьюшка это шаблон. Если необходимо, то переопределили дефолтный шаблон для модуля - без сортировки или с иной сортировкой. Минус этого подхода в том, что по дефолту вьюшка не в зоне кеша. Соответственно при каждом обращении будет исполнятся одна и таже операция с одинаковым результатом на выходе. Это исправимо, но опять же надо заморачиваться.

      Как-то так, успехов.
      • 17 апреля 2017 г. , редакция: 17 апреля 2017 г.
      • Как бы да, теоретически всё это так... вот только с сортировкой по вьюшке не совсем понятно... во вьюху передается готовый набор данных, генерируемый запросами где-то в контроллере модуля... насколько я понимаю...
        Ладно... упростим задачу... как-то можно указать системе, порядок сортировки "по-умолчанию"?
        Например вот тут нужно, чтобы сортировались товары изначально по порядковому номеру детали на рисунке, это дополнительная характеристика товара:
        http://loader72.com/shop/frontalnyy-pogruzchik-lg936/dvigatel-v-sbore-a1-2901001570/sort5/
        Если во вьюшку списка товаров прикрутить отображение блока с выбором порядка сортировки, то список товаров прекрасно сортируется по значению доп. характеристики, если жмякнуть мышкой по соответствующей ссылке в блоке выбора порядка сортировки...
        Следовательно, задача, по-сути сводится к тому, чтобы заставить диафан считать в данном конкретном случае именно этот порядок сортировки - дефолтным...
        А вот как бы это сделать.. .я не знаю к сожалению...
        И еще в догонку, а как убрать сортировку по цене вообще из блока выбора порядка сортировки списка товаров?
        Версия движка - 6.0.
        • 17 апреля 2017 г.
        • Как говорит Виталий, в модельке. Но поставить там можно $this->diafan->sort с нужным параметром в начале функции и всё
          • 17 апреля 2017 г.
          • Это я вроде как нашел... но теперь у меня другая проблема... никак не могу исключить из блока выбора параметров сортировки сортировку по цене...
            Судя по всему этот блок отображается и генерируется файлом shop.view.sort_block.php... правильно?
            Все бы ничего, но если даже по наименованию параметра "Цена" делаешь условие, все равно какая-то стрелочка сортировки по цене по убыванию остается... не могу понять откуда она берется ((((
          • 17 апреля 2017 г. , редакция: 17 апреля 2017 г.
          • Вот эта функция отвечает за подготовку списка товаров?
            Код
            private function list_elements_query($time, $cat_ids)

            И, судя по всему, сортировка, где-то здесь, верно?
            Код
            ." GROUP BY s.id ORDER BY "
            .($this->diafan->_route->sort ? $this->sort_config['sort_directions'][$this->diafan->_route->sort].',' : '')
            ."s.no_buy ASC, ".$order,
            $this->diafan->_paginator->polog, $this->diafan->_paginator->nastr
            );
            return $rows;
  • 17 апреля 2017 г.
  • В опчем и целом... решение следующее (1,2,3,4 - это сортировки по цене и наименованию, 5 - первая сортировка по дополнительной характеристике, в моем случае, она же и единственная):
    1. В файле shop.php делаем вот так:
    Код
    public function init()
    {
    /*добавленные строки*/
    if (empty($this->diafan->_route->sort)) {
    $this->diafan->_route->sort = 5;
    }
    /**/

    в файле shop.view.sort_block.php делаем вот так (добавлен счетчик итераций прохождения цикла и условие > 2 ... это мы отсекаем сортировку по цене для пользователя):
    Код
    echo '<div class="block">';

    echo '<div class="sort-by by-rate" style="text-align:right;margin-bottom:10px;">';

    $cnt_c == 0;
    $symbol = '&uarr;';
    for ($i = 1; $i <= count($sort_config['sort_directions']); $i++)
    {
    $cnt_c++;
    if ($cnt_c > 2) {
    echo empty($sort_config['sort_fields_names'][$i]) ? '' : '<a href="'.($link_sort[$i] ? BASE_PATH_HREF.$link_sort[$i] : '').'">' . $sort_config['sort_fields_names'][$i] . '</a>';
    if ($link_sort[$i])
    {
    echo ' <a href="'.BASE_PATH_HREF.$link_sort[$i].'" class="'.($symbol == '&uarr;' ? 'sort-up' :'sort-down').'" style="text-decoration:none;">'.$symbol.'</a> ';
    }
    else
    {
    echo ' <span class="active '.($symbol == '&uarr;' ? 'sort-up active' :'sort-down active').'">'.$symbol.'</span> ';
    }
    $symbol = $symbol == '&uarr;' ? '&darr;' :'&uarr;';
    }
    }

    echo '</div>';

    echo '</div>';

    3. Файл shop.model.php вообще не трогаем...
    В результате получаем решение частной задачи: "Сортировка по наименованию товара и по одной дополнительной характеристике, а так же отключение возможности сортироваться по цене (которой в принципе нет в этом каталоге)"...
    Как-то так в общем...

Новости

  • 24 апреля, среда
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 
  • 15 декабря 2023 г.
  • Подводим итоги 2023 года. Выпустили новую сборку DIAFAN.CMS 7.1.1, вводим новые тарифы на аренду сайта и коммерческую поддержку и автообновления с января 2024 г., строим планы на будущий год.