Вы здесь

Views неправильно сортирует числа в поле типа text

0

Приветствую!

Есть данный сайт, в котором реализован каталог товаров через Views и BEF. Настройки сортировки этого представления: Содержимое: Цена (возр.) (поле в типе материала — field_price). Данное поле — обычное текстовое, значение — только цифры (собственно, цена, которая выводится в превьюхе и карточке товара).

Вопрос: почему сортировка так странно распределяет элемент со стоимость «10950»? То есть, почему вначале идёт он, а потом уже обычная сортировка по возрастанию?

Версия Drupal: 
7.x
Связанные проекты: 
Views
Вопрос задан 12.05.2016 - 22:40

Ответы

0

Цена точно числового типа?
Ваша сортировка — по алфавиту: сначала то, что начинается с единицы, потом то, что с двойки и т. д. Она применяется к данным текстового типа.

Ответ дан 12.05.2016 - 22:59

Поле — обычное, текстовое (Текст : Текстовое поле). Видимо в этом проблема?
Вопрос: можно ли поменять тип поля без удаления и пересоздания?

Комментарий оставлен 12.05.2016 - 23:14

Спасибо, Евгений за ответ :)
А скриптиком — это в БД запрос сделать что ли? Можно пример, если не трудно?

Комментарий оставлен 12.05.2016 - 23:26

Поле — обычное, текстовое

Да, проблема в этом. Тип должен быть числовой (целое число, десятичное, с плавающей точкой).

можно ли поменять тип поля без удаления и пересоздания

В админке - нет. Можно создать новое числовое поле и перенести туда данные из текстового скриптом. Или вот в гугле нашел способ без скрипта: http://blogpost.pp.ua/drupal/33 . Сам не проверял. Погуглите варианты, может еще более простой найдете.

Комментарий оставлен 12.05.2016 - 23:39

А скриптиком — это в БД запрос сделать что ли?

Лучше через ДрупалАПИ. Пройтись по всем нодам, записать новое значение в новое поле.
Либо вот человек меняет тип поля без создания нового:
http://infobsd.ru/izmenit-tip-i-dlinu-polya-bez-poteri-dannyh-drupal-7

Можно пример, если не трудно?

Попробуйте без скрипта по ссылке из моего предыдущего коммента. Если не сработает — напишу пример скрипта.

Комментарий оставлен 12.05.2016 - 23:43

Поменял в БД #_field_config тип для этого поля с text на number_integer (type) и number (module). Ничего не поменялось, так и выводится всё криво.. плюс ошибка выскакивает: *Notice: Undefined index: text_processing в функции text_field_widget_form() (строка 549 в файле /home/public_html/modules/field/modules/text/text.module).*

Комментарий оставлен 13.05.2016 - 00:20

Ради этого ставить и разбираться с рулсами (в которых я ни бум-бум вообще) — совсем не хочется.

ADD:

Сделал по аналогии с этим http://infobsd.ru/izmenit-tip-i-dlinu-polya-bez-poteri-dannyh-drupal-7 — ошибка исчезла, но всё равно в этом разделе (http://cabelspb.ru/katalog/gotovye-komplekty-kabelya) так же товар с ценой «10950» стоит первым.. хотя остальные идут в верном порядке (по возрастанию). А ещё в разделе http://cabelspb.ru/katalog/termoregulyatory тоже самое, но с более мелкой стоимостью — «550» (жёлтый товар). Фигня какая-то...

Комментарий оставлен 13.05.2016 - 01:18

Примерный скрипт:

$nodes = node_load_multiple(NULL, array('type' => "node_type"));
foreach ($nodes as $nid => $node) {
    $node->field_num[LANGUAGE_NONE][0]['value'] = (int)($node->field_text[LANGUAGE_NONE][0]['value']);
    node_save($node);
}

field_num — новое целочисленное поле,
field_text — старое текстовое поле.

Если товаров не много, то скрипт успеет отработать. Если нет, то надо использовать batch, к примеру.

Комментарий оставлен 13.05.2016 - 01:38

Понял в чём дело. При ручной замене типа поля в БД — параметр field_price_value в таблице #_field_data_field_price надо было изменить с VARCHAR на INT. После этого — всё вроде как верно отображается, как и должно :)

P.S. ну с 7-ой всё ясно, но то, что и в 8-ке не сделали безгеморройный способ менять тип поля — печалит... хотя, казалось бы, чего тут сложного — просто замена значений в таблице поля.

Комментарий оставлен 13.05.2016 - 01:47

хотя, казалось бы, чего тут сложного — просто замена значений в таблице поля.

Думаю, много разных нюансов при конвертации типов. Ведь не всегда бывает как у вас: правильные числовые данные в текстовом поле.

Комментарий оставлен 13.05.2016 - 01:53

Страницы