Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Web Servers

Обработка форм с помощью phpPress, goPress, rubyPress и nodePress

by
Difficulty:IntermediateLength:LongLanguages:

Russian (Pусский) translation by Dima (you can also view the original English article)

Теперь, когда у вас есть веб-сайт, использующий плоскую файловую систему, вы хотели бы получить отзывы от ваших пользователей. Добавить Disqus легко, поскольку весь код JavaScript добавлен на страницу, но это не то, что вам нужно. Вы хотите, чтобы они могли отправлять вам электронные письма напрямую, чтобы вы могли отвечать только на них.

Вы можете создать всю систему JavaScript для отправки электронной почты непосредственно с компьютера пользователя, но при этом ваша электронная почта будет открыта для спамеров, которые смогут извлечь ее из вашего кода и продать другим спамерам. Поэтому вам необходимо скрыть свой адрес электронной почты на сервере.

Это руководство посвящено добавлению системы сообщений электронной почты в вашу новую PressCMS (то есть phpPress, rubyPress, nodePress и goPress). Я начинаю с внешнего интерфейса, а затем обращаюсь к внутреннему для каждой системы. Я предполагаю, что у вас уже есть эти серверы в вашей системе.

Как создать форму в браузере

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

Вместо добавления в тему стилей, этот скрипт формы имеет все в одном месте. Создайте файл questions.html в каталоге site/parts для веб-сайта со следующим содержимым:

Это создает базовую форму, запрашивающую полное имя (имя и фамилию), адрес электронной почты и сообщение. Эта форма использует регулярные выражения, чтобы убедиться, что имя и адрес электронной почты действительны. Если все, что пользователь вводит в эти поля, не соответствует регулярному выражению в директиве pattern, то форма не будет отправлена. Всплывающее окно попросит пользователя правильно заполнить поле сообщением в параметре title. Каждое поле ввода также имеет required минимум. Это предотвращает отправку бланков. Это минимальная проверка данных, которую вы должны использовать на внешнем интерфейсе.

Директива action в элементе form сообщает веб-браузеру, на какой адрес отправлять данные формы. Директива method указывает браузеру отправлять как метод post. Данные формы будут помещены в URL почтового запроса на сервер. Это Query String. Затем сервер обрабатывает информацию в строке запроса.

В каталоге site/pages создайте файл contact.md и поместите этот код:

После сохранения вы можете опробовать страницы на сервере. В вашем браузере откройте страницу http://localhost:8081/contact.

Contact Form Page
Страница контактной формы

Страница Contact Us будет выглядеть как на картинке выше. Обратите внимание на выделение поля Имя непосредственно при загрузке. Директива autofocus создает необходимое поведение. Всегда полезно иметь первое поле, которое пользователь должен вводить автоматически.

После отправки сообщения пользователю будет приятно получить сообщение с подтверждением. В каталоге site/pages создайте файл messagesent.md и поместите этот код:

Это простое сообщение, чтобы пользователь знал, что сообщение было отправлено правильно. Вы можете расширить его на свое усмотрение.

Message Sent Confirmation Page
Страница подтверждения отправленного сообщения

Обработка формы с помощью goPress

Для очистки сообщения, данного пользователем, я использую библиотеку Blue Monday. Чтобы загрузить эту библиотеку в вашей системе, вам нужно запустить следующую команду:

Это сделает библиотеку доступной для вашей программы. Это единственная нестандартная нужная библиотека.

Откройте файл goPressServer.go и добавьте его в начало файла внутри оператора import():

