2015-04-02 5 views
7

मेरे प्रपत्र: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; 
} 

उत्तर

5

कृपया प्रलेखन देखें: 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" %} 
+0

मुझे नहीं लगता कि प्लगइन बनाने के लिए सिर्फ एक फॉर्म बनाना अच्छा विचार है। यह एक बहुत ही छोटा काम है ताकि आप कोड जोड़ने के लिए अक्टूबर बैकएंड सीएमएस अनुभाग का उपयोग कर सकें .. –

2

आपको अपने बैकएंड में सीएमएस अनुभाग मिल गया है और इसे कोड कोड में पेस्ट करें default.htm लेआउट। मैंने अक्टूबरCMS.com मंच में पहले ही इस प्रश्न का उत्तर दिया है। आप इसके बारे में here पढ़ सकते हैं। सुनिश्चित करें कि आप जिस भी फॉर्म का उपयोग करते हैं वह data-request="onSend" है और यह काम नहीं करेगा। यह

enter image description here

+0

मुझे मेल टेम्पलेट्स और वास्तविक रूप पर एक AJAX त्रुटि के माध्यम से एक परीक्षण संदेश भेजते समय यह त्रुटि प्राप्त होती है। "

नाम: {{name}}

विषय: {{subject}} में एक टेम्पलेट के प्रतिपादन के दौरान एक अपवाद फेंक दिया गया है (" क्लास इल्यूमिनेट \ मेल \ संदेश का ऑब्जेक्ट स्ट्रिंग में परिवर्तित नहीं किया जा सकता ")

संदेश: {{message}}

"लाइन पर 1. – T2T

+0

आह इस त्रुटि का अर्थ है कि संदेश चर स्ट्रिंग नहीं रखता है। आपका मेल टेम्पलेट सभी ट्विग टैग तारों की अपेक्षा करता है। सुनिश्चित करें कि एक स्ट्रिंग पारित की जा रही है, एक सरणी या किसी अन्य प्रकार की वस्तु –

+0

प्लगइन घटक के बिना ऑक्टोस्किन थीम के लिए संपर्क फ़ॉर्म बनाना संभव है और यदि ऐसा है तो आप इस पर कैसे पहुंचेंगे? –

2

आप अपने घटक आंशिक निर्देशिका में पर्चा के एचटीएमएल या तो जोड़ सकते हैं, विषय के आंशिक निर्देशिका या सिर्फ यह सीधे किसी भी पृष्ठ/लेआउट में जोड़ने के लिए कैसे यह अंततः कैसा दिखेगा है ...। ये वास्तव में मायने नही रखता।

Partials

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

या

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

अक्तूबर AJAX ढांचे सहित बारे में अधिक पढ़ें डेटा विशेषताओं जावास्क्रिप्ट एपीआई के उपयोग की आवश्यकता या। यह ठीक है आप इसे कैसे उदाहरण में कर रहे हैं लेकिन इससे पहले कि घटक का नाम जोड़ने के लिए भूल गया onSend हैंडलर

data-request="SendEmails::onSend" 

कहाँ SendEmails = घटक नाम या उपनाम पेज में दिए गए, यदि प्रपत्र घटक के आंशिक में है बस का उपयोग {{ __SELF__ }}::onSend

या जावास्क्रिप्ट एपीआई के साथ, बस कार्य करें:

+०१२३५१६४१०६१:

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

} 
संबंधित मुद्दे