Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Модуль Меню - заголовки для блоков меню их поля "Название"

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 8
Просмотров: 3739
Последний ответ 06 Июнь 2014, 12:06:35
от admin
Требуется по "клику" на элемент увеличить значение поля и показать значение

Автор tkalyuginaРаздел JS и AJAX

Ответов: 0
Просмотров: 316
Последний ответ 02 Сентябрь 2016, 12:03:55
от tkalyugina
Тип поля "Состаное"

Автор SumrakrndРаздел Настройка системы и модулей

Ответов: 4
Просмотров: 316
Последний ответ 28 Декабрь 2016, 17:14:17
от Sumrakrnd
Задать значени поля тип "Составное"?

Автор muldyРаздел Custom макросы

Ответов: 5
Просмотров: 2721
Последний ответ 14 Апрель 2014, 21:20:45
от ilyar
Мультизагрузка файлов в поля "набор изображения"

Автор atachРаздел Настройка системы и модулей

Ответов: 0
Просмотров: 103
Последний ответ 26 Апрель 2017, 19:26:48
от atach

0 Пользователей и 1 Гость просматривают эту тему.

*

Aisamiery

  • **
  • 83
  • +7/-4
    • Просмотр профиля
Здравствуйте, пришла и моя пора писать темы :)

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

Все как положено, пошел в админку, сделал поле типа кнопка/флажок, обновил страничку формы, появилось поле со звездочкой на странице оформления заказа, отправил пустую форму и он мне не показал ошибку, что поле не заполнено.

Ну тут как всегда полез в код, нашел такой метод
public function checkRequiredData(iUmiObjectType $objectType, $data, $objectId, $isNew)

Воткнул для дебага такую конструкцию
print_r($field->getTitle().' = '. $field->getIsRequired());

Отправил форму и увидел интересный факт, моё поле даже не попадает в эту проверку
Имя = 1Фамилия = 1Отчество = E-mail = 1Телефон = 1

Собственно вопрос: в чем прикол? :D

*

Aisamiery

  • **
  • 83
  • +7/-4
    • Просмотр профиля
А тут все ещё интереснее, метод проверяет только те поля, которые отправлены на сервер, а checkbox не отправляется на сервер, если не выбран :-D

*

Aisamiery

  • **
  • 83
  • +7/-4
    • Просмотр профиля
Видимо пообщался сам с собой ;D Но какой выход из ситуации с минимальными потерями сделать опишу тут, мало ли кому пригодится.

Без правки ядра тут не обойтись. Точнее чтобы обойтись малой кровью.

Нужно внести вот такие изменения в файл модуля data.

Файл classes/modules/data/__client_reflection.php
1243.    public function checkRequiredData(iUmiObjectType $objectType, $data, $objectId, $isNew) {
        //Начало тела метода опускаю
       
        $objectFields = $objectType->getAllFields(TRUE);

foreach ($objectFields as $oField) {

if ($oField->getIsRequired() && $oField->getIsVisible()) {
if (isset($data[$oField->getName()]))
continue;
else
$data[$oField->getName()] = false;
}

}

        // Перед этим циклом вставляем код выше
        foreach($data as $fieldName => &$value) {
$fieldId = $objectType->getFieldId($fieldName);
$field = $fields->getField($fieldId);

       .........

Собственно код проверяет все ли видимые и обязательные поля есть в массиве данных и если кого то нет он их инициализирует со значением false

Вот как то так...

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Пробовали использовать такое?

<input type="hidden" name="checkbox_field" value="0" />
<input type="checkbox" name="checkbox_field" value="1" />
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

Aisamiery

  • **
  • 83
  • +7/-4
    • Просмотр профиля
Ага видимо не ищу легких путей :D

*

Aisamiery

  • **
  • 83
  • +7/-4
    • Просмотр профиля
Пробовали использовать такое?

<input type="hidden" name="checkbox_field" value="0" />
<input type="checkbox" name="checkbox_field" value="1" />

Я придумал себе оправдание, если вдруг запамятую оформить какой нибудь тип поля в xslt, система не выкинет исключения при попытки сохранить объект, так как все обязательные поля все равно инициализируются ))))

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
Пробовали использовать такое?

<input type="hidden" name="checkbox_field" value="0" />
<input type="checkbox" name="checkbox_field" value="1" />

пробовали...  именно его и стоит использовать вместо редактирования ядра)
, в дефотлтных шаблонах umi можно встретить такой код для обработки boolean поля (xslt пример)
<xsl:template match="field[@type = 'boolean']" mode="form">
<div>
<label title="{@tip}">
<xsl:apply-templates select="@required" mode="form" />
<span>
<xsl:value-of select="concat(@title, ':')" />
</span>
<input type="hidden" name="{@input_name}" value="0" />
<input type="checkbox" name="{@input_name}" value="1">
<xsl:copy-of select="@checked" />
</input>
</label>
</div>
</xsl:template>