Sander1 61 Опубликовано: 10 апреля Рассказать Опубликовано: 10 апреля (изменено) Проблема связана с добавлением функционала Разрешить выбор нескольких значений Значение в списке имеет вид: Да, можно В /engine/inc/xfields.php теперь все значения списка по умолчанию обрабатываются словно включен мультивыбор и разбиваются по запятой: $fieldvalue = explode(',', $fieldvalue); → line: 1178 Т.е. в БД строка имеет вид: field|Да, можно||other|value где `Да, можно` – это одно цельное значение. А скрипт обрабатывает его словно это перечень значений. В результате чего при каждом редактировании новости слетает выбранное прежде значение. В коде идёт сравнение строки `Да, можно` из списка и массива [`Да`, ` можно`]. Что и приводит к некорректному результату. in_array($value1[0], $fieldvalue) Изменено 10 апреля пользователем Sander1 Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 035 Опубликовано: 10 апреля Рассказать Опубликовано: 10 апреля Никакой критической ошибки здесь нет. Запятая в данном случае зарезервированный символ, как раз именно для возможности нескольких значений, поэтому в значении поля использоваться не может. И в данном случае зарезирвировали именно этот символ умышленно, а не допустили какую либо ошибку. Цитата Ссылка на сообщение Поделиться на других сайтах
Sander1 61 Опубликовано: 10 апреля Рассказать Опубликовано: 10 апреля Автор Нууу, очень спорное решение в данном случае. Вообще нигде не указано, что теперь нельзя использовать запятую в списках. Человек просто заметил, что поле не сохранилось. Нет никаких ошибок или сообщений при использовании запятой в поле. Основная суть проблемы в том, что: 1. Поменялась логика поведения прежнего функционала даже при выключенной опции мультивыбора. 2. Нигде не написано, что теперь нельзя использовать запятую в значении поля списка. Оно просто молча перестало работать как было раньше. Почему я считаю это критической ошибкой. Допустим это интернет магазин, в поле "Наличие" прописаны значения: Есть, в достаточном количестве Есть, под заказ Нет, ожидается поставка Нет, снято с производства При редактировании будет всегда автоматически выбираться первое значение. И если админ не сразу заметит (а он не сразу заметит), то большое количество данных будет утеряно. И придётся немного помучаться, чтобы восстановить данные из бекапа. И будет хорошо, если всё ограничится лишь восстановлением данных... 1 Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 035 Опубликовано: 11 апреля Рассказать Опубликовано: 11 апреля 6 часов назад, Sander1 сказал: Нууу, очень спорное решение в данном случае. Какое есть. Нам нужно было зарезервировать какой то символ. Было принято решение что именно этот. Цитата Ссылка на сообщение Поделиться на других сайтах
aleksandrhristich 106 Опубликовано: 11 апреля Рассказать Опубликовано: 11 апреля (изменено) 8 часов назад, Sander1 сказал: Есть, в достаточном количестве Есть, под заказ Нет, ожидается поставка Нет, снято с производства Второй пункт не логичный какой-то: В наличии, но где-то хз в каком городе и на каком складе. В наличии это значит подразумевается что в магазине на витрине лежит (если утрировать). Ваши описАния смахивают на "колхозную школоту замутившую интернет-магаз",потому что в нормальном более-менее солидном ИМ будут такие пункты: В наличии Под заказ Отсутствует (Снят с производства). Ну это мое видение... Изменено 11 апреля пользователем aleksandrhristich Цитата Ссылка на сообщение Поделиться на других сайтах
Gameer 310 Опубликовано: 11 апреля Рассказать Опубликовано: 11 апреля (изменено) 4 часа назад, celsoft сказал: Какое есть. Нам нужно было зарезервировать какой то символ. Было принято решение что именно этот. Эм, а можно строку и брать разделитель на разбивку тот который указан в доп поле и сделать для данного типа списка его обязательным. 3 часа назад, aleksandrhristich сказал: Второй пункт не логичный какой-то: В наличии, но где-то хз в каком городе и на каком складе. В наличии это значит подразумевается что в магазине на витрине лежит (если утрировать). Ваши описАния смахивают на "колхозную школоту замутившую интернет-магаз",потому что в нормальном более-менее солидном ИМ будут такие пункты: В наличии Под заказ Отсутствует (Снят с производства). Ну это мое видение... Почему вы лезете со своими советами когда тут обсуждается проблема в коде. Ваши советы тут никому не нужны. Изменено 11 апреля пользователем Gameer Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 035 Опубликовано: 11 апреля Рассказать Опубликовано: 11 апреля 41 минуту назад, Gameer сказал: Эм, а можно строку и брать разделитель на разбивку тот который указан в доп поле и сделать для данного типа списка его обязательным. Думаю нет. Это разделитель вывода, и это не один какой то символ может быть. Там может быть и целый HTML код, который как правило часто и используется для разделения при выводе. Цитата Ссылка на сообщение Поделиться на других сайтах
Sander1 61 Опубликовано: 11 апреля Рассказать Опубликовано: 11 апреля Автор 5 часов назад, celsoft сказал: Какое есть. Нам нужно было зарезервировать какой то символ. Было принято решение что именно этот. Я понимаю причину такого решения. Полагаю в текущей реализации работы с доп.полями это действительно единственный наименее болезненный выход. Основная суть посыла в том, что необходимо как-то уведомлять пользователя о запрете использовать запятые, а так же "новое не должно ломать старое". 3 часа назад, aleksandrhristich сказал: Второй пункт не логичный какой-то Да это просто выдуманный нежизнеспособный пример. Речь не бизнес-логике воображаемого приложения, а о неочевидном для пользователей изменении поведения поля при наличии запятой в списках. 39 минут назад, Gameer сказал: Эм, а можно строку и брать разделитель на разбивку тот который указан в доп поле и сделать для данного типа списка его обязательным. Будут проблемы при смене символа. Если сейчас `,`, а потом в шаблоне надо будет `/`, то придётся выполнять перестроение всех полей с заменой `,` → `/`. А это как-то не логично и накладно. И опять же, будут проблемы если в значении поля уже используется символ `/`, то получим ту же проблему что и в топике. Как вариант возможно можно было бы рассмотреть вариант с хранением данных в json формате. Ранее, когда JSON не работал с кириллицей, вариант с кастомным форматом `поле|значение||поле2|значение2` был вполне приемлем. Но сейчас, как мне кажется, использование json будет наиболее приемлемым. Это решит многие проблемы и позволит более гибко хранить данные с различными дополнительными параметрами, как у загружаемых изображений к примеру. Так же позволит использовать цельные значения доп.полей без необходимости костылить/заменять запятые, например подборки `Про мафию, банды и мошенников`. Я уж молчу о файле xfields.txt Он уже давно просится перейти на json формат. Строка вида `||text||1|0|0|0|||0|0||||||||||||||` вызывает лишь отчаяние при попытке понять какие там параметры в ней прописаны. Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 035 Опубликовано: 11 апреля Рассказать Опубликовано: 11 апреля 35 минут назад, Sander1 сказал: Как вариант возможно можно было бы рассмотреть вариант с хранением данных в json формате. Ранее, когда JSON не работал с кириллицей, вариант с кастомным форматом `поле|значение||поле2|значение2` был вполне приемлем. Но сейчас, как мне кажется, использование json будет наиболее приемлемым. Сейчас многое что можно сделать было бы по другому. Когда появился DLE JSON еще не существовало в природе. Нам нужно максимально поддерживать обратную совместимость, и мы не можем просто так убить абсолютно весь контент сайтов которые существуют десятки лет. Поэтому это невозможно к сожалению. Цитата Ссылка на сообщение Поделиться на других сайтах
Gameer 310 Опубликовано: 11 апреля Рассказать Опубликовано: 11 апреля (изменено) 2 часа назад, Sander1 сказал: Будут проблемы при смене символа. Если сейчас `,`, а потом в шаблоне надо будет `/`, то придётся выполнять перестроение всех полей с заменой `,` → `/`. А это как-то не логично и накладно. И опять же, будут проблемы если в значении поля уже используется символ `/`, то получим ту же проблему что и в топике. 2 часа назад, celsoft сказал: Думаю нет. Это разделитель вывода, и это не один какой то символ может быть. Там может быть и целый HTML код, который как правило часто и используется для разделения при выводе. Можно тогда сделать отдельное поле для разбивки именно строки. А разделитель вывода оставить как он есть. Если ничего не указывается, то разделитель будет запятая как сейчас в противном случае каждый сможет настроить под свои нужды. Изменено 11 апреля пользователем Gameer Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.