Добавление информации в письма с формы обратной связи — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
(Решение)
 
(не показаны 4 промежуточные версии этого же участника)
Строка 1: Строка 1:
 
'''Актуально для версии 20'''
 
'''Актуально для версии 20'''
  
Иногда возникают ситуации, когда нам необходимо передать из формы обратной связи какие-либо данные, которые нужны нам, но для пользователя не должны быть видны. Для примера мы рассмотрим добавление информации о домене, с которого была отправлена форма.
+
== Задача ==
 +
Передать из формы обратной связи какие-либо данные, которые нужны нам, но для пользователя не должны быть видны.  
  
<ul>
+
== Решение ==
<li>1. Создаём в модуле "Шаблоны данных" в типе данных "Форма обратной связи" новую группу полей, назовём её "Дополнительная информация".</li>
+
Для примера мы рассмотрим добавление информации о домене, с которого была отправлена форма.
<li>2. В созданной группе полей создаём поле под названием "Информация", с идентификатором info и типом "Простой текст". Поле не должно быть видимым, поэтому галочку на "Видимое" мы не ставим:
+
 
 +
<ol>
 +
<li> Создаём в модуле "Шаблоны данных" в типе данных "Форма обратной связи" новую группу полей, назовём её "Дополнительная информация".</li>
 +
<li> В созданной группе полей добавляем поле под названием "Информация", с идентификатором info и типом "Простой текст". Поле не должно быть видимым, поэтому галочку на "Видимое" мы не ставим:
 
</li>
 
</li>
 
[[Файл:Info.png]]
 
