10

私のフォーム:

<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;
}
4

3 に答える 3

9

ドキュメントを参照してください: Plugin Components .

コンポーネントを作成できます ( 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" %}
于 2015-04-02T11:15:26.810 に答える
4

バックエンドの CMS セクションに移動し、それを default.htm レイアウトのコード セクションに貼り付けます。この質問には、OctoberCMS.com フォーラムで既に回答しています。ここでそれについて読むことができます。これを使用するフォームにdata-request="onSend"else があることを確認してください。最終的にはこんな感じに・・・。

ここに画像の説明を入力

于 2015-04-02T20:17:56.947 に答える
2

フォームの HTML は、コンポーネントのパーシャル ディレクトリ、テーマのパーシャル ディレクトリに追加するか、任意のページ/レイアウトに直接追加することができます。それは本当に問題ではありません。

パーシャルを含める方法の詳細を読む

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

または

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

10 月の AJAX フレームワークでは、JavaScript API またはデータ属性を使用する必要があります。例でのやり方は問題ありませんが、onSend ハンドラの前にコンポーネントの名前を追加するのを忘れていました

data-request="SendEmails::onSend" 

Where 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('noreply@yourdomain.com', '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;
            }
        }
    }

}
于 2016-04-07T19:40:51.747 に答える