Документация startmedia
  • Документация StartMedia
  • Регламент
  • 📜Регламент рабочего процесса
    • 1. Цикл работы над задачей
    • 2. Работа с ветками
    • 3. Оформление коммитов
    • 4. Merge Requests
    • Правила оформления отчёта к задаче
    • Стратегии слияния веток
  • 📋Planfix - работа с задачами
    • Жизненный цикл задач
    • Типы задач
    • Структура задачи
    • Коммуникации в задаче
  • Базовые статьи
    • 🔧Настройка рабочего окружения
      • Установка необходимых программ
      • Настройка GIT
      • Настрйка OpenServer
      • Настройка окружения ОС
      • Настройка синхронизации с OneDrive
    • 🎆Развертка локальной копии сайта
      • Клонируем репозиторий
      • Копируем ядро и базу
      • Разархивируем ядро
      • Заливаем базу данных
      • Читаем README
      • Правим файлы конфигурации
      • Правим параметры сайтов
      • Выполняем проверку системы
      • Ставим галочку "Установка для разработки"
      • Создаем папку upload
      • Что может пойти не так? (казалось бы)
    • Обучающие материалы
    • Как создать Merge Request
  • Начальный уровень
    • Многосайтовость битрикс и Open Server
    • Структура шаблона
      • Установка и настройка Gulp
      • Общие правила структуры
    • Верстка
      • Стиль кода SASS
    • Работа с Битриксом
      • Правила создания структуры проекта
      • Правила создания структуры инфоблоков
      • Стандартные и пользовательские свойства в Битриксе
      • Использование API Bitrix
      • Меню
      • Модули
    • Готовые решения
      • Экспорта каталогов в YML
      • Эмулятор обмена с 1С
      • Веб формы
    • Решения для поисковой оптимизации
    • Миграции - Перенос инфоблоков с локальной копии на боевой сайт
  • Продвинутый уровень
    • Системное администрирование
      • Работа с веб-сервером
      • Настройка редиректов
      • Работа с доменами
        • Настройка SPF-записи
        • Работа с DNS записями
        • Настройка файла robots.txt
      • Создание копии битрикс в хранилище
      • Разворачивание dev версии
      • Конвертация сайта на bitrix из win1251 в utf8
      • Лечим сайт от вирусов и закрываем дыры
    • Gitlab
    • Перенос сайта на 1C-Bitrix на наш хостинг
    • Интеграции Битрикс со сторонними сервисами
      • Интеграция 1С с 1С-Битиркс
    • Дебаггинг
    • React
      • Flux на пальцах
  • Справочники
    • Apache (htaccess)
      • Стандартный htaccess для 1с-битрикс
    • Работа с Базой Данных
  • Чек-лист Project менеджера
  • Добавление подарка в корзину при добавления каждого товара
  • PhpStorm
  • Готовые команды консоли
Powered by GitBook
On this page
  • AJAX для веб формы
  • Оформление скриптов
  • Вывод результатов веб-формы
  • Политика конфиденциальнсоти
  • Оформление поля телефон
  • Вывод подсказки под полем
  • Установка Google recaptcha 2
  • Веб-формы AJAX в fancybox

Was this helpful?

  1. Начальный уровень
  2. Готовые решения

Веб формы

Набор полезных практик для работы с веб формой

AJAX для веб формы

Чтобы в компоненте form.result.new включить режим AJAX добавьте в параметры компонента параметры:

"AJAX_MODE" => "Y",
"AJAX_OPTION_HISTORY" => "N",
"AJAX_OPTION_JUMP" => "Y",
"AJAX_OPTION_SHADOW" => "N",
"AJAX_OPTION_STYLE" => "Y",

Если необходимо разместить несколько форм на одной странице, нужно добавить каждой форме идентификатор:

"AJAX_OPTION_ADDITIONAL" => $arForm['ID'],

Оформление скриптов

Чтобы ваши скрипты адекватно отрабатывали после AJAX обновление веб-формы, используйте конструкцию

script.js
$(function () {
	InitScripts();
});
BX.addCustomEvent('onAjaxSuccess', function(){
	InitScripts();
});

function InitScripts() {
	// your code
	// например, маска для телефона
	$('input[type="tel"]').mask("+7 (999) 999-9999");
}

Вывод результатов веб-формы

<?
$request = \Bitrix\Main\Context::getCurrent()->getRequest();
$resultForm = $request->get("RESULT_ID");
?>

<?if ($arResult["isFormNote"] == "Y") {?>
	<div class="result-ok alert alert-success">
		<?foreach ($arParams["RESULT"] as $arParam) {?>
			<?= str_replace("#num#", $resultForm, $arParam);?><br />
		<?}?>
	</div>
<?}?>
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

$arTemplateParameters = array(
		// Текст после обращения
		"RESULT" => Array(
				"PARENT" => "VISUAL",
				"NAME" => GetMessage("RESULT_TEXT"),
				"TYPE" => "STRING",
				"MULTIPLE" => "Y",
				"DEFAULT" => "",
		),
);
?>
$MESS ["RESULT_TEXT"] = "Текст после обращения";
"RESULT" => array(
	0 => "Спасибо за ваше обращение!",
	1 => "Номер вашего обращения ##num#",
	2 => "", // строка пропущена, чтобы вставить <br />
	3 => "В скором времени мы обязательно вам ответим.",
),

Политика конфиденциальнсоти

<?$APPLICATION->IncludeFile("/include/agreement.php",
	Array(

		"BUTTON_TEXT" => $arResult['arForm']['BUTTON'],
		"HREF" => $arParams['HREF']
	),
	Array(
		"MODE" => "html",
		"NAME" => "Редактирование включаемой области раздела",
	));
?>
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

$arTemplateParameters = array(
		// Ссылка на политику конфиденциальности
		"HREF" => Array(
				"NAME" => GetMessage("TITLE_HREF"),
				"TYPE" => "STRING",
				"DEFAULT" => "",
		),
);
?>
$(function () {
	InitScripts();
});
BX.addCustomEvent('onAjaxSuccess', function(){
	InitScripts();
});

function InitScripts() {
	/*==================================================
	 =            Required checkbox + submit            =
	 ==================================================*/
	if ($('.form-check')[0]) {
		$('.form-check').each(function() {
			if (!$(this).find('input[type="checkbox"]').prop('checked')) {
				$(this).parents('form').find('input[type="submit"]').attr('disabled', 'disabled');
			}
		});
		$('.form-check').on('click', function() {
			if (!$(this).find('input[type="checkbox"]').prop('checked')) {
				$(this).parents('form').find('input[type="submit"]').attr('disabled', 'disabled');
			} else {
				$(this).parents('form').find('input[type="submit"]').removeAttr('disabled');
			}
		});
	}
}
$MESS ["TITLE_HREF"] = "Ссылка на политику конфиденциальности";
<div class="form-check">
	<input class="bx-offer-checkbox form-check-input" type="checkbox" required="" checked="" id="privacy" />
	<label class="form-check-label" for="privacy">Нажимая на кнопку «<?=$arParams["BUTTON_TEXT"]?>», вы принимаете условия <a href="<?=$arParams["HREF"]?>" target="_blank">Политики конфиденциальности</a>.</label>
</div>

Оформление поля телефон

Чтобы телефон можно было корректно вводить на телефонах, и без большого труда вешать на поле маску ввода, предлагается следующий метод.

  1. Отключить упрощенный режим редактирования веб форм

    Настройки > Настройки продукта > Настройки модулей > Веб-формы > Использовать упрощённый режим редактирования форм

  2. Заходим в веб форму, редактируем вопрос

  3. На вкладке ответ в поле параметры вставляем код: class=phone

  4. Далее нужно вывести это поле в шаблоне

Вывести поле телефона нужно с типом tel. Делается это для удобного ввода с мобильного устройства. Пример вывода:

<?foreach ($arResult["QUESTIONS"] as $arItem) {?>
	// шаблон до вывода поля
	<?if (!empty($arItem["CAPTION"])) {?>
		<label><?= $arItem["CAPTION"]?> <?= ($arItem["REQUIRED"] === "Y") ? '<sup class="required">*</sup>' : ''?></label>
	<?}?>
	
	<? foreach ($arItem["STRUCTURE"] as $arInput) {
		$type = $arInput["FIELD_TYPE"];
		$name = "form_" . $type . "_" . $arInput["ID"];
		
		$required = ($arItem["REQUIRED"] === "Y") ? 'required="required"' : '';
	
		switch ($type) {		
			case "tel":
				$name = "form_text_" . $arInput["ID"];
				?>
				<input <?= $required?> type="<?= $type ?>" name="<?= $name ?>" placeholder="+7 (___) ___-__-__">
				<?
				break;
				
			// кейсы для text, email, file, radio, checkbox, select
			// для примера кейсы для text и email
			case "text":
			case "email":
				?>
				<input <?= $required?> type="<?= $type?>" name="<?= $name?>" value="<?= $value?>">
				<?
				break;
		}
	}?>
<?}?>
foreach ($arResult["QUESTIONS"] as $key => &$arItem) {

	foreach ($arItem["STRUCTURE"] as &$arInput) {
		$params = $arInput["FIELD_PARAM"];
		
		if (!empty($params)) {
			preg_match_all("#([^,|=]+)=?([^,]+|)#", $params, $out);
			unset($out[0]);
			$out = array_combine($out[1],$out[2]) ;

			$arItem["FIELD_PARAM"] = $out;

			// проверка на поле телефона
			// если такое есть, установим тип поля
			if (isset($arItem["FIELD_PARAM"]["phone"])) {
				$arInput["FIELD_TYPE"] = "tel";
			}
		}
	}
	
}
$(function () {
	InitScripts();
});
BX.addCustomEvent('onAjaxSuccess', function(){
	InitScripts();
});

function InitScripts() {
	// маска для телефона
	$('input[type="tel"]').mask("+7 (999) 999-9999");
}

Вывод подсказки под полем

Скоро...

Установка Google recaptcha 2

скоро...

Веб-формы AJAX в fancybox

скоро...

PreviousЭмулятор обмена с 1СNextРешения для поисковой оптимизации

Last updated 3 months ago

Was this helpful?