Как добавить форму обратной связи (или любую другую форму для заполнения)?
Во-первых, нужно создать под неё инфоблок. Например, нам требуется о человеке Имя, e-mail и собственно текст его сообщения.
Создаём инфоблок с полями Имя (name) типа строка, E-mail (mail) типа строка и Текст (text) типа текст. Создаём там тестовый элемент.
Далее создаём стандартную страницу "Создать элемент". Шаблон назовём (например) send_text, файл назовём send.php. Нажмём "Перейти к следующему шагу".
Переименуем массив в "query_create". Выберем галочку "включить капчу", если нам это требуется (допустим, требуется). Сообщение об успешной отправке - (например) "Ваш запрос отправлен менеджеру!". Далее выбираем поля, требуемые для ввода, и нажимаем "Завершить создание". Готово! Нажмите "Просмотреть страницу", и Вы увидите результат. При вводе данных новые данные попадают в административную панель в соответствующий инфоблок.
При попытке ввести данные Вы увидите, что новые данные вводятся неактивными (красная точка рядом с данными в админке). Если Вы хотите видеть новые данные сразу активными, то в контроллере в строчке
$AllValues["news_create"]["new_id"]=Create_News($AllValues["news_create"]["block_id"],$_POST,$_FILES,0);
необходимо сменить 0 на 1 (в комментариях к этой строчке в самом контроллере об этом тоже написано).
Если Вы хотите параллельно с записью в базу отправлять эти запросы себе на e-mail, то Вы можете воспользоваться функцией mail. Например, Вам доступен следующий код:
$mail="Ваш e-mail, на который придёт письмо"; //Исправьте эту строчку в соответствии с Вашим e-mail
$title="Заголовок письма"; //Исправьте эту строчку в соответствии с Вашим заголовком письма
$body="Текст письма"; //Исправьте эту строчку в соответствии с Вашим текстом письма
$headers= "MIME-Version: 1.0
Content-type: text/html; charset=windows-1251
From: Ваш сайт "; //Исправьте конец строчки - поставьте e-mail отправителя, например, сюда можно подставить любой e-mail с Вашего сайта
/*Далее служебные строчки*/
$title="=?windows-1251?B?".base64_encode($title)."?=";
mail($mail,$title,$body,$headers);
Вставить этот код нужно как раз после строки в контроллере
$AllValues["news_create"]["new_id"]=Create_News($AllValues["news_create"]["block_id"],$_POST,$_FILES,0);
которая добавляет данные в админку.
Если Вы хотите устроить проверку каких-либо данных и выводить сообщение об ошибке, если данные некорректны, то Вам нужно сделать вот что.
В контроллере есть следующие строчки:
$AllValues["news_create"]["errors"]=Array();
//Здесь можно разместить проверку выражений, набить массив ошибками. Если массив непуст, то значения сохранятся, кроме загруженных изображений и файлов.
if(!Captcha_Check($_POST["captcha"],$_POST["captcha_check"])){$AllValues["news_create"]["errors"][]="Неверно введено слово с картинки!";}
Последняя строчка есть только в том случае, если Вы выбрали использование капчи. Но есть ли она - неважно. После строчки
//Здесь можно разместить проверку выражений, набить массив ошибками. Если массив непуст, то значения сохранятся, кроме загруженных изображений и файлов.
можно разместить проверку введённых данных. Ошибки хранятся в массиве $AllValues["news_create"]["errors"]; для того, чтобы вернуть человека снова к ошибочно заполненной форме, достаточно создать там хотя бы один элемент. Структура записи такова:
if(условие неверно){$AllValues["news_create"]["errors"][]="Текст ошибки";}
Например, если мы хотим проверить, ввёл ли пользователь данные в поле Имя (name), нам необходимо написать следующее:
if($_POST["name"]!=""){$AllValues["news_create"]["errors"][]="Не введено имя!";}
А если мы хотим проверить валидность e-mail, то мы напишем:
if(!preg_match("/^[a-z0-9.-_]{2,}@[a-z0-9.-_]{2,}.[a-z]{2,6}$/",$_POST["mail"])){$AllValues["news_create"]["errors"][]="Некорректно введён e-mail!";}
Если Вы хотите записывать в базу некоторые не зависящие от пользователя данные, то Вам необходимо будет внести нужные данные перед строкой контроллера
//Добавляем значения, если пользователь вводит не всё.
в массив $_POST. Например, если у нас есть необходимость отдельно хранить первую букву имени пользователя (для поиска) в поле first_letter, то нужно написать
$_POST["first_letter"]=$_POST["name"][0];
А если нам требуется ввести дату в поле date, то нам требуется инициализировать 3 поля - date_y (год), date_m (месяц), date_d (день) (поскольку именно в таком виде дата передаётся стандартному обработчику. Это распространяется также на поле datetime (там 6 полей - date_y (год), date_m (месяц), date_d (день), date_h (часов), date_m (минут), date_s (секунд)). На другие поля не распространяется). Для текущей даты код будет выглядеть так:
$_POST["date_y"]=date("Y");
$_POST["date_m"]=date("m");
$_POST["date_d"]=date("d");
|