2015-04-02 14 views
7

Moja forma:OctoberCMS post Formularz

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

nie mogę wydawać się stać formą odpowiedzieć; gdzie mogę umieścić ten plik? Który plik mam edytować, aby wysłać pola danych formularza na mój adres e-mail? Mam już skonfigurowane ustawienia poczty wewnętrznej:

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

Odpowiedz

5

Proszę zapoznać się z dokumentacją: Plugin Components.

Można utworzyć komponent (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; 
    } 
} 

A następnie utworzyć widok dla niego (np default.htm)

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

Wykorzystanie na stronach/układów:

[someForm] 
== 
{% component "someForm" %} 
+0

Nie wydaje mi się, że warto utworzyć wtyczkę tylko po to, aby wysłać formularz. To jest bardzo trywialne zadanie, więc możesz użyć sekcji CMS z backendu październikowego, aby dodać kod. –

2

Przejdź do sekcji CMS w twoim backend i wklej ją do sekcji Code na układ default.htm. Już odpowiedziałem na to pytanie na forum OctoberCMS.com. Możesz przeczytać o tym here. Upewnij się, że jakakolwiek forma tego używasz ma data-request="onSend" w przeciwnym razie nie będzie działać. To jak to w końcu wyglądać jak ...

enter image description here

+0

Otrzymuję ten błąd podczas wysyłania wiadomości testowej za pośrednictwem szablonów poczty i błędu ajaxowego w rzeczywistym formularzu. Wyjątek został zgłoszony podczas renderowania szablonu ("Obiekt klasy Iluminate \ Mail \ Message nie mógł zostać przekonwertowany na ciąg znaków") w "

Nazwa: {{nazwa}}

Temat: {{subject}}

Wiadomość: {{message}}

"w linii 1. – T2T

+0

Ah ten błąd oznacza, że ​​zmienna komunikatu nie zawiera ciągu. Twój szablon poczty oczekuje, że wszystkie znaczniki twig będą ciągami. Upewnij się, że ciąg znaków jest przekazywany, a nie tablica lub jakiś inny rodzaj obiektu –

+0

czy można utworzyć formularz kontaktowy dla tematu oktaskinowego bez tworzenia składnika wtyczki, a jeśli tak, to w jaki sposób podejść do tego? –

2

Możesz dodać HTML w postaci albo w katalogu partials elementów, częściowy katalogu tematu lub po prostu dodać go do dowolnej strony/układu. To nie ma znaczenia.

Czytaj więcej o tym Partials

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

Or

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

AJAX ramy październikowy wymaga użycia API JavaScript lub atrybuty danych. To jest w porządku, jak robisz to na przykład, ale zapomniał dodać Nazwa komponentu przed onSend Handler

data-request="SendEmails::onSend" 

Gdzie SendEmails = nazwa składnika lub pseudonim podane na stronie, jeśli formularz jest komponent na częściowe tylko używać {{ __SELF__ }}::onSend

lub z API JavaScriptu, po prostu zrobić:

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

następnie w obsługi żądania składnika utworzyć funkcję 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; 
      } 
     } 
    } 

} 
Powiązane problemy