Проблема с значением "0" в формах и выводе ICMS2

 
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проекта
Сообщений: 1356
Создаю форму c полями:
Код PHP:
  1. new fieldString('ballm', array(
  2. 'title' => LANG_YCHET_BALLM,
  3. 'rules' => array(
  4. array('required'),
  5. array('max_length', 3)
  6. )
  7. )),
  8. new fieldString('balla', array(
  9. 'title' => LANG_YCHET_BALLA,
  10. 'rules' => array(
  11. array('required'),
  12. array('max_length', 3)
  13. )
  14. )),
  15. new fieldString('balli', array(
  16. 'title' => LANG_YCHET_BALLI,
  17. 'rules' => array(
  18. // array('required'),
  19. array('max_length', 3)
  20. )
Но если ввести значение "0", то почему-то срабатывает правило required, т.е. для него 0 это не значение, хотя я использую тип поля fieldString, пробовал поле number эффект тотже, т.е. правило required не дает занести значение "0"(цифра ноль). без рекваред понятно что заносит,НО!

Так и при выводе в админке grid это значение не выводится.

Почему так?

Тип поля в базе varchar.
Фриланс по Intantcms 1 и 2 версий.Писать в ЛС. Отзывы заказчиков
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3512
kirkr, об этом даже в документации написано, правда только в разделе список. Но принцип тот же:
Документация:
:!: Ни в коем случае не используйте в таком списке в качестве id число 0 (ноль). Этот ноль будет некорректно обрабатываться программой: на первом месте списка, при обязательности заполнения поля, он будет провоцировать ошибку «поле не заполнено»; если же данный пункт (с нулевым индексом) поставить на другие места, в БД результат будет попадать правильно, но значение не будет отображаться в профиле, как будто оно пустое.
:!: Столь же непредсказуемо ведут себя, в качестве индексов, отрицательные числа. Поэтому единственный дельный совет: используйте только положительные целые числа больше ноля.
Реклама
cms
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проекта
Сообщений: 1356
Loadырь, Вопрос в том, что я записываю строковое значение, а не списком или числом даже. Строке вообще побарабану должно быть по символам.

И в документации про индексы и ключевые поля. У меня же не главные поля, а значения.
Редактировалось: 1 раз (Последний: 14 октября 2015 в 09:31)
Фриланс по Intantcms 1 и 2 версий.Писать в ЛС. Отзывы заказчиков
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3512
kirkr, А какая разница, вводится 0 с клавиатуры или выбирается из списка. Система проверяет значение "value", а не то каким способом оно заполняется.
Посетитель
small user social cms
МедальАвторитет форумаПочетный донор проекта
Сообщений: 1356
Loadырь, Разница в передачи например integer или string, при текстовой передачи ему вообще побарабану должно быть на символ ноль
Фриланс по Intantcms 1 и 2 версий.Писать в ЛС. Отзывы заказчиков
Посетитель
small user social cms
МедальПочетный донор проектаАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2538
Переформулируем вопрос. Кто как выходит из ситуации, когда в значение поля надо записать ноль?
Мне, например, надо вести учет количества пользователей, идущих на мероприятие.

Я пока поступил так. Поле со значением по умолчанию 1, при выводе минусую 1...

Есть более элегантные решения?
Виджеты, поля и компоненты для instantcms 2 http://www.zau4man.ru/
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1164
kirkr:
Разница в передачи например integer или string, при текстовой передачи ему вообще побарабану должно быть на символ ноль
в php "0" == 0!!! Как по мне, так это круто. Но вот такая запись "0"===0 уже не правильная (use strict так сказать) )) Вот тут хорошие таблицы сравнения: http://php.net/manual/en/types.comparisons.php

Zau4man, я в дополнениях прописываю: ставьте "-1" для такого-то значения ))) Костыль еще тот... У меня такое прокатывает потому что само значение 0 не используется в расчетах или коде, а вот если нужно получить именно 0...?
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1164
Я немного покопался в коде и нашел функцию проверки поля:
..\system\core\controller.php
Код PHP:
  1. public function validate_required($value){
  2. if (empty($value)) { return ERR_VALIDATE_REQUIRED; }
  3. return true;
  4. }
а что если дополнительно проверять значение на текстовый ноль?
Код PHP:
  1. public function validate_required($value){
  2. if (empty($value) && $value !=="0") { return ERR_VALIDATE_REQUIRED; }
  3. return true;
  4. }
Посетитель
small user social cms
МедальКубок зрительских симпатий
Сообщений: 394
Не правильнее бы было использовать is_null() вместо empty()?
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1164
если использовать is_null(), тогда пустая строка может пройти валидацию, в то время, как нам наоборот нужно чтобы поле содержало значение.
Посетитель
small user social cms
МедальКубок зрительских симпатий
Сообщений: 394
А, то есть всё равно без двух условий не обойтись.
Редактировалось: 1 раз (Последний: 3 ноября 2015 в 00:22)
Посетитель
small user social cms
МедальПочетный донор проектаАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2538
Val, пойду потестирую, спасибо.
Виджеты, поля и компоненты для instantcms 2 http://www.zau4man.ru/
Посетитель
small user social cms
МедальПочетный донор проектаАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2538
Val, получается, что работает. Только надо еще в шаблонах вывода контента внести изменения.
default_list.tpl.php и default_item.tpl.php Там тоже есть проверочка...

было
Код PHP:
  1. <?php if (empty($item[$field['name']])) { continue; } ?>
надо
Код PHP:
  1. <?php if (empty($item[$field['name']]) && $item[$field['name']] !=="0") { continue; } ?>
Виджеты, поля и компоненты для instantcms 2 http://www.zau4man.ru/
Посетитель
small user social cms
МедальПочетный донор проектаАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2538
Проверить кстати легко самому. В любое поле string типа контента сохраняем цифру 0. Без правок - ноль не выводится.
С правками в контроллере и шаблоне - выводится.
Виджеты, поля и компоненты для instantcms 2 http://www.zau4man.ru/
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1164
У себя я проверял - работало. Но как я говорил у меня узкоспецифичное использование))) Поэтому и предложил вам более широко глянуть - с шаблонами я не разбирался))))
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.