сортировка товаров в админке не по алфавиту а по цифре

Тема в разделе "OpenCart", создана пользователем cherkas, 15 фев 2018.

  1. cherkas

    cherkas

    Регистрация:
    25 фев 2013
    Сообщения:
    451
    Симпатии:
    57
    Здравствуйте, вывел в таблицу товаров в админке поле location, сдлелал по нему сортировку как у других полей, но сортировка происходит по алфавиту, а нужно сортировать по цифре.

    т.е. сортирует так:
    1
    2370
    550
    975
    98
    и.т.д.

    а нужно так:
    1
    98
    550
    975
    2370

    делал через модификатор
    код модификатора прилагаю

    смотрел по аналогии с ценой, разницы не нашел

    ocstore 2.3.
     
    Последнее редактирование: 15 фев 2018
  2. Master2KAZ

    Master2KAZ

    Регистрация:
    25 окт 2014
    Сообщения:
    183
    Симпатии:
    72
    Я извиняюсь, а не могли бы вы пояснить чем вас sort_order не устраивает? Есть стандартное поле для ввода цифр, туда загоняете ваши числа и сортируете.
     
  3. ISomeInterface

    ISomeInterface

    Регистрация:
    4 окт 2016
    Сообщения:
    106
    Симпатии:
    76
    Разница в типе данных. Поле location имеет тип varchar (соответственно сортируется как строка, посимвольно), у price тип decimal (сортирует как число).
    3 варианта:
    1)использовать sort_order как предложили выше;
    2)поменять тип данных location что бы там хранилось число а не строка;
    3)привидение типов в запросе с сортировкой order by location * 1 asc (не рекомендую)
     
    cherkas и Master2KAZ нравится это.
  4. Master2KAZ

    Master2KAZ

    Регистрация:
    25 окт 2014
    Сообщения:
    183
    Симпатии:
    72
    Пункт 3. Нужно учитывать, что если в ORDER BY используются какие-то операции, то не используются индексы. Как следствие, при большом кол-ве данных будет заметное снижение производительности.
    Пункт 2. После смены типа поля location в БД на числовое, в файлах моделей везде, где используется location придется менять $this->db->escape($data['location']) на (int)$data['location'] или (float)$data['location'].
    Пункт 1. Ничего делать не надо - просто заполнять поле sort_order и сортировать. Это оптимальный вариант, если нет ОСОБЫХ причин, по которым нужно использовать location.
     
    cherkas и ISomeInterface нравится это.
  5. cherkas

    cherkas

    Регистрация:
    25 фев 2013
    Сообщения:
    451
    Симпатии:
    57
    всё почитал но не понял о каком поле sort_order идет речь

    http://prntscr.com/if9mvn

    сам input этого поля поменялна тип number так что буквы ввести не должны.


    После смены типа поля в БД фильтрует нормально.


    Спасибо.

    И если можно расскажите всё таки про sort_order, может еще где то пригодится.
     
    Последнее редактирование: 15 фев 2018
  6. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    sort_order - это название его в базе, а в админке оно называется "Порядок сортировки" и находится внизу страницы со скрина.
    И вообще, странно, что не первый год работая с ОК вы не знаете, что такое sort_order, который в ОК есть почти у всего, что выводится на витрину.
     
    cherkas нравится это.
  7. cherkas

    cherkas

    Регистрация:
    25 фев 2013
    Сообщения:
    451
    Симпатии:
    57
    спаибо, просто мой вопрос был совсем о другом и в голове эти два "объекта" не связались вообще ни как.

    Бывает )