Уникальное поле в профиле

#1 9 июня 2015 в 11:24
Добавил возможность создавать уникальное поле в профиле пользователя.
По умолчанию почему-то такой тип поля в профиле не создать.

В файле system/controllers/users/backend/forms/form_field.php после:
  1. new fieldCheckbox('options:is_email', array(
  2. 'title' => LANG_VALIDATE_EMAIL,
  3. )),
добавить:
  1. new fieldCheckbox('options:is_unique', array(
  2. 'title' => LANG_VALIDATE_UNIQUE,
  3. )),
И теперь при создании нового поля в профиле можно указать что поле должно быть уникальным.

Но есть одно но: При редактировании профиля, если это уникальное поле оставить с этим же значением (то есть не изменять) то выходит ошибка, что поле должно быть уникальным и такое значение уже есть.

Чего не происходит в контенте. Т.е. там если поле не менялось, то и на уникальность не проверяется.
Может кто сможет подсказать, где что нужно еще добавить...

Вот и приходится теперь при изменении профиля обязательно изменить уникальное поле, а после сохранения снова редактировать и изменять на прежнее нужное значение.
#2 9 июня 2015 в 12:04
kreator, если я правильно понял, по базе данных идет проверка поля, оно находится и выдает ошибку. Двойку не ставил даже… посмотрите что в классе fieldcheckbox прописано.
#3 9 июня 2015 в 12:19
Добавленные мной строчки имеются в полях при создании поля в типах контента.

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

В профиле же если поле оставить с тем же значением то проверка находит дубль.
#4 26 июня 2015 в 00:28
Так может уже знает в чем дело? Почему разная валидация?
#5 27 июня 2015 в 02:50
Или хоть может знает какая функция отвечает, валидировать поле или нет при уникальном значении?
#6 27 июня 2015 в 07:53

Почему разная валидация?

kreator
Потому что в контенте используются разные методы валидации при добавлении и редактировании материала.
В первом случае validate_unique, во втором validate_unique_exclude.
Какие используются у вас, известно только вам.
Примеры:
\system\controllers\content\frontend.php строка 538,
\system\controllers\content\model.php строка 416.
#7 28 июня 2015 в 02:53
Решил не делать хак из этого и обойтись хуком.

  1. if (!$errors){
  2. $is_allowed = cmsEventsManager::hookAll('user_profile_update', $profile, true);
  3. if ($is_allowed !== true && in_array(false, $is_allowed)) { $errors = true; }
  4. }
Это хук перед Update профиля и ошибок не найдено.

Что должно вернуться из хука? т.е. какое значение должно быть $is_allowed чтобы $errors = true?
После дополнительной проверки поля.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.