Перейти к публикации

Критическая ошибка в доп. полях (список) – DLE 17.1


Рекомендованные сообщения

Проблема связана с добавлением функционала Разрешить выбор нескольких значений
Значение в списке имеет вид:

Да, можно

В /engine/inc/xfields.php теперь все значения списка по умолчанию обрабатываются словно включен мультивыбор и разбиваются по запятой:

$fieldvalue = explode(',', $fieldvalue);  line: 1178

Т.е. в БД строка имеет вид:

field|Да, можно||other|value

где `Да, можно` – это одно цельное значение. А скрипт обрабатывает его словно это перечень значений.

В результате чего при каждом редактировании новости слетает выбранное прежде значение.
В коде идёт сравнение строки `Да, можно` из списка и массива [`Да`, ` можно`]. Что и приводит к некорректному результату.

in_array($value1[0], $fieldvalue)

 

Изменено пользователем Sander1
Ссылка на сообщение
Поделиться на других сайтах

Никакой критической ошибки здесь нет. Запятая в данном случае зарезервированный символ, как раз именно для возможности нескольких значений, поэтому в значении поля использоваться не может. И в данном случае зарезирвировали именно этот символ умышленно, а не допустили какую либо ошибку.

Ссылка на сообщение
Поделиться на других сайтах

Нууу, очень спорное решение в данном случае.
Вообще нигде не указано, что теперь нельзя использовать запятую в списках.
Человек просто заметил, что поле не сохранилось. Нет никаких ошибок или сообщений при использовании запятой в поле.

Основная суть проблемы в том, что:
1. Поменялась логика поведения прежнего функционала даже при выключенной опции мультивыбора.
2. Нигде не написано, что теперь нельзя использовать запятую в значении поля списка. Оно просто молча перестало работать как было раньше.

 

Почему я считаю это критической ошибкой.
Допустим это интернет магазин, в поле "Наличие" прописаны значения:

Есть, в достаточном количестве
Есть, под заказ
Нет, ожидается поставка
Нет, снято с производства

При редактировании будет всегда автоматически выбираться первое значение. И если админ не сразу заметит (а он не сразу заметит), то большое количество данных будет утеряно. И придётся немного помучаться, чтобы восстановить данные из бекапа. И будет хорошо, если всё ограничится лишь восстановлением данных...

Ссылка на сообщение
Поделиться на других сайтах
6 часов назад, Sander1 сказал:

Нууу, очень спорное решение в данном случае.

Какое есть. Нам нужно было зарезервировать какой то символ. Было принято решение что именно этот.

Ссылка на сообщение
Поделиться на других сайтах
8 часов назад, Sander1 сказал:

Есть, в достаточном количестве

Есть, под заказ

Нет, ожидается поставка

Нет, снято с производства

Второй пункт не логичный какой-то: В наличии, но где-то хз в каком городе и на каком складе. В наличии это значит подразумевается что в магазине на витрине лежит (если утрировать).

Ваши описАния смахивают на "колхозную школоту замутившую интернет-магаз",потому что в нормальном более-менее солидном ИМ будут такие пункты:

В наличии

Под заказ

Отсутствует (Снят с производства).

Ну это мое видение...

 

Изменено пользователем aleksandrhristich
Ссылка на сообщение
Поделиться на других сайтах
4 часа назад, celsoft сказал:

Какое есть. Нам нужно было зарезервировать какой то символ. Было принято решение что именно этот.

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

3 часа назад, aleksandrhristich сказал:

Второй пункт не логичный какой-то: В наличии, но где-то хз в каком городе и на каком складе. В наличии это значит подразумевается что в магазине на витрине лежит (если утрировать).

Ваши описАния смахивают на "колхозную школоту замутившую интернет-магаз",потому что в нормальном более-менее солидном ИМ будут такие пункты:

В наличии

Под заказ

Отсутствует (Снят с производства).

Ну это мое видение...

 

Почему вы лезете со своими советами когда тут обсуждается проблема в коде. Ваши советы тут никому не нужны.

Изменено пользователем Gameer
Ссылка на сообщение
Поделиться на других сайтах
41 минуту назад, Gameer сказал:

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

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

Ссылка на сообщение
Поделиться на других сайтах
5 часов назад, celsoft сказал:

Какое есть. Нам нужно было зарезервировать какой то символ. Было принято решение что именно этот.

Я понимаю причину такого решения. Полагаю в текущей реализации работы с доп.полями это действительно единственный наименее болезненный выход.
Основная суть посыла в том, что необходимо как-то уведомлять пользователя о запрете использовать запятые, а так же "новое не должно ломать старое".

 

3 часа назад, aleksandrhristich сказал:

Второй пункт не логичный какой-то

Да это просто выдуманный нежизнеспособный пример. Речь не бизнес-логике воображаемого приложения, а о неочевидном для пользователей изменении поведения поля при наличии запятой в списках.

 

39 минут назад, Gameer сказал:

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

Будут проблемы при смене символа. Если сейчас `,`, а потом в шаблоне надо будет `/`, то придётся выполнять перестроение всех полей с заменой `,` → `/`. А это как-то не логично и накладно. И опять же, будут проблемы если в значении поля уже используется символ `/`, то получим ту же проблему что и в топике.

 

Как вариант возможно можно было бы рассмотреть вариант с хранением данных в json формате. Ранее, когда JSON не работал с кириллицей, вариант с кастомным форматом `поле|значение||поле2|значение2` был вполне приемлем. Но сейчас, как мне кажется, использование json будет наиболее приемлемым.
Это решит многие проблемы и позволит более гибко хранить данные с различными дополнительными параметрами, как у загружаемых изображений к примеру.
Так же позволит использовать цельные значения доп.полей без необходимости костылить/заменять запятые, например подборки `Про мафию, банды и мошенников`.

Я уж молчу о файле xfields.txt Он уже давно просится перейти на json формат. Строка вида `||text||1|0|0|0|||0|0||||||||||||||` вызывает лишь отчаяние при попытке понять какие там параметры в ней прописаны.

Ссылка на сообщение
Поделиться на других сайтах
35 минут назад, Sander1 сказал:

Как вариант возможно можно было бы рассмотреть вариант с хранением данных в json формате. Ранее, когда JSON не работал с кириллицей, вариант с кастомным форматом `поле|значение||поле2|значение2` был вполне приемлем. Но сейчас, как мне кажется, использование json будет наиболее приемлемым.

Сейчас многое что можно сделать было бы по другому. Когда появился DLE JSON еще не существовало в природе. Нам нужно максимально поддерживать обратную совместимость, и мы не можем просто так убить абсолютно весь контент сайтов которые существуют десятки лет. Поэтому это невозможно к сожалению.

Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, Sander1 сказал:

Будут проблемы при смене символа. Если сейчас `,`, а потом в шаблоне надо будет `/`, то придётся выполнять перестроение всех полей с заменой `,` → `/`. А это как-то не логично и накладно. И опять же, будут проблемы если в значении поля уже используется символ `/`, то получим ту же проблему что и в топике.

 

2 часа назад, celsoft сказал:

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

Можно тогда сделать отдельное поле для разбивки именно строки. А разделитель вывода оставить как он есть.

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

Изменено пользователем Gameer
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...