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   921 Views

Avatar
Harley

Community Member, 153 Posts

21 October 2009 at 1:23pm

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

Community Member, 283 Posts

23 October 2009 at 4:31pm

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