Работа с формами состоит из двух почти независимых этапов − этап отображения формы на сайте (с возможностью ее заполнения и отправки на сервер) и этап обработки полученных от пользователя данных. В предыдущем примере мы разобрались с вопросом отображения формы на сайте, здесь же затронем второй вопрос, на примере создания формы обратной связи.
Предположим, нам нужно добавить возможность связаться с администратором через форму на сайте. В форме должно быть три поля − имя посетителя, его e-mail и текст сообщения. Отправленные данные уходят на заданный e-mail адрес, который не должен быть доступен посетителю.
Для этого нам придется создать две новые страницы на сайте. Первая, назовем ее feedback, будет отображать форму с полями ввода, а также кнопочку для отправки данных. Вторая, назовем ее actionFeedback, будет так называемым контроллером, она будет обрабатывать полученные после отправки формы данные. Итак:
1. Создайте новую страницу:
2. Создайте шаблон:
Имя шаблона: feedback
Предок: general
Текст шаблона:
<area:content>
<form action="/actionFeedback" method="post">
<input type="hidden" name="action" value="send">
Ваше имя: <input type="text" name="name"><br>
Ваш e-mail: <input type="text" name="email"><br>
Сообщение: <textarea name="message"></textarea><br>
<input type="submit" value="Отправить!">
</form>
</area:content>
Как видите, форма отправляет данные на страницу "actionFeedback", передавая, кроме полей, еще один скрытый параметр "action" со значением "send". Это позволяет использовать один контроллер для обслуживания нескольких различных действий, хотя в данном случае нам это и не нужно. Шаблон можете оформить по своему вкусу, только не меняйте имена полей (action, name, email и message).
3. Зайдите на сайт, откройте страницу feedback и убедитесь, что форма отображается как надо, и что попытка нажать на кнопку "Отправить" приводит к появлению ошибки 404 (страницы-контроллера у нас пока нет).
4. Создайте еще одну страницу:
5. Создайте пакет:
$action=acceptStringParameter("action");
switch($action) {
case "send":
// Отправка формы обратной связи
// Прием данных из формы
$name=acceptStringParameter("name",100);
$email=acceptStringParameter("email",100);
$message=acceptStringParameter("message",10000);
// Проверка данных на корректность
if(!$name) $compiler->standardError("Пожалуйста, укажите ваше имя.");
if(!$email) $compiler->standardError("Пожалуйста, укажите ваш e-mail адрес.");
if(!preg_match(EmailAddressPattern,$email))
$compiler->standardError("Пожалуйста, укажите корректный e-mail адрес.");
if(!$message) $compiler->standardError("Пожалуйста, укажите текст сообщения.");
// Все в порядке, можно выполнять действия
$scope=compact("name","email","message");
$subject=$compiler->captureTemplate("mailFeedbackSubject",$scope);
$message=$compiler->captureTemplate("mailFeedbackMessage",$scope);
$mailSystem->sendMail($email,$settings["siteAdminEmail"],$subject,$message);
$compiler->standardRedirect("Спасибо за ваше сообщение!");
}
redirect("/");6. Создайте вспомогательный шаблон mailFeedbackSubject:
Форма обратной связи на сайте
7. Создайте вспомогательный шаблон mailFeedbackMessage:
Здравствуйте.
На сайте <var:_SERVER:HTTP_HOST> была заполнена форма обратной связи.
Данные формы:
Имя: <var:name nofilter>
E-mail: <var:email nofilter>
Сообщение: <var:message nofilter>
С уважением,
система управления сайтом.
Как видно из текста пакета, эти два шаблона используются для формирования заголовка и текста уведомления. Если вам нужно изменить оформление письма − просто измените один из этих шаблонов.
8. Зайдите в Настройки сайта (Настройки − Редактирование настроек) и укажите e-mail администратора сайта. Письма будут отправляться на этот адрес.