2015-04-02 17 views
7

Benim formu:OctoberCMS Mesaj Formu

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

Bir formu göndermek için almak gibi olamaz; Bu dosyayı nereye yerleştiririm? Form veri alanlarını e-postama göndermek için hangi dosyayı düzenlerim? Zaten kurulum arka uç posta ayarları vardır:

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

cevap

5

belgelerine bakın: Plugin Components.

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

Sadece form göndermek için eklenti yapmak iyi bir fikir değil bence. Bu çok önemsiz bir görevdir, böylece Ekim arka uç CMS bölümünü kod eklemek için kullanabilirsiniz .. –

2

:

Sen sayfa/düzenlerinde (örneğin default.htm)

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

Kullanımı bunun için bir görünüm oluşturmak sonra bir bileşen (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; 
    } 
} 

oluşturmak Ve edebilirsiniz Arka ucunuzdaki CMS bölümüne gidin ve bunu Kod'un bölümünün içine yapıştırın. default.htm düzeni. Bu soruyu EkimCMS.com forumunda zaten yanıtladı. Bu konuda okuyabilirsiniz here. Kullanmakta olduğunuz formun data-request="onSend" olmasına dikkat edin, aksi takdirde çalışmaz. Bu

enter image description here

+0

Bu şablon, posta şablonlarını kullanarak bir sınama iletisi ve gerçek formda bir ajax hatası gönderirken bu hatayı alıyorum. "

Ad: {{name}}

" Bir nesneyi oluşturma sırasında bir istisna oluşturuldu ("Nesnenin Sınıfı Nesnesi \ Posta \ İleti dizeye dönüştürülemedi") Konu: {{subject}}

İleti: {{message}}

"1. satırda – T2T

+0

Ah Bu hata, ileti değişkeninin bir dize tutmaması anlamına gelir. Posta şablonunuz tüm twig etiketlerinin dizeleri olmasını bekler. Bir dizi ya da başka bir tür nesne –

+0

bir dize geçiyor emin olun, bir eklenti bileşeni yapmadan oktaskin tema için bir iletişim formu oluşturmak mümkün mü ve eğer öyleyse, bu nasıl yaklaşırdı? –

2

Sen, Tema'nın kısmi dizin ya da sadece herhangi bir sayfa/düzeni doğrudan eklemek için bileşen Partials dizinde form'ın HTML ya ekleyebilir ... sonuçta gibi nasıl olduğunu. Gerçekten önemli değil.

Partials

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

Ya

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

Ekim ayı AJAX çerçeve

dahil hakkında daha fazlasını okuyun JavaScript API kullanımını gerektirir veya veri bağlıyor. Örnekte yapıyor ama daha önce komponente Adı eklemeyi unuttuğu nasıl gayet onSend Handler

formu bileşeni en kısmi ise SendEmails = Bileşen Adı veya takma sayfa verilen
data-request="SendEmails::onSend" 

sadece ,

veya JavaScript API ile {{ __SELF__ }}::onSend kullanmak sadece yapın:

:

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

sonra isteğini ele bileşeninde bir işlev onSend oluşturmak

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

}