Обзоры расширений Joomla

 

 

RSForm Pro – русскоязычный, многофункциональный и гибко настраиваемый компонент для создания форм на сайтах Joomla. В предыдущей статье «Инструкция 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».

Получение 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/» (так как сайт находится на локальном сервере).

RSForm Joomla 3
RSForm Joomla 3

Информацию о 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;» – максимальное количество чекбоксов, которое можно выбрать (в моём примере – два).

Чтобы изменить текст сообщения об ошибке, которое появляется рядом с полем группы чекбоксов в случае превышения количества выбранных чекбоксов, перейдите в настройки поля тип Группа чекбоксов и на вкладке Проверка выберите для опции ОбязательноеДа. После этого в поле Сообщение проверки введите нужный Вам текст (рисунок ниже). Сохраните изменения. Если поле группы чекбоксов не должно быть обязательным, то вернитесь в его настройки и выберите Нет для опции Обязательное. При этом, текст сообщения об ошибке всё равно будет тем, который Вы задали.

Joomla RSForm Pro
Joomla RSForm Pro

Правило проверки уникальности адреса 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» (рисунок ниже).

RSForm Pro Joomla 3
RSForm Pro Joomla 3

Можете также указать соответствующий текст сообщения проверки.

Сравнение данных в двух полях

Рассмотрим пример, когда Вам нужно сверить введённые значения в двух разных полях. Например, сравнить два поля тип Текстовое поле, в которые пользователь должен будет дважды ввести свой адрес электронной почты (для проверки). Первое с названием «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». В элементах поля группы чекбоксов указано только одно значение «Да» (без кавычек) (рисунок ниже).

com RSForm
com RSForm

В свойствах формы в разделе 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.

Ошибки и проблемы.

 

Капча, reCaptcha.

 

E-mail/письма и отправка.

 

URL (параметры, перенаправления, получение адреса).

 

Календарь.

 

Прикрепляемы\загружаемые файлы.

 

Страница отправленных данных во фронтальной части сайта.

 

Многостраничная форма.

 

Проверка, условия, лимиты\ограничения.

 

Разное.

Видео-инструкция по 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, Rutube и Mail.ru.

 

Полезные ссылки:

При скачивании файлов менеджерами загрузок возможны проблемы.
ФайлОписаниеРазмер
Скачать этот файл (primer-form-s-sajta-aleksius-com-6.zip)Примеры форм RSForm Pro К статье «Инструкция RSForm Pro (часть 6)»11 Кб