Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Замечательно, давайте сделаем свойство заказа "имейл" необязательным полем. Снимаем галочку, но нет же - компонент sale.order.ajax все-равно ругается, что поле email не заполнено. И даже снятая галочка в настройках главного модуля "E-mail является обязательным полем:" не помогает. Что делать? Лезем в код компонента sale.order.ajax, узнаем что разработчики догадались впихнуть туда обработчики событий, на которых мы бы с радостью и "выехали", но вызовы обработчиков находятся после проверки $_POST в компоненте, поэтому и тут разочарование. Придется либо кастомить логику компонента, либоговнохардкодить прямо в init.php. Из двух зол, я выбрал второе, поскольку уж очень не хочется один из важнейших компонентов оставлять не обновляемым системой.
Итак, намутил вот такой кондовый способ, который особо не тестировал, поэтому собираем консилиум, критикуем и предлагаем:
init.php:
Для универсальности невозбраняется предварительно узнать актуальный ORDER_PROP_ID и option SERVER_NAME.
Ну, а в шаблоне компонента sale.order.ajax, файл props.php
Т.е. проверяем, если выводится инпут для имейла и значение имейла содержит в себе наше фейкомыльце, то подменяем его на пустую строку, чтобы юзер внедоумении не видел под каким имейлом он будет в БД.
и чуть выше по коду файла props.php место где выводится label для инпута:
Заценил орфографию в коде БУС: обязательность полей пишут как REQUIED, IS_REQUIED
Назад в раздел
то ждем ваше обращение в нашей службе тех поддержки.
Оформление заказа с необязательным полем "E-mail"
Отсутствие электронной почты у посетителя сайта может стать причиной несовершившегося заказа в интернет-магазине. да, и такое бывает!Замечательно, давайте сделаем свойство заказа "имейл" необязательным полем. Снимаем галочку, но нет же - компонент sale.order.ajax все-равно ругается, что поле email не заполнено. И даже снятая галочка в настройках главного модуля "E-mail является обязательным полем:" не помогает. Что делать? Лезем в код компонента sale.order.ajax, узнаем что разработчики догадались впихнуть туда обработчики событий, на которых мы бы с радостью и "выехали", но вызовы обработчиков находятся после проверки $_POST в компоненте, поэтому и тут разочарование. Придется либо кастомить логику компонента, либо
Итак, намутил вот такой кондовый способ, который особо не тестировал, поэтому собираем консилиум, критикуем и предлагаем:
init.php:
// ORDER_PROP_2 - свойство заказа "телефон" // ORDER_PROP_3 - свойство заказа "email" global $APPLICATION; if ('/personal/order/make/' == $APPLICATION->GetCurDir()) // урл страницы оформления заказа { $sOrderPropPhone = ''; if (isset($_POST['ORDER_PROP_2'])) // эту секцию if можно вообще удалить, если у вас телефон не обязательное поле { $sOrderPropPhone = filter_var($_POST['ORDER_PROP_2'], FILTER_SANITIZE_NUMBER_INT); // аналог preg_replace("/[^0-9,+,-]/","",$string); } // если и телефон не заполнен, тогда вместо него в мыле будет значение unix времени // это нужно только для того чтобы не выводить ошибку "имейл не заполнен", т.к. телефон у нас все-равно обязательное поле if (0 == strlen($sOrderPropPhone)) { $sOrderPropPhone = time(); } if ((!isset($_POST['ORDER_PROP_3']) || empty($_POST['ORDER_PROP_3']))) { $_POST['ORDER_PROP_3'] = $sOrderPropPhone."@mysite.ru"; } } |
Для универсальности невозбраняется предварительно узнать актуальный ORDER_PROP_ID и option SERVER_NAME.
Ну, а в шаблоне компонента sale.order.ajax, файл props.php
elseif($arProperties["TYPE"] == "TEXT") { if ("Y" == $arProperties["IS_EMAIL"] && strpos($arProperties["VALUE"], "@mysite.ru")) { $arProperties['VALUE'] = ''; } ?> <input class="large" type="text" maxlength="250" size="<?=$arProperties["SIZE1"]?>" value="<?=$arProperties["VALUE"]?>" name="<?=$arProperties["FIELD_NAME"]?>" id="<?=$arProperties["FIELD_NAME"]?>"> <? } |
Т.е. проверяем, если выводится инпут для имейла и значение имейла содержит в себе наше фейкомыльце, то подменяем его на пустую строку, чтобы юзер внедоумении не видел под каким имейлом он будет в БД.
и чуть выше по коду файла props.php место где выводится label для инпута:
<?php if($arProperties["REQUIED_FORMATED"]=="Y" && 'Y' != $arProperties['IS_EMAIL']):?> <em>*</em> <?php endif; ?> |
Заценил орфографию в коде БУС: обязательность полей пишут как REQUIED, IS_REQUIED
Назад в раздел
Подписаться на новые материалы раздела: