Этот компонент работает с инфоблоками (рассматривается как замена модуля веб-форм). Поля формы берутся из свойств инфоблока и данные заполненной формы сохраняются в этот же инфоблок. Результаты формы так же отправляются на e-mail администратору и на e-mail, заполнившему форму (если имеется свойство с символьным кодом "email" и оно было заполнено). Шаблоны этих e-mail-ов хранятся как элементы другого инфоблока (см. инструкции ниже). [spoiler] Установка
Скачиваем и распаковываем содержимое в директорию /bitrix/components/custom/ от корня вашего сайта, где custom — это произвольное имя директории, для неофициальных компонентов Битрикса, можете создать директорию custom, если у вас таковой не имеется (что вполне вероятно), а можете создать директорию с другим именем и распаковать содержимое архива туда (но ни в коем случае ничего не кладите и не меняйте в директории /bitrix/components/bitrix/, почему этого делать не стоит — расскажет вам документация Битрикс);
Переименовываем распакованную директорию из архива «bitrix-advanced-form-master» в «advanced_form», а впрочем при желании можете оставить как есть, работать и так должно;
По дальнейшей настройке см. ниже.
«Быстрая» установка через терминал
cd КОРЕНЬ_САЙТА && cd ./bitrix/components && mkdir custom && cd ./custom && git clone git://github.com/unclechu/bitrix-advanced-form.git advanced_form
Предварительная настройка
Всего понадобится 2-а инфоблока:
Для результатов формы;
Для шаблонов E-Mail.
Рекомендую сразу создать отдельный тип инфоблоков с идентификатором (ID) "forms" специално под задачи формы.
Далее создаём обязательный инфоблок для сохранения результатов формы (даже если вы не хотите сохранять результаты формы — он вам всё-равно понадобится, потому как поля формы — определяются свойствами этого инфоблока):
Обязательно укажите символьный код для инфоблока (обратите внимание: символьные коды указывать нужно везде, где только увидите такую возможность, потому как компонент опирается всюду на эти символьные коды, а не на идентификаторы (ID) как обычно, поскольку такой способ более надёжен и гибок, и особенно удобен в задачах, которые реализует данный компонент);
В поле «название» введите нужное вам название инфоблока, например ваше название будующей формы;
Перейдите во вкладку «поля» и укажите там значение по умолчанию для поля «название» (не путать с предыдущим полем) для элементов инфоблока с результатами формы. По каким-то причинам это поле является обязательным к заполнению;
В этой же вкладке укажите значение по умолчанию для поля «начало активности» — «текущие дата и время», чтобы отслеживать дату и время заполнения формы;
Сразу перейдите во вкладку «доступ» и поставьте «для всех пользователей» — «чтение», иначе неавторизованный пользователь не сможет отправить данные формы;
Переходим во вкладку «свойства» и начинаем наполнять будущую форму полями. Поддерживаемые типы полей смотрите ниже. Типы, которые не поддерживаются — игнорируются формой. Для каждого свойства нужно указывать символьный код. Если вам нужно иметь свойство, которое не попадёт в форму, то в начале его символьного кода должен быть префикс «nf_». Учитываются галочки «обязательное» для обязательных полей формы к заполнению. Если вам нужно отправлять пользователю e-mail уведомление о заполнении им формы, то должно быть текстовое поле с символьным кодом «email». Для полей типа TEXTAREA используется тип свойства «HTML/текст». Для типа «список» обязательно нужно указывать в значениях «XML_ID». Для типа «список» ещё не реализована поддержка чекбоксов, см. TODO;
Сохраняем инфоблок, и на этом инфоблок для самой формы готов;
По желанию можно перейти в сам инфоблок и настроить отображение списка элементов, убрав оттуда лишние поля («название») и добавив некоторые опознавательные поля из формы. Можно перейти к добавлению нового элемента и там тоже зайти в «настройки» и поубирать всё лишнее, оставив единственную вкладку с полями:
Название (которое убрать нельзя, т.к. оно является обязательным);
Начало активности (чтобы видеть, когда была заполнена форма);
И наконец сами поля формы.
При этом в этих настройках желательно ставить галочку «установить данные настройки по умолчанию для всех пользователей», потому как вряд ли кому-то понадобится отличное отображение (если понадобится — поменяют), а тем более стандартное.
Теперь нужно создать инфоблок шаблонов e-mail писем, что является не обязательным, если нет нужды отправлять e-mail уведомления, — просто проигнорируйте дальнейшие инструкции и перейдите к «настройке компонента».
Переходим к типу инфобоков «формы» и создаём новый инфоблок, желательно с символьным кодом: «email_templates» (можно указать и другой символьный код, но этот будет определяться по-умолчанию в настройках компонента);
Устанавливаем название инфоблока, например: «Шаблоны E-Mail»;
Перейдите во вкладку «доступ» и поставьте «для всех пользователей» — «чтение»;
Во вкладке «поля» делаем поле «символьный код» обязательным с помощью галочки, а справа от него ставим галочку «проверять на уникальность»;
Перейдите во вкладку «свойства» и укажите там 4-е обязательных свойства:
Символьные коды должны быть именно такими, какими указаны в списке выше;
Сохраняем инфоблок.
Можно также настроить отображение списка элементов этого блока, убрав лишние и добавив что-нибудь из 4-ёх добавленных свойств, но определяющим на этот раз будет «название».
Переходим к добавлению нового элемента в этом инфоблоке, заходим в настройки отображения. Удаляем всё возможное, все лишние вкладки кроме одной. На этой одной вкладке оставляем следующие поля:
«Название»;
«Символьный код»;
«Детальное описание» (не обязательно, в нём можно оставлять вспомогательные комментарии, например список возможных хеш-тегов для автозамены);
«От кого»;
«Кому»;
«Тема письма»;
«Тело письма».
В зависимости от того, выберите вы тип «текст» или «HTML» для поля «тело письма», — будет зависеть тип отправляемого письма (Content-Type будет установлен в text/plain или text/html), данные полей будут соответствующим образом преобразованы.
Далее приведён список хеш-тегов автозамены:
#DOMAIN_NAME# — доменное имя сайта (например: domain.org);
#SITE_NAME# — наименование сайта, берётся из настроек сайта («администрирование» → «настройки» → «настройка продукта» → «сайты» → «список сайтов» → ваш сайт, в настройках которого имеется поле «название веб-сайта»);
#EMAIL_FROM# — адрес отправителя писем (устанавливается в настройках компонента);
#ADMIN_EMAIL# — адрес администратора, которому отправляются уведомления (устанавливается в настройках компонента);
#HIDDEN_COPY_ADMIN# — адрес для скрытой копии письма администратору (устанавливается в настройках компонента);
#HIDDEN_COPY_USER# — адрес для скрытой копии письма заполнившему форму (устанавливается в настройках компонента);
В остальном идут хеш-теги для полей формы следующего вида: #TITLE_code# — для названия поля, и #VALUE_code# — для значения поля, где «code» — символьный код поля (свойства инфоблока). ВНИМАНИЕ! Чувствительно к регистру! Если символьные коды полей были в нижнем регистре, то в хеш-тегах они указываются в нижнем регистре (что показано на примере с «code»).
Чтобы было понятнее, — рассмотрим пример шаблона уведомления администратору. Будем предполагать что в инфоблоке формы у нас имеются следующие свойства:
<h1>#SITE_NAME#</h1>
<h2>Данные формы</h2>
<dl>
<dt>#TITLE_name#</dt>
<dd>#VALUE_name#</dd>
<dt>#TITLE_email#</dt>
<dd>#VALUE_email#</dd>
<dt>#TITLE_message#</dt>
<dd>#VALUE_message#</dd>
</dl>
<p>Это письмо отправлено автоматически, отвечать на него не нужно. С вопросами обращаться по этому адресу: #ADMIN_EMAIL#</p>
Настройка компонента
Добавляем компонент на выбранную вами страницу, на всякий случай сбросив кеш компонентов (компонент находится в разделе «служебные» под именем «продвинутая форма»);
В разделе «инфоблок с результатами» выбираем инфоблок формы, можно снять галочку «сохранять результаты формы в инфоблок», если это не нужно, но сам инфоблок всё-равно нужно указывать (из него берутся поля формы);
В разделе «уведомления на e-mail» указываем e-mail адреса (если e-mail уведомления не нужны, просто ничего в этом разделе не трогаем), — отправителя писем, администратора, скрытые копии (если нужно). Все e-mail-ы, в т.ч. и в форме могут быть двух типов: простой e-mail адрес (например: vasia@domain.ru), и e-mail с указанием имени (например: Василий Иванов <vasia@domain.ru>, также можно указывать по нескольку адресов через запятую (за исключением отправителя и e-mail-а из формы, если убрана соответствующая галочка). Ниже выбираем инфоблок шаблонов e-mail писем и сами шаблоны;
В последнем разделе «дополнительные настройки» есть поле «уникальная „соль“ формы», — его лучше заполнять, хоть это и не обязательно. Обязательно в том случае, когда на одной странице находятся 2-е формы и более, тогда для каждой формы должна быть уникальная «соль», в которой могут быть совершенно произвольные символы (или например просто имя формы), в противном случае будут возникать конфликты форм при отправке данных;
Всё готово к использованию, вам разве что остаётся применить соответствующие вашему сайту CSS-стили, или кастомизировать шаблон компонента при необходимости.
Сергей, давайте будем честны сами с собой. Не все поддерживаются. А чем больше, тем лучше. Может именно этот начнёт развиваться постепенно. Вот здесь в блоге запись хороша только человеку для самообразования.
Кстати, забыл ему лайк поставить. Человек старался, кодил, на гитхаб выложил. Уважаю!
Сергей, да второй ИБ как-то проморгал, когда читал... Ну, я считаю, что лучше сделать плохо, чем не делать никак. Постепенно человек сделает лучше (если будет дорабатывать решение), мне кажется.
Тем полезнее пост, что вы отметили эту ошибку! Новички не только изучат решение, но и смогут понять какая в нём заложена проблема.
Емельянов Сергей, а вы как себе представляете без двух ИБ? Шаблоны складывать вместе с результатами формы? В отдельных разделах, но с общим набором свойств? Мне показалась такая тактика сбивающей с толку. Можно ли для разделов в ИБ выбрать отображение разного набора свойств?
Емельянов Сергей, переделать на 1 ИБ — нет проблем, только если есть такая возможность, для каждого раздела в открытом элементе иметь разный набор свойств.
Тут важно не забыть предусмотреть возможность создания новых свойств у инфоблока с результатами, чтобы в почтовое событие (и почтовый шаблон значит) положить его код.
Емельянов Сергей, вот это да! Просмотрел. «Почтовые события» с их «почтовыми шаблонами» есть оказывается во всех редакциях? Если во всех редакциях, — обязательно переделаю.
Задойный Алексей, так с этим никаких проблем нет. Новое свойство автоматически попадает в шаблон под #TITLE_code# и #VALUE_code#, — где «code» — символьный код свойства. Или что вы имеете в виду «положить его код»? Автоматическую вставку в шаблон? Думаю это будет лишним и неоднозначным. Те же «веб-формы» так себя не ведут.
Чтобы была возможность использовать свойство в шаблоне письма его сперва нужно добавить в тип почтового события. иначе вызывай, не вызывай - ничего не произойдёт ))
Задойный Алексей, никогда не пробовал работать с почтовыми событиями, но полагаю можно просто вытащить значения полей почтового шаблона, а там замену хеш-тегов производить самому.
Задойный Алексей, подскажите, а возможна ли регистрация в этом «макете» без участия в бумажной бюрократии, которую мне там предлагают, и без подписания договоров о продаже почек «о партнёрстве»?
Партнёрский договор может заключить физ лицо. Это не очень афишируется, но это реально. От вас не требуются ни планы продажи, ни почки. Соответственно в макете тоже можно публиковать БЕСПЛАТНЫЕ решения физ лицу (отдельный договор, который без особых проблем с почками можно заключить).
По предыдущему. Тут у одного комрада на форуме есть классная подпись про сверление зубов дрелью от Сваровски через задний проход. =)
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».