Jump to:

2011 Posts in 1436 Topics by 620 members

Form Questions

SilverStripe Forums » Form Questions » Creating a custom form template from ContactPage.php

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

Page: 1
Go to End
Author Topic: 3031 Views
  • Samba Sam
    Avatar
    Community Member
    85 Posts

    Creating a custom form template from ContactPage.php Link to this post

    Hi,
    I would like to convert the below code, adapted from a SSbits tutorial, into a format that allows me to specify my own custom form template as demonstrated here http://doc.silverstripe.org/doku.php?id=form#using_a_custom_template).

    I am not entirely clear on what goes in the Myforms.php and what does in the ContactPage.php.

    Any help would be greatly appreciated,
    Sam

    <?php

    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','Comments*')
          );
           
        // Create action
        $actions = new FieldSet(
           new FormAction('SendContactForm', 'Send')
        );
          // Create action
          $validator = new RequiredFields('Name', 'Email', 'Comments');
       
           $form = new Form($this, 'ContactForm', $fields, $actions, $validator);
          $protector = SpamProtectorManager::update_form($form, 'Captcha');
       if($protector) $protector->setFieldMapping('Name', 'Email','Comments');
          return $form;
       }
       

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

  • Samba Sam
    Avatar
    Community Member
    85 Posts

    Re: Creating a custom form template from ContactPage.php Link to this post

    So I'm almost there. But I can't get mollom to work with my custom form class. I get an error if I uncomment the line -- $form = new Form($this, '__construct', etc., etc. -- in the ContactForm.php. This is the code that i've seen mentioned in the forum. But it doesn't appear to work with custom form classes.

    Any help is appreciated!
    Sam

    ContactForm.php:

    <?php
    class ContactForm extends Form {

    function __construct($controller, $name) {
    $Params = Director::urlParams();
    $fields = new FieldSet(
          new TextField('Name', 'Name*'),
          new EmailField('Email', 'Email*'),
          new TextareaField('Comments','Comments*'));

    $actions = new FieldSet(
    new FormAction("SendContactForm", "Submit"));

    $requiredFields = new RequiredFields('Name', 'Email', 'Comments');

    /* $form = new Form($this, '__construct', $fields, $actions,$requiredFields);
       $protector = SpamProtectorManager::update_form($form, 'Captcha');
       if($protector) $protector->setFieldMapping('Name', 'Email','Comments');
       return $form; */

       parent::__construct($controller, $name, $fields, $actions,$requiredFields);

    } // END __construct

    function forTemplate() {
    return $this->renderWith(array(
    $this->class,
    'Form'
    ));
    }
    }

  • biapar
    Avatar
    Forum Moderator
    435 Posts
    3031 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.