Отправка сообщений с сервера по электронной почте требует наличия этих библиотек. После строки, содержащей goPress.DefaultRoutes( вызов функции, добавьте следующий код:

Это устанавливает путь /api/message для запуска функции postMessage(). В конце файла добавьте этот код:

Эти две функции составляют обработчик для электронных писем, отправленных из браузера. Путь /api/message вызывает функцию postMessage(). Он извлекает информацию, отправленную из формы, заполненной пользователем, очищает сообщение с помощью библиотеки BlueMonday и отправляет электронное письмо владельцу сайта с помощью функции sendEmail(). Вам нужно будет указать свой адрес Gmail вместо владельца <your email address> и пароль <password>.

В файле goPress.go добавьте эту функцию после функции SetGetRoute():

Эта функция в точности похожа на функцию SetGetRoute(). Единственная разница заключается в использовании функции web.Post().

С этими изменениями ваш сервер goPress теперь может отправлять ваши электронные письма от пользователя.

Обработка формы с помощью nodePress

Чтобы отправлять электронные письма с узла, вам необходимо сначала установить nodemailer library и body-parser library с помощью следующей команды:

Затем вам нужно загрузить новые библиотеки и настроить почтовый объект. В верхней части файла nodePress.js после последней загруженной библиотеки добавьте следующие строки:

Это загрузит библиотеку nodemailer и настроит повторно используемый компонент для отправки электронных писем. Вы должны заменить <your email name> на имя вашего адреса электронной почты (т.е. перед символом), <your email domain> - это домен для вашего адреса электронной почты (то есть gmail.com для обычной почты Gmail или ваше имя домена, если настроить gmail на ваше доменное имя) и <your password> с паролем для вашей учетной записи электронной почты.

После строки, которая инициализирует переменную nodePress, добавьте этот код:

Теперь, после последнего вызова функции nodePress.get(), добавьте этот код:

Это обработчик для адреса /api/message. Эта функция получает информацию, отправленную из формы, создает правильное сообщение электронной почты и отправляет ее на адрес электронной почты, указанный в <your email address>. После отправки письма это отправит пользователя на страницу /messagesent. Промежуточное программное обеспечение анализатора тела имеет параметры URL, сохраненные в переменной request.body и хорошо очищенные.

Этот код работает для настройки Gmail без двухфакторной аутентификации. Если у вас двухфакторная аутентификация, вы можете обратиться к документации Nodemailer, чтобы настроить ее.

Обработка формы с помощью rubyPress

Чтобы отправлять электронные письма в Ruby, вам необходимо установить библиотеку ruby-gmail следующей командой:

В зависимости от настроек Ruby вам может потребоваться использовать sudo перед командой. Теперь, чтобы загрузить библиотеку, добавьте следующую строку в начало файла rubyPress.rb:

После всех определений get добавьте следующие строки:

Благодаря этим дополнениям сервер rubyPress может обрабатывать формы электронной почты. После того, как вы измените <your email address> на ваш адрес электронной почты и <your password> и пароль для вашего почтового сервера, сценарий завершается.

Обработка формы с помощью phpPress

Последний сервер, который нужно изменить - это сервер phpPress. Чтобы добавить возможности электронной почты на сервер, я собираюсь установить phpmailer library. Это наиболее широко используемая библиотека в PHP для работы с электронной почтой. Чтобы установить библиотеку, вам нужно выполнить следующие команды в каталоге phpPress:

К сожалению, обновление композитора обновит библиотеку LightnCandy. Это хорошо, потому что это намного быстрее и проще в использовании. Но это нарушает код сервера. В файле index.php найдите функцию ProcessPage() и замените ее следующим кодом:

Сравнивая его со старым кодом, вам больше не нужно работать с временным файлом. Все это делается в памяти и, следовательно, скорость обработки увеличилась. Теперь, в верхней части файла index.php, добавьте это после библиотеки Jade:

Это загружает библиотеку phpmailer. Теперь, после последней функции $app->get(), добавьте этот код:

Это обработчик почтового запроса для пути /api/message. Он извлекает данные формы, отправленные из браузера, создает с ним электронную почту и отправляет. PHP автоматически принимает любые параметры URL и помещает их в глобальный массив $ _POST.

Вам придется заменить <your email address>, <your password> и <your name> на соответствующие значения для вашей электронной почты. Если вы используете что-то иное, чем SMTP-сервер Gmail, вам также потребуется изменить адрес $mail->Host.

Заключение

Я показал вам, как легко добавить форму электронной почты на сайт pressCMS. вы можете скачать все серверы с их модификациями. Поэтому вы можете скачать его вместо того, чтобы печатать. Я сделал небольшую обработку ошибок. А также оставлю все остальное на ваше усмотрение.

Метод, который мы рассмотрели это размещение данных формы вместе с данными в URL. Многие сайты в настоящее время используют REST API с данными в виде строки JSON для выполнения действия. Эти процедуры легко адаптируются к этой методологии, но для вас это упражнение (или будущий учебник). Теперь, когда вы знаете, как это сделать, добавьте свои собственные формы на свой сайт. Этот тип настройки очень простой. Единственным ограничением является ваше воображение.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.