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

Сортировка, скрыть похожие товары в категории.

  • 31 января 2019 г. , редакция: 31 января 2019 г.
  • Доброе утро. Собственно сабж. Как в штатный функционал сортировки в категориях товаров, добавить фильтр "Скрыть похожие товары", в моём случае "Скрыть модификации товара".
    Со SQL запросом думаю сложностей не возникнет.
    Из таблицы {shop_rel} сперва берем element_id, смотрим его rel_element_id, и если они тоже есть в этой таблице, как "element_id", то их мы исключаем.
    И вот полученный список по данной категории мы должны вывести после нажатия "Скрыть похожие товары", в моём случае "Скрыть модификации товара". И после перехода по пагинации он должен сохранится.
    • 31 января 2019 г.
    • Я бы AJAX запросом сделал например. Или запрос в функции list бы дополнил WHERE NOT IN (SELECT id FROM {shop_rel} ...)
      • 31 января 2019 г.
      • Я diafan ещё плохо знаю для аякс запросов :-D
        Это Вам не Yii2 и не Laravel, где это всё просто )))
        По этому спасибо, попробую в лист допилить ))
        • 31 января 2019 г.
        • передайте GET параметр на кнопку "Скрыть похожие товары". В модельке в функции list его отловите и по его наличию допишите запрос.

          Потом можно уже будет и ajax накрутить.
          • 31 января 2019 г.
          • А как вариант в модельке вот в эту функцию генерации параметров сортировки допилить?
            Код
            private function expand_sort_with_params() /*Строка 3896*/
            • 31 января 2019 г.
            • Не помню что делает. Можно и функцию фильтра теоретически допилить для тех же самых нужд.
              • 31 января 2019 г. , редакция: 31 января 2019 г.
              • Это не она?
                Код

                private function list_param_query($time, $param_id)
                {
                switch($this->diafan->configmodules("sort"))
                {
                case 1:
                $order = 's.id DESC';
                break;
                case 2:
                $order = 's.id ASC';
                break;
                case 3:
                $order = 's.name'._LANG.' ASC';
                break;
                default:
                $order = 's.sort DESC, s.id DESC';
                }
                if(! $this->diafan->configmodules('hide_missing_goods') && $this->diafan->configmodules('use_count_goods'))
                {
                $order = "isset_count_goods DESC,".$order;
                }
                $rows = DB::query_range_fetch_all(
                "SELECT s.id, s.[name], s.timeedit, s.[anons], s.site_id, s.brand_id, s.no_buy, s.article, s.[measure_unit], s.is_file"
                .(! $this->diafan->configmodules('hide_missing_goods') && $this->diafan->configmodules('use_count_goods') ? ", (prhc.good_id<>0) AS isset_count_goods" : "")
                ." FROM {shop} AS s"
                .($this->diafan->_route->sort == 1 || $this->diafan->_route->sort == 2 ?
                " LEFT JOIN {shop_price} AS pr ON pr.good_id=s.id AND pr.trash='0'"
                ." AND pr.date_start<=".time()." AND (pr.date_finish=0 OR pr.date_finish>=".time().")"
                ." AND pr.currency_id=0"
                ." AND pr.role_id".($this->diafan->_users->role_id ? " IN (0,".$this->diafan->_users->role_id.")" : "=0")
                ." AND (pr.person='0'".($this->person_discount_ids ? " OR pr.discount_id IN(".implode(",", $this->person_discount_ids).")" : "").")"
                : '')
                ." INNER JOIN {shop_param_element} as e ON e.element_id=s.id"
                .($this->diafan->configmodules('where_access_element') ? " LEFT JOIN {access} AS a ON a.element_id=s.id AND a.module_name='shop' AND a.element_type='element'" : "")
                .($this->diafan->configmodules('hide_missing_goods') && $this->diafan->configmodules('use_count_goods') ? " INNER JOIN {shop_price} AS prh ON prh.good_id=s.id AND prh.count_goods>0" : "")
                .(! $this->diafan->configmodules('hide_missing_goods') && $this->diafan->configmodules('use_count_goods') ? " LEFT JOIN {shop_price} AS prhc ON prhc.good_id=s.id AND prhc.count_goods>0" : "")
                . ($this->sort_config['use_params_for_sort'] ? " LEFT JOIN {shop_param_element} AS sp ON sp.element_id=s.id AND sp.trash='0'"
                ." AND sp.param_id=".$this->sort_config['param_ids'][$this->diafan->_route->sort] : '')
                ." WHERE s.[act]='1' AND s.trash='0' AND e.param_id=%d AND e.value".$this->diafan->_languages->site."=%d"
                .($this->diafan->configmodules('where_period_element') ? " AND s.date_start<=".$time." AND (s.date_finish=0 OR s.date_finish>=".$time.")" : '')
                .($this->diafan->configmodules('where_access_element') ? " AND (s.access='0' OR s.access='1' AND a.role_id=".$this->diafan->_users->role_id.")" : '')
                .($this->diafan->configmodules('hide_missing_goods') ? " AND s.no_buy='0'" : "")
                ." GROUP BY s.id"
                ." ORDER BY ".($this->diafan->_route->sort ? $this->sort_config['sort_directions'][$this->diafan->_route->sort].',' : '')
                ." s.no_buy ASC, ".$order,
                $param_id, $this->diafan->_route->param,
                $this->diafan->_paginator->polog, $this->diafan->_paginator->nastr);
                return $rows;
                }

Новости

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

Форум