Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

General Questions

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

contact page problem


Reply

2 Posts   847 Views

Avatar
Harley

21 October 2009 at 1:23pm Community Member, 153 Posts

Hi,

I have used the basic contact page from the tutorial which I got working fine. now I want to keep it on every page using an include but having difficulty making this work. I get my contact page to display but without the form.

Here is the code

<?php
/* *****************
* Model
******************/
class ContactPage extends Page
{
   static $db = array(
      'Mailto' => 'Varchar(100)', //Email address to send submissions to
      'SubmitText' => 'HTMLText' //Text presented after submitting message
   );
   
   //CMS fields
   function getCMSFields() {
      $fields = parent::getCMSFields();
   
      $fields->addFieldToTab("Root.Content.OnSubmission", new TextField('Mailto', 'Email submissions to'));   
      $fields->addFieldToTab("Root.Content.OnSubmission", new HTMLEditorField('SubmitText', 'Text on Submission'));   
   
      return $fields;   
   }

}
/* *****************
* Controller
******************/
class ContactPage_Controller extends Page_Controller{

   function ContactForm() {
   // Create fields
      $Params = Director::urlParams();
      
    $fields = new FieldSet(
       new TextField('Name', 'Name*'),
         new EmailField('Email', 'Email*'),
         new TextareaField('Comments','Message*')
      );
       
    // Create action
    $actions = new FieldSet(
       new FormAction('SendContactForm', 'Submit')
    );
      // Create action
      $validator = new RequiredFields('Name', 'Email', 'Comments');
   
         
    return new Form($this, 'ContactForm', $fields, $actions, $validator);
   }

   function SendContactForm($data) {

       //Set data
      $From = $data['Email'];
      $To = $this->Mailto;
      $Subject = "Website Contact message";    
      $email = new Email($From, $To, $Subject);
      //set template
      $email->setTemplate('ContactEmail');
      //populate template
      $email->populateTemplate($data);
      //send mail
      $email->send();
       //return to submitted message
      Director::redirect(Director::baseURL(). $this->URLSegment . "/?success=1");

   }

   public function Success()
   {
      return isset($_REQUEST['success']) && $_REQUEST['success'] == "1";
   }
}

<% if GetContactPage %>
<% control GetContactPage %>
<% if Success %>
   $SubmitText
<% else %>
   $Content
   $ContactForm
<% end_if %>
<% end_control %>
<% end_if %>

Regards

Harley

Avatar
dalesaurus

23 October 2009 at 4:31pm Community Member, 283 Posts

Man, what is it with folks using $_REQUEST tonight? Cease and desist!

Your code can be simplified if you check out some of the docs on Forms. There is built in posting back to a form that allows you to test and pass success message back without the tricks you're using in the template

http://doc.silverstripe.org/doku.php?id=recipes:simplesignupform