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

Сортировка товаров в категории

  • 21 декабря 2013 г.
  • Добрый день!
    На сайте требуется, чтобы товары шли в заданной в админ панели последовательности, не зависимо от присутствия или отсутствия на складе. То есть товары не должны сбрасываться в конец категории, если их нет на складе.
    К сожалению, не могу найти отрезок кода, который отвечает за это действие.
    Буду благодарен, если вы направите меня в нужном направлении.
    Спасибо!
    • 21 декабря 2013 г.
    • ищите sql запрос который формирует вывод товаров, и в нём убираете учитывание сортировки (есть, нету на складе)
  • 21 декабря 2013 г. , редакция: 21 декабря 2013 г.
  • Что из этого убрать?
    Код
    public function sql_query($id)
    {
    $this->diafan->where .= $this->diafan->config("only_self") && DB::query_result("SELECT only_self FROM {users_role} WHERE id=%d LIMIT 1", $this->diafan->_user->role_id) ? " AND (e.admin_id=0 OR e.admin_id=".$this->diafan->_user->id.")" : '';
    $base_link = '';
    if(!empty($this->diafan->text_for_base_link["variable"])
    // не добавляем в список полей переменные, выбираемые всегда
    && ! in_array($this->diafan->text_for_base_link["variable"], array('id'))
    // не добавляем в список полей переменные, добавленные в список как дополнительные поля
    && (! $this->diafan->config_other_row || ! in_array($this->diafan->text_for_base_link["variable"], array_keys($this->diafan->config_other_row))))
    {
    $base_link = ', e.'.($this->diafan->variable_multilang($this->diafan->text_for_base_link["variable"]) ? '['.$this->diafan->text_for_base_link["variable"].']' : $this->diafan->text_for_base_link["variable"]);
    }
    $config_other_row = '';
    if($this->diafan->config_other_row)
    {
    foreach($this->diafan->config_other_row as $r => $type)
    {
    // не добавляем в список полей переменные, выбираемые всегда
    if(in_array($r, array('id')))
    continue;
    $config_other_row .= ', e.'.($this->diafan->variable_multilang($r) ? '['.$r.']' : $r);
    }
    }
    if($this->diafan->fast_edit_rows)
    {
    foreach($this->diafan->fast_edit_rows as $r => $type)
    {
    if($type != 'function')
    {
    $config_other_row .= ', e.'.($this->diafan->variable_multilang($r) ? '['.$r.']' : $r);
    }
    }
    }

    return DB::query("SELECT e.id"
    .$base_link
    .$config_other_row
    .($this->diafan->config("act") ? ', e.act'.$this->lang_act.' AS act' : '' )
    .($this->diafan->config("parent") ? ', e.parent_id, e.count_children' : '' )
    .($this->diafan->is_variable("date_start") ? ', e.date_start' : '' )
    .($this->diafan->is_variable("date_finish") ? ', e.date_finish' : '' )
    .($this->diafan->config("date") || $this->diafan->config("datetime") ? ', e.created' : '' )
    .($this->diafan->config("view") ? ', e.module_name, e.block' : '' )
    .($this->diafan->config("element_site") ? ', e.site_id' : '' )
    .($this->diafan->config("element_multiple") ? ', e.cat_id' : '' )
    .($this->diafan->config("order") ? ', e.sort' : '' )." FROM {".$this->diafan->table."} as e"
    .($this->diafan->config("element_multiple") && $this->diafan->cat ?
    " INNER JOIN {".$this->diafan->table."_category_rel} AS c ON e.id=c.element_id" .
    " AND e.id=c.element_id AND c.cat_id='".$this->diafan->cat."'" : '' )
    . " WHERE 1=1"
    .($this->diafan->config("parent") ? " AND e.parent_id='".$id."'" : '' )
    .($this->diafan->config("element") && !$this->diafan->config("element_multiple") && $this->diafan->cat ?
    " AND e.cat_id='".$this->diafan->cat."'" : '' )
    .($this->diafan->config("element_site") && $this->diafan->site ?
    " AND e.site_id='".$this->diafan->site."'" : '' ).( $this->diafan->where ? " ".$this->diafan->where : '' )
    .($this->diafan->config("trash") ? " AND e.trash='0'" : '' )
    .($this->diafan->config("element_multiple") && $this->diafan->cat ? " GROUP BY e.id" : '' )
    ." ORDER BY "
    .($this->diafan->config("prior") ? 'e.prior DESC, ' : '' )
    .($this->diafan->config("date") || $this->diafan->config("datetime") ? 'e.created DESC, ' : '' )
    .($this->diafan->config("act") ? 'e.act'.$this->lang_act.' DESC, ' : '' )
    .($this->diafan->table == 'site' ? " e.is_menu DESC, e.block ASC, " : '' )
    .($this->diafan->config("order") ? 'e.sort ASC, e.id ASC' : 'e.id DESC' )
    .' LIMIT '.$this->polog.', '.$this->diafan->nastr);
    }
  • 21 декабря 2013 г.
  • В службе поддержки сказали, что нужно редактировать функцию sql_query в файле /adm/includes/show.php
    Лично у меня это вызывает сомнения.
    • 22 декабря 2013 г.
    • Не знаю за что этот приоритет отвечает, мне не требовалось да и в доках не описано.

      попробуйте вот эту строчку убрать, может поможет.
      .($this->diafan->config("prior") ? 'e.prior DESC, ' : '' )



      А вообще я такую задачу не решал, но решая её, я бы начал с анализа, что меняется, а потом в зависимости что, искал бы место.
      Просто тут нужно рассмотреть ещё вариант, меняется например параметр сорт при этом, или товар становится не активным...и т.д., тогда нужно предотвратить это действие.
      • 22 декабря 2013 г.
      • Интересно, что в результате сбоя на сервере файл show.php был удалён, но на работе сайта это не сказалось. А это значит, что я был прав и этот фай не отвечает за лицевую часть сайта.
        Есть ещё какие-нибудь идеи?
        • 23 декабря 2013 г.
        • есть идеи, наймите программиста.
          • 30 января 2014 г.
          • Очень остроумно. За сортировку отвечает e.sort а не e.prior. Я совсем не об этом спрашивал.
            Нужно было просто настроить выборку из базы.
            • 30 января 2014 г.
            • Честно говоря я вообще не учитывал, то что вы не знаете, что sort = сортировка, это очевидно из названия, и об этом сказал бы вам почти любой школьник, так похожего слова на сортировку в запросе, больше нет.

              =========

              Профессионалом, решается эта задача за пару часов. И мне за вас искать место просто не интересно, хватает задач своих. Зачем вы оставили свой коммент, через месяц, мне непонятно. Если решили задачу, напишите об этом тут и приведите участок кода, который изменили. ЭТО БУДЕТ ПОЛЕЗНЕЕ!
  • 07 июля 2016 г.
  • Подскажите, какой файл хотя бы копать? Вопрос актуален и сейчас, а ТС не выложил решения.
    • 07 июля 2016 г.
    • Если нужна сортировка товара, которая отображается для гостей сайта, то shop.model.php.
      Можно и во вьюшке пересортировать, но правельнее на уровне sql запроса - так быстрее работать будет.
      Успехов.
      • 07 июля 2016 г.
      • мда.... Без пяти литров не разберешься
        Несколько часов уже ковыряюсь.

        Выборка понятна
        Код
        SELECT s.id, s.[name], s.timeedit, s.[anons], s.site_id, s.brand_id, s.no_buy, s.article

        no_buy - это как раз товар присутствует/отсутствует.

        Дальше лес
        Код
        .($this->diafan->_route->sort ? $this->sort_config['sort_directions'][$this->diafan->_route->sort].',' : '')
        ."s.no_buy ASC, ".$order,


        Знает кто-нибудь?
        • 08 июля 2016 г.
        • А Вы поэкспериментируйте: удалите то, что не понимаете. Сравните результаты - все поймете.

Новости

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

Форум