UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: john от 26 Августа 2014, 23:30:11

Название: Проверка корректности заполнения поля в форме
Отправлено: john от 26 Августа 2014, 23:30:11
Кто-нибудь делал проверку заполнения поля с телефоном, то как?

Я открыл файл /classe/modules/data/__client_reflection.php
Нашел строку
 public function checkRequiredData(iUmiObjectType $objectType, $data, $objectId, $isNew) {... 

И пытаюсь туда добавить проверку, если введено не 10 символов, то выдает сообщение о ошибке.
$count = 10;
$objects = umiObjectsCollection::getInstance();
$object_address = $objects->getObject($adres_id);
$phone = $object_address->mobilnyj_telefon;
if(strlen($phone) != $count ) {
$errstr = ($admin) ? "%errors_wrong_field_value%" : getLabel('error-wrong-field-value');
$this->errorNewMessage($errstr . " \"{$fieldTitle}\"", false, 100, "input-missed-field");
++$wrongFieldsCount;}
Правильно ли я делаю?
Название: Re:Проверка корректности заполнения поля в форме
Отправлено: admin от 28 Августа 2014, 12:40:34
Нет, не правильно. Вы правите системный файл, это не хорошо, так как он перезатрется при первом же обновлении umi.

Для добавления механизма проверки к полям, в том числе проверку на правильность ввода телефона чаще всего используют js механизмы проверяющие что вводит пользователь. Если вам нужен механизм проверки на уровне php, то для этого в umi есть http://api.docs.umi-cms.ru/spravochnik_po_klassam_yadra_umicms/model_dannyh/baserestriction/
Название: Re:Проверка корректности заполнения поля в форме
Отправлено: john от 28 Августа 2014, 19:39:03
Обновлений не будет) Точно не затрется)
т.е. мне не сюда надо добавлять условие?
if($restrictionId = $field->getRestrictionId()) {
$restriction = baseRestriction::get($restrictionId);
if($restriction instanceof baseRestriction) {
if($restriction instanceof iNormalizeInRestriction) {
$value = $restriction->normalizeIn($value);
}

if($restriction->validate($value) == false) {
$fieldTitle = $field->getTitle();

$errstr = ($admin) ? "%errors_wrong_field_value%" : getLabel('error-wrong-field-value');
$errstr .=  " \"{$fieldTitle}\" - " . $restriction->getErrorMessage();

$this->errorNewMessage($errstr, false, 101, "input-wrong-field");
++$wrongFieldsCount;
}
}
}
А сюда? \classes\system\subsystems\models\data\restrictions
<?php
  class emailRestriction extends baseRestriction {
    protected $errorMessage = 'restriction-error-email';

    public function validate($value, $objectId = false) {
      return (bool) ($value ? preg_match("/.+\@.+\..+/", $value) : true);
    }
  };
?>

Не врубаюсь как писать, подскажите пожалуйста.
Необходимо проверить, что введено 10 символов.
Название: Re:Проверка корректности заполнения поля в форме
Отправлено: john от 28 Августа 2014, 22:27:11
На изучал в инете)
В файл добавил \classes\system\subsystems\models\data\restrictions\email.php
Сомневаюсь в правильности, но надеюсь иду в верном направлении)
Необходимо проверить, что введено 10 символов в поле с идентификатором $mobilnyj_telefon
class mobilnyj_telefonRestriction extends baseRestriction {
protected $errorMessage = 'restriction-error-email';
public function validate($value) {
return (bool) ($value ? strlen("10", $value) : true);
}
};
Название: Re:Проверка корректности заполнения поля в форме
Отправлено: admin от 29 Августа 2014, 10:25:20
в итоге что-нибудь заработало?

P.S. после создания правила валидации, нужно это правило к полю прикрепить. То есть, зайти в шаблон данных (или в форму), найти это поле и при редактировании в параметре "Формат значения" выбрать то правило валидации, которые вы создали.
Название: Re:Проверка корректности заполнения поля в форме
Отправлено: john от 29 Августа 2014, 19:00:29
Не заработал.

Как добавить новый формат значения?
В help просто описание - Формат значения — для некоторых типов полей позволяет выбрать способ проверки данных, вводимых в дальнейшем в это поле. В случае, если значение не проходит проверку по указанному способу, будет выдана ошибка и запрос на повторный ввод данных.

Я использовал формат значения e-mail, в php использовал правило
class mobilnyj_telefonRestriction extends baseRestriction {
protected $errorMessage = 'restriction-error-email';
public function validate($value) {
return (bool) ($value ? strlen("3", $value) : true);
}
};
Если ничего не вводить, то ничего не выводит, если ввести 1 символ или 3 как положено, пишет некорректно заполнено поле.
Название: Re:Проверка корректности заполнения поля в форме
Отправлено: john от 30 Августа 2014, 14:22:02
Как добавить формат значения , не решил(

Зато условие заработало
public function validate($value, $count = 15) {
if (strlen($value) == $count){
return true;}}

Хотя зачем его искал)) я добавил маску ввода телефона
8(___)___-__-__ и она состоит из 15 символов.
Вопрос, как сделать проверку наличия символа "_"?
Название: Re:Проверка корректности заполнения поля в форме
Отправлено: john от 30 Августа 2014, 22:11:55
Может и можно проще
У меня получилось так
public function validate($value) {
$dlina=strlen($value);
for($i=14; $i<$dlina; $i++)
{
$bykva= substr("$value",$i,1);
if ($bykva=="_") {
return false;
}
else {
return true;
}
}
}