OctoberCMS Почтовая форма

Моя форма:

<form id="main-contact-form" name="contact-form" ata-request="onSend" data-request-success="alert('Message Sent')">

Я не могу получить форму для публикации; где я могу разместить этот файл? Какой файл мне нужно отредактировать, чтобы он отправлял поля данных формы на мою электронную почту? Я уже настроил настройки внутренней почты:

function onSend()
{
// Collect input
$name = post('name');
$email = post('email');
$message = post('message');// Submit form
$to = System\Models\MailSettings::get('sender_email');
$params = compact('name','email');
Mail::sendTo($to, 'temp.website::mail.newrequest', $params);
return true;
}

8

Решение

Пожалуйста, обратитесь к документации: Компоненты плагинов.

Вы можете создать компонент (SomeForm.php)

<?php namespace My\Plugin\Components;

use Cms\Classes\ComponentBase;

class SomeForm extends ComponentBase
{
public function componentDetails()
{
return [
'name'        => 'Form',
'description' => 'Some form'
];
}

public function onSend()
{
// Collect input
$name = post('name');
$email = post('email');
$message = post('message');

// Submit form
$to = System\Models\MailSettings::get('sender_email');
$params = compact('name','email');
Mail::sendTo($to, 'temp.website::mail.newrequest', $params);
return true;
}
}

И затем создайте представление для этого (например, default.htm)

<form id="main-contact-form" name="contact-form" data-request="{{ __SELF__ }}::onSend" data-request-success="alert('Message Sent')">
...
</form>

Использование в страницах / макетах:

[someForm]
==
{% component "someForm" %}
6

Другие решения

Вы идете в раздел CMS в своем бэкэнде и вставляете его в раздел кода макета default.htm. Я уже ответил на этот вопрос на форуме OctoberCMS.com. Вы можете прочитать об этом Вот. Убедитесь, что любая форма, на которой вы используете это, имеет data-request="onSend" иначе это не будет работать. Вот как это в конечном итоге будет выглядеть …

введите описание изображения здесь

2

Вы можете добавить HTML-код формы либо в свой каталог компонентов, либо в частичный каталог Theme, либо просто добавить его непосредственно на любую страницу / макет. На самом деле это неважно.

Узнайте больше о включении Partials

{% partial "contact-form.htm" %}

Или же

{% partial __SELF__ ~ "::contact-form.htm" %} // reference to component's partial

Октябрьская среда AJAX требует использования JavaScript API или атрибутов данных. Это хорошо, как вы делаете это в примере, но забыли добавить имя компонента перед обработчиком onSend

data-request="SendEmails::onSend"

куда SendEmails = Имя компонента или Псевдоним, указанный на странице, если форма находится в частичном использовании компонента {{ __SELF__ }}::onSend

или с помощью JavaScript API просто выполните:

$.request('onSend', {
data:{email:email, message:message, name:name},
success: function (data) {
//
},
error:function(e){
//
}
});

затем в компоненте, обрабатывающем запрос, создайте функцию onSend:

<?php namespace AuthorName\PluginName\Components;use Cms\Classes\ComponentBase;
use Mail;
use Url;
use Input;
use Request;
use Response;
use ApplicationException;
use Validator;
use ValidationException;

class SendEmails extends ComponentBase
{

public function onSend()
{
if (Request::ajax()) {

try {

$data = post();

// Quick Validation rules for E-mail, Name & Message
if (!array_key_exists('email', $data)) {
$data['email'] = post('email');
}
if (!array_key_exists('norad', $data)) {
$data['message'] = post('message');
}
if (!array_key_exists('name', $data)) {
$data['name'] = post('name');
}

$rules = [
'email' => 'required|email|between:6,255',
'name' => 'required|between:4,255'
//..
];

$validation = Validator::make($data, $rules);
if ($validation->fails()) {
throw new ValidationException($validation);
}

// Check if E-mail Template Exists @ "author.plugin::mail.templatename"
if (View::exists("author.plugin::mail.templatename")) {

Mail::send("author.plugin::mail.templatename", $data, function ($message)  {
$message->from('[email protected]', 'Site Name');
$message->to($data['email'], $data['name']);
$message->subject('Subject here..');

});

// Handle Erros
if (count(Mail::failures()) > 0) {
echo "Failed to send Mail "; // Handle Failure
} else {
// Mail sent
echo "Mail Sent!"; // Handle Success
}

}

} catch (Exception $ex) {

throw $ex;
}
}
}

}
2
По вопросам рекламы [email protected]