[[Файл:Info.png]]
<li>3. Теперь нам нужно создать [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/naznachenie_obrabotchika_sobytiya/ обработчик события] отправки сообщения  [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/standartnye_tochki_vyzova/#sel=20:164,20:164 webforms_post]. Для этого создадим в папке '''~/classes/components/webforms файл custom_events.php''' и напишем там следующий код:
+
<li> Теперь нам нужно создать [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/naznachenie_obrabotchika_sobytiya/ обработчик события] создания сообщения  [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/standartnye_tochki_vyzova/#sel=21:1,21:1 webforms_create_message]. Для этого создадим в папке '''~/classes/components/webforms''' файл custom_events.php и напишем там следующий код:
 
<source lang="php">
 
<source lang="php">
 
<?php
 
<?php
new umiEventListener("webforms_post", "webforms", "onSendMessage");
+
new umiEventListener("webforms_create_message", "webforms", "onCreateMessage");
 
?>
 
?>
 
</source>
 
</source>
 
</li>
 
</li>
 
<li>
 
<li>
4. После того, как мы назначили обработчик, нам надо [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/pishem_obrabotchik_sobytiya/ написать его код]. Код нашего обработчика будет следующим:
+
После того, как мы назначили обработчик, нам надо [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/sobytijnaya_model_umicms/pishem_obrabotchik_sobytiya/ написать его код]. Код нашего обработчика будет следующим:
 
<source lang="php">
 
<source lang="php">
public function onSendMessage(iUmiEventPoint $oEventPoint)
+
public function onCreateMessage(iUmiEventPoint $oEventPoint)
{
+
{
$id = $oEventPoint->getParam('message_id');
+
if ($oEventPoint->getMode() != "after") {
 +
  return;
 +
}
 +
 +
 +
$id = $oEventPoint->getParam('messageId');
 
$sel = new selector('objects');
 
$sel = new selector('objects');
 
$sel->where('id')->equals($id);
 
$sel->where('id')->equals($id);
 
$res = $sel->result();
 
$res = $sel->result();
+
 
$message = $res[0];
 
$message = $res[0];
        $message->setValue('info', $_SERVER['SERVER_NAME']);
+
$message->setValue('info', $_SERVER['SERVER_NAME']);
 
$message->commit();
 
$message->commit();
 
}
 
}
Строка 34: Строка 43:
 
В предпоследней строке кода мы присваиваем полю info какое-либо значение. В нашем примере это текущий домен, с которого отправлена форма, но Вы можете добавлять туда любое нужное Вам значение.
 
В предпоследней строке кода мы присваиваем полю info какое-либо значение. В нашем примере это текущий домен, с которого отправлена форма, но Вы можете добавлять туда любое нужное Вам значение.
 
</li>
 
</li>
<li>5. Все необходимые шаги выполнены, и теперь осталось только добавить вывод нашего поля info в письмах, которые приходят с формы. Для этого мы заходим в модуль "Конструктор форм", вкладка "Шаблоны писем" и выбираем нужный нам шаблон. В шаблоне нам нужно только прописать макрос для вывода поля - %info%. </li>
+
<li> Все необходимые шаги выполнены, и теперь осталось только добавить вывод нашего поля info в письмах, которые приходят с формы. Для этого мы заходим в модуль "Конструктор форм", вкладка "Шаблоны писем" и выбираем нужный нам шаблон. В шаблоне нам нужно только прописать макрос для вывода поля - %info%. </li>
</ul>
+
[[Файл:Template.png]]
 +
</ol>
 
<br>
 
<br>
 
На этом все необходимые действия завершены и теперь при отправке формы, помимо данных, введённых пользователем, мы будем получать какую-то дополнительную информацию, нужную нам.
 
На этом все необходимые действия завершены и теперь при отправке формы, помимо данных, введённых пользователем, мы будем получать какую-то дополнительную информацию, нужную нам.
  
 
  [[category:Модуль Обратная связь]]
 
  [[category:Модуль Обратная связь]]

Текущая версия на 10:57, 24 мая 2019

Актуально для версии 20

Задача

Передать из формы обратной связи какие-либо данные, которые нужны нам, но для пользователя не должны быть видны.

Решение

Для примера мы рассмотрим добавление информации о домене, с которого была отправлена форма.

  1. Создаём в модуле "Шаблоны данных" в типе данных "Форма обратной связи" новую группу полей, назовём её "Дополнительная информация".
  2. В созданной группе полей добавляем поле под названием "Информация", с идентификатором info и типом "Простой текст". Поле не должно быть видимым, поэтому галочку на "Видимое" мы не ставим:
  3. Info.png

  4. Теперь нам нужно создать обработчик события создания сообщения webforms_create_message. Для этого создадим в папке ~/classes/components/webforms файл custom_events.php и напишем там следующий код:
    <?php
    	new umiEventListener("webforms_create_message", "webforms", "onCreateMessage");
    ?>
    
  5. После того, как мы назначили обработчик, нам надо написать его код. Код нашего обработчика будет следующим:
    public function onCreateMessage(iUmiEventPoint $oEventPoint)
    {	
    	if ($oEventPoint->getMode() != "after") {
    	   return;
    	}
    						
    			
    	$id = $oEventPoint->getParam('messageId');
    	$sel = new selector('objects');
    	$sel->where('id')->equals($id);
    	$res = $sel->result();
    					
    	$message = $res[0];
    	$message->setValue('info', $_SERVER['SERVER_NAME']);
    	$message->commit();
    }
    

    Этот код необходимо разместить в файле ~/classes/components/webforms/customMacros.php В предпоследней строке кода мы присваиваем полю info какое-либо значение. В нашем примере это текущий домен, с которого отправлена форма, но Вы можете добавлять туда любое нужное Вам значение.

  6. Все необходимые шаги выполнены, и теперь осталось только добавить вывод нашего поля info в письмах, которые приходят с формы. Для этого мы заходим в модуль "Конструктор форм", вкладка "Шаблоны писем" и выбираем нужный нам шаблон. В шаблоне нам нужно только прописать макрос для вывода поля - %info%.
  7. Template.png


На этом все необходимые действия завершены и теперь при отправке формы, помимо данных, введённых пользователем, мы будем получать какую-то дополнительную информацию, нужную нам.