- Видео-инструкция по RSForm Pro.
- Получение URL страницы перехода на форму.
- Получение URL страницы формы.
- Получение заголовка страницы формы.
- Ограничения отправляемых данных формы.
- Ограничение количества выбранных чекбоксов.
- Правило проверки уникальности адреса e-mail.
- Сравнение данных в двух полях.
- Чекбокс «Отправьте мне копию».
- Список ответов на часто задаваемые вопросы.
RSForm Pro – русскоязычный, многофункциональный и гибко настраиваемый компонент для создания форм на сайтах Joomla.
Видео-инструкция по RSForm Pro
- Получение URL страницы перехода на форму – с 00:00.
- Получение URL страницы формы – с 02:30.
- Получение заголовка страницы формы – с 04:02.
- Отображение количества отправленных данных в сообщении о благодарности – с 05:33.
- Ограничения по количеству отправляемых данных с одной формы на одного пользователя (с привязкой по имени пользователя или ID учётной записи) – с 07:16
- Ограничения по количеству отправляемых данных с одной формы на одного пользователя (с привязкой по IP адресу) – с 09:38.
- Ограничения по количеству отправляемых данных с одной формы (с учётом общего количества отправок, без привязки к пользователям или IP) – с 10:42.
- Ограничение количества выбранных чекбоксов – с 11:38.
- Правило проверки уникальности адреса e-mail – с 13:37.
- Сравнение данных в двух полях – с 15:22.
- Чекбокс «Отправьте мне копию» – с 16:50.
Видео лучше просматривать с качеством 720 HD. Этот и другие видео уроки Вы можете найти на каналах сайта Aleksius.com в YouTube и Mail.ru.
В предыдущей статье «Инструкция RSForm Pro (часть 5). Календарь, регистрация, обратная связь» мы рассматривали часто задаваемые вопросы касательно настройки компонента, в этой части остановимся на вопросе получения данных о страницах и ограничениях отправляемых данных.
В данной инструкции рассмотрена последняя, на момент её написания (23.08.2017), русскоязычная версия RSForm Pro 1.52.14, Joomla 3.7.5. Шаблон фронтальной части сайта – RSBaraka 1.0.3, шаблон административной части сайта – Isis 1.0.0.
Внизу данной статьи, над комментариями, находится архив с примерами из этой инструкции, которые можно импортировать на свой сайт при помощи раздела Архивация / Восстановление в компоненте RSForm Pro. Нужно извлечь скачанный Вами ZIP-архив и загружать себе в RSForm архив в формате «.tar».
- Купить RSForm Pro. Обновление и техническая поддержка на 12 месяцев для одного сайта.
- Купить RSForm Pro. Обновление и техническая поддержка на 6 месяцев для нескольких сайтов.
- Купить RSForm Pro. Обновление и техническая поддержка на 12 месяцев для нескольких сайтов.
Получение URL страницы перехода на форму
Рассмотрим вариант получения URL адреса страницы сайта с которой пользователь перешёл на форму (при условии, что он отправил данные). Например, есть страница с адресом «http://vash-sajt.com/kategoriya/podkategoriya/stranitsa-a». На этой странице есть ссылка на страницу с Вашей формой. У страницы с Вашей формой URL адрес такой: «http://vash-sajt.com/kategoriya/podkategoriya/stranitsa-s-formoj». Так вот, после отправки данных с формы, находящейся по адресу «http://vash-sajt.com/kategoriya/podkategoriya/stranitsa-s-formoj», Вы получите адрес страницы перехода, то есть – «http://vash-sajt.com/kategoriya/podkategoriya/stranitsa-a». Для этого создайте поле тип Скрытое поле. В его настройках в поле Значение по умолчанию введите следующий код:
//<code>
if(isset($_POST['form']['skrytoe'])){
return $_POST['form']['skrytoe'];
}else{
return $_SERVER['HTTP_REFERER'];
}
//</code>Где «skrytoe» – название Вашего скрытого поля.
После отправки пользователем данных из формы, в разделе Управление предоставленными данными (в Компоненты – RSForm! Pro), Вы сможете увидеть адрес страницы перехода на форму (рисунок ниже). В моём примере это «http://rsform/» (так как сайт находится на локальном сервере).
Информацию о URL перехода можно добавить и в письма. Например, в свойствах формы в разделе E-mail администраторов в тексте письма можно использовать заполнитель: «{skrytoe:value}» (без кавычек). Вместо «skrytoe» – введите название Вашего скрытого поля.
Не уверен, что данный способ будет работать с сайтами, которые не используют мета-тег «referrer» и работают по защищённому протоколу HTTPS.
Получение URL страницы формы
Рассмотрим вариант получения URL адреса страницы сайта с формой (при условии, что он отправил данные). Это похоже на вышеописанный способ.
Например, у страницы с Вашей формой URL адрес такой «http://vash-sajt.com/kategoriya/podkategoriya/stranitsa-s-formoj». Так вот после отправки данных с формы, находящейся по адресу «http://vash-sajt.com/kategoriya/podkategoriya/stranitsa-s-formoj» Вы получите адрес этой страницы, то есть – «http://vash-sajt.com/kategoriya/podkategoriya/stranitsa-s-formoj». Это может быть полезно тогда, когда одна и та же форма отображается на нескольких страницах сайта (при помощи плагина или модуля). Так Вы сможете узнать, с какой именно страницы были отправлены данные с формы.
Создайте поле тип Скрытое поле. В его настройках в поле Значение по умолчанию введите следующий код:
//<code>
$url = RSFormProHelper::getURL();
return $url;
//</code>После отправки пользователем данных из формы, в разделе Управление предоставленными данными (в Компоненты – RSForm! Pro), Вы сможете увидеть URL формы.
Информацию о URL формы можно добавить и в письма (или в сообщение о благодарности). Например, в свойствах формы в разделе E-mail администраторов в тексте письма можно использовать заполнитель: «{skrytoe:value}» (без кавычек). Вместо «skrytoe» – введите название Вашего скрытого поля.
Получение заголовка страницы формы
Рассмотрим, как можно получить мета-заголовок (Title) страницы, с которой были отправлены данные через форму. Это может быть полезно тогда, когда одна и та же форма отображается на нескольких страницах сайта (при помощи плагина или модуля), а в заголовках страниц указаны, например, наименования товаров. Как-то делал форму заказа товара в «интернет-магазине», и таким образом получилось вставлять в письма, приходящие менеджеру, сразу название товара, а не его URL.
Создайте поле тип Скрытое поле. В его настройках в поле Значение по умолчанию введите следующий код:
//<code>
$doc = JFactory::getDocument();
return $doc->getTitle();
//</code>После отправки пользователем данных из формы, в разделе Управление предоставленными данными (в Компоненты – RSForm! Pro), Вы сможете увидеть заголовок страницы формы. Его можно добавить и в письма (или в сообщение о благодарности). Например, в свойствах формы в разделе E-mail администраторов в тексте письма можно использовать заполнитель: «{skrytoe:value}» (без кавычек). Вместо «skrytoe» – введите название Вашего скрытого поля.
Ограничения отправляемых данных формы
Пример №1. Отображение количества отправленных данных в сообщении о благодарности. Рассмотрим пример, когда каждому пользователю будет показано в сообщении о благодарности количество ранее отправленных данных.
Создайте поле тип Скрытое поле с названием «schjotchik» (без кавычек).
В свойствах формы в разделе PHP скрипты в поле Скрипт, вызываемый при обработке формы вставьте следующий код:
$db = JFactory::getDbo();
$db->setQuery("SELECT COUNT(`SubmissionId`) FROM #__rsform_submissions WHERE FormId='".(int) $formId."'");
$_POST['form']['schjotchik'] = $db->loadResult()+1;Не забудьте заменить «schjotchik» на название своего скрытого поля.
Значение этого поля можно добавить и в письма (или в сообщение о благодарности). Например, в свойствах формы в разделе E-mail администраторов в тексте письма можно использовать заполнитель: «{schjotchik:value}» (без кавычек). Вместо «schjotchik» – введите название Вашего скрытого поля.
Пример №2. Ограничения по количеству отправляемых данных с одной формы на одного пользователя (с привязкой по имени пользователя или ID учётной записи). Отмечу, что это работает только тогда, когда форма доступна только для зарегистрированных пользователей.
В свойствах формы на вкладке PHP скрипты в поле Скрипт, вызываемый при отображении формы вставьте следующий код:
// Задаёт максимальное количество раз, которое пользователь может отправлять данные.
$max = 1;
// Получает данные о текущем вошедшем пользователе.
$user = JFactory::getUser();
// Подключение к базе данных.
$db = JFactory::getDbo();
$query = $db->getQuery(true);
// Настройка очереди.
$query->select('COUNT('.$db->qn('Username').')')
->from($db->qn('#__rsform_submissions'))
->where($db->qn('FormId').'='.$db->q($formId))
->where($db->qn('Username').'='.$db->q($user->get('username')));
// Также Вы можете идентифицировать пользователей по ID. Просто замените строку выше на эту:
// ->where($db->qn('UserId').'='.$db->q($user->get('id')));
$db->setQuery($query);
$counter = $db->loadResult();
if ($counter >= $max){
$formLayout = 'Извините, но Вы уже отправляли данные из этой формы.';
}Где «$max = 1;» – количество раз, которое пользователь может отправить данные через форму. В моём примере это один раз.
Можно привязываться не к имени пользователя, а к ID его учётной записи. Тогда код будет таким:
// Задаёт максимальное количество раз, которое пользователь может отправлять данные.
$max = 1;
// Получает данные о текущем вошедшем пользователе.
$user = JFactory::getUser();
// Подключение к базе данных.
$db = JFactory::getDbo();
$query = $db->getQuery(true);
// Настройка очереди.
$query->select('COUNT('.$db->qn('Username').')')
->from($db->qn('#__rsform_submissions'))
->where($db->qn('FormId').'='.$db->q($formId))
->where($db->qn('UserId').'='.$db->q($user->get('id')));
// Также Вы можете идентифицировать пользователей по его имени. Просто замените строку выше на эту:
// ->where($db->qn('Username').'='.$db->q($user->get('username')));
$db->setQuery($query);
$counter = $db->loadResult();
if ($counter >= $max){
$formLayout = 'Извините, но Вы уже отправляли данные из этой формы.';
}
Пример №3. Ограничения по количеству отправляемых данных с одной формы на одного пользователя (с привязкой по IP адресу). Учитывая, что с одного IP адреса могут выходить разные люди, то это ограничение стоит применять с осторожностью.
В свойствах формы на вкладке PHP скрипты в поле Скрипт, вызываемый при отображении формы вставьте следующий код:
// Задаёт максимальное количество раз, которое пользователь может отправлять данные.
$max = 3;
// Получение IP-адреса.
$ip = $_SERVER['REMOTE_ADDR'];
// Get the database connection.
$db = JFactory::getDbo();
// Setup the query.
$db->setQuery("SELECT COUNT(`UserIp`) FROM `#__rsform_submissions`
WHERE `UserIp`='".$db->escape($ip)."'
AND `FormId`='".(int) $formId."'");
$counter = $db->loadResult();
if ($counter >= $max){
$formLayout = 'Извините, но Вы уже отправляли данные из этой формы.';
}Где «$max = 3;» – количество раз, которое пользователь может отправить данные через форму. В моём примере это три раза.
Пример №4. Ограничения по количеству отправляемых данных с одной формы (с учётом общего количества отправок, без привязки к пользователям или IP). Учитывается количество отправленных данных в разделе Управление предоставленными данными (в Компоненты – RSForm! Pro).
В свойствах формы на вкладке PHP скрипты в поле Скрипт, вызываемый при отображении формы вставьте следующий код:
// Define the maximum number of submissions. For this example we'll use 50.
$max = 2;
// Get a database connection.
$db = JFactory::getDbo();
// Setup the query. This query counts the number of submissions for the current form.
// $formId contains the ID of the current form.
$db->setQuery("SELECT COUNT(`SubmissionId`) FROM #__rsform_submissions WHERE `FormId`='".(int) $formId."'");
$submissions = $db->loadResult();
if ($submissions >= $max) {
$formLayout = 'Извините, но больше нельзя отправлять данные через эту форму.';
}Где «$max = 2;» – количество раз, которое пользователи могут отправить данные через форму. В моём примере это два раза.
Ограничение количества выбранных чекбоксов
Рассмотрим ситуацию, когда из группы чек боксов можно выбрать не более 2-х чекбоксов (из 4-х).
Подразумевается, что у Вас уже есть поле тип Группа чекбоксов с названием «varianti». В свойствах формы на вкладке PHP скрипты в поле Скрипт, вызываемый при обработке формы вставьте следующий код:
// Замените variant на название (не Подпись) Вашего поля Группа чекбоксов.
$checkbox = 'varianti';
// Задаёт максимальное количество выбранных чекбоксов.
$max = 2;
// Проверка отправляемых данных на соответствие лимитам.
if (count($_POST['form'][$checkbox]) > $max) {
// $invalid это массив содержащий ID полей, которые не прошли проверку.
$invalid[] = RSFormProHelper::getComponentId($checkbox);
}Где «varianti» – название поля группы чекбоксов, «$max = 2;» – максимальное количество чекбоксов, которое можно выбрать (в моём примере – два).
Чтобы изменить текст сообщения об ошибке, которое появляется рядом с полем группы чекбоксов в случае превышения количества выбранных чекбоксов, перейдите в настройки поля тип Группа чекбоксов и на вкладке Проверка выберите для опции Обязательное – Да. После этого в поле Сообщение проверки введите нужный Вам текст (рисунок ниже). Сохраните изменения. Если поле группы чекбоксов не должно быть обязательным, то вернитесь в его настройки и выберите Нет для опции Обязательное. При этом, текст сообщения об ошибке всё равно будет тем, который Вы задали.
Правило проверки уникальности адреса e-mail
Рассмотрим ситуацию, когда у Вас есть поле формы с вводом e-mail адреса и Вам нужно проверять, чтобы вновь вводимые e-mail адреса не совпадали с теми, что уже есть в перечне отправленных данных для этой формы. По умолчанию, в com RSForm нет такого правила проверки. Чтобы его создать, перейдите по FTP в папку с Вашим сайтом в «/components/com_rsform/helpers/» и создайте там файл «customvalidation.php». Он должен содержать следующий код:
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
require_once dirname(__FILE__).'/validation.php';
class RSFormProCustomValidations extends RSFormProValidations
{
public static function Proverka_pochty($value, $extra = null, $data = null) {
// The following will check if the current value is indeed an email
if (!self::email($value, $extra, $data)) {
return false;
}
// The following will check if the current value is unique (never submitted within that form)
return self::uniquefield($value, $extra, $data);
}
}Где «Proverka_pochty» название правила проверки.
Перейдите в свою форму, если она открыта, обновите страницу. Перейдите в настройки поля e-mail (тип Текстовое поле) и на вкладке Проверка в спадающем списке Правило проверки выберите созданное Вами правило «Proverka_pochty» (рисунок ниже).
Можете также указать соответствующий текст сообщения проверки.
Сравнение данных в двух полях
Рассмотрим пример, когда Вам нужно сверить введённые значения в двух разных полях. Например, сравнить два поля тип Текстовое поле, в которые пользователь должен будет дважды ввести свой адрес электронной почты (для проверки). Первое с названием «pochta», а второе – «podtverdite-pochtu».
Создайте два поля тип Текстовое поле и кнопку отправки. В настройках кнопки отправки на вкладке Атрибуты в поле Дополнительные атрибуты введите следующий код:
onclick="return checkEmail('pochta', 'podtverdite-pochtu');"Где «pochta» и «podtverdite-pochtu» названия сравниваемых текстовых полей.
Перейдите в свойства формы в раздел CSS и Javascript и в поле Javascript введите следующий код:
<script type="text/javascript">
function checkEmail(theForm)
{
if (document.getElementById('pochta').value != document.getElementById('podtverdite-pochtu').value)
{
alert('Адреса электронной почты не совпадают!');
return false;
}
else {
return true;
}
}
</script>Где «pochta» и «podtverdite-pochtu» названия сравниваемых текстовых полей, а «Адреса электронной почты не совпадают!» – текст, который появится в случае несовпадения введённых значений. Его RSForm Joomla 3 покажет во всплывающем окошке после нажатия на кнопку отправки.
Этот пример применим не только к почте, но и к любым вводимым данным.
Чекбокс «Отправьте мне копию»
Рассмотрим ситуацию, когда пользователю на почту придёт письмо с отправленными данными (или другим содержимым) только если он выберет соответствующее поле на форме.
Предполагается, что форма уже есть. Там должно быть поле для ввода адреса электронной почты, в моём примере его название «email». Также нужно создать поле тип Группа чекбоксов, в моём примере его название «otpravte-mne-kopiyu». В элементах поля группы чекбоксов указано только одно значение «Да» (без кавычек) (рисунок ниже).
В свойствах формы в разделе PHP E-mail скрипты в поле Скрипт, вызываемый до отправки письма пользователю вставьте следующий код:
if ($_POST['form']['otpravte-mne-kopiyu'][0]=='Да')
{
$userEmail['to']=$_POST['form']['email'];
}Где «otpravte-mne-kopiyu» – название поля группы чекбоксов, «Да» – значение поля группы чекбоксов при котором будет срабатывать отправка, «email» (маленькими буквами) – название поля адреса электронной почты пользователя, на которую будет отправлено письмо.
Также перейдите в свойства формы в раздел E-mail пользователей и проверьте, чтобы для поля Кому (в области Получатель) ничего не было указанно.
Список ответов на часто задаваемые вопросы
Для удобства поиска перечислю все вопросы и ответы, рассмотренные в этой и предыдущих статьях о компоненте RSForm Pro Joomla 3.
Ошибки и проблемы.
- Не работает форма при включённом кэше.
- По нажатию на кнопку отправки ничего не происходит.
- Не работает AJAX проверка.
- Не работает правило проверки «Регулярное выражение».
- Ошибка «Could not instantiate mail function» при отправке формы.
- Ошибка «JFolder::create: Could not create directory».
- Ошибка «Language string failed to load: invalid_address».
- Ошибка «Пожалуйста, укажите название Вашего поля».
- Ошибка при создании меню панели управления.
- Поля на форме не отображаются на сайте.
- Проблема с кодировкой в CSV файле.
- Проблемы при обновлении до новой версии RSForm Pro.
- Проблемы с отправкой формы в Internet Explorer 9.
- Пустая страница при редактировании формы.
Капча, reCaptcha.
E-mail/письма и отправка.
- Данные из формы не приходят по e-mail.
- Не отправляется e-mail.
- В моём поле e-mail содержится скрипт.
- Не работает отправка писем в Joomla 3.2.0.
- Удаление незаполненных полей из писем.
- Необходимо указать хотя бы одного получателя электронной почты.
- Несколько получателей писем или получатели, основываясь на выборе.
- Как включить подтверждение при отправке.
- Чекбокс «Отправьте мне копию».
URL (параметры, перенаправления, получение адреса).
- Как передать параметр через URL.
- Перенаправление после отправки данных.
- Как задать страницу перенаправления, основываясь на выборе пользователя.
- Получение URL страницы перехода на форму.
- Получение URL страницы формы.
Календарь.
- Изменение первого дня недели календаря.
- Изменение формата даты календаря.
- Запрет выбора конкретных дат в календаре.
- Ограничение выбора даты в календаре.
- Отключение суббот и воскресений в календаре.
- Выбор дат «с» и «по» в зависимых календарях.
- Вычисление разницы в днях между двумя полями календаря.
Прикрепляемы\загружаемые файлы.
- Не загружаются файлы на сервер.
- Проблема с прикреплением файлов к письмам.
- Префикс загружаемого файла.
- Загруженное изображение в сообщении о благодарности.
Страница отправленных данных во фронтальной части сайта.
- Как добавить кнопку печати на страницу просмотра отправленных данных.
- Ссылка на профиль пользователя в Community Builder.
Многостраничная форма.
- Как создать многостраничную форму.
- Прокрутка вверх многостраничной формы.
- Стиль кнопок разделителя страниц.
Проверка, условия, лимиты\ограничения.
- Правила проверки дополнительных символов.
- Ограничение количества выбранных чекбоксов.
- Ограничения отправляемых данных формы.
- Правило проверки уникальности адреса e-mail.
- Сравнение данных в двух полях.
Разное.
- Форма в модальном\всплывающем окне (lightbox).
- Подпись в качестве значения по умолчанию.
- Модификация сообщения о незаполненном поле RSForm.
- Форма обратной связи.
- Форма регистрации.
- Как убрать заголовок формы.
- Получение заголовка страницы формы.
- Динамическое изменение выпадающего списка.
- Добавление всплывающих подсказок.
- Прокрутка страницы к форме при ошибке ввода.
- Добавление появляющегося изображения при отправке формы.
- Добавление условий и терминов.
- Код отслеживания Google (AdWords).
- Настройка условий для группы полей.
- Операции с датами.
- Работа с полем Выбор даты и времени.
- Улучшение экспорта отправленных данных в PDF.
- Миграция форм RSForm Pro с Joomla 1.5 на Joomla 3.
| Похожие материалы |
|---|
| Автор статьи – Хорошевский Алексей |
|---|
Кандидат технических наук, преподаватель Харьковского национального университета радиоэлектроники, веб-мастер и SEO-оптимизатор с опытом более 15 лет. Специалист по созданию сайтов на Joomla и WebSite X5. Автор научных публикаций, видеокурсов и обучающего контента по веб-разработке и SEO. Ведёт блог и YouTube-канал, где делится своими знаниями и практическим опытом. Предоставляет услуги по созданию, доработке, сопровождению и продвижению сайтов. Подробнее об авторе… Публикации и работа: |
Полезные ссылки:
- Купить RSForm Pro. Обновление и техническая поддержка на 12 месяцев для одного сайта.
- Купить RSForm Pro. Обновление и техническая поддержка на 6 месяцев для нескольких сайтов.
- Купить RSForm Pro. Обновление и техническая поддержка на 12 месяцев для нескольких сайтов.
| Скачать файл | Описание |
|---|---|
| zip Примеры форм RSForm Pro | К статье «Инструкция RSForm Pro (часть 6)» |


