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

Form builder link up with static form


4 Posts   656 Views


Community Member, 146 Posts

15 July 2011 at 3:49am

Hi everyone

I have made a good start to the following website

There is a form on the right hand side, which is static in the template include. However I obviously want this to be Form2Mail and create a backup copy of the data entered in the backoffice system.

I dont really know where to start with this, does anyone have some ideas?

Thanks very much in advance for any help.


Community Member, 532 Posts

15 July 2011 at 4:15am

Take a look at

You could create a data object to store a backup copy of the form in the Database while mailing it to its intended recipient. I use a similar system to handle product reviews.

The Review DataObject looks like this

class Review extends DataObject
   static $db = array (
      'Date' => 'Date',
      'Name' => 'Text',
      'Email' => 'Text',
      'Title' => 'Text',
      'Location' => 'Text',
      'Rating' => 'Int',
      'Review' => 'HTMLText',
      'Approval' => 'Boolean'
   static $has_one = array (
      'Product' => 'Product',
      'ColorProduct' => 'ColorProduct'
   public function getCMSFields_forPopup()
      $ratingArray = array (
                   '1' => '1',
                   '2' => '2',
                   '3' => '3',
                   '4' => '4',
                   '5' => '5'
      return new FieldSet(
         new CheckboxField('Approval'),
         new CalendarDateField('Date'),
         new TextField('Name'),
         new EmailField('Email'),
         new TextField('Title'),
         new TextField('Location'),
         new DropdownField('Rating','Rating',$ratingArray),
         new TextareaField('Review')


While the ReviewForm on the Product DataObject looks like this

function UserProductReviewForm() {
// Create fields
$fields = new FieldSet(
                      new TextField('Name','Name:'),
                      new EmailField('Email','E-Mail Address:'),
                      new OptionsetField('Rating','Rating',array(
                                                      '1' => '1',
                                                      '2' => '2',
                                                      '3' => '3',
                                                      '4' => '4',
                                                      '5' => '5',
                      new TextField('Title','Review Title:'),
                      new TextareaField('Review'),
                      new HiddenField('ProductID', '', $this->ID),
                      new HiddenField('ProductName','',$this->Title)
// Create actions
$actions = new FieldSet(
new FormAction('doReview', 'Submit')
      $form = new Form($this, 'UserProductReviewForm', $fields, $actions);
      $protector = SpamProtectorManager::update_form($form);
      if($protector) $protector->setFieldMapping('Name', 'Email', 'Title', 'Review');
   return $form;

function doReview($data, $form) {
$review = new Review();
    //Set data
    $From = "";
    $To = "";
    $Subject = "New Review for " . $data['ProductName'];
    $email = new Email($From, $To, $Subject,$body);
    //set template
    //populate template
    //send mail
    //return to submitted message
    Director::redirect(Director::baseURL(). "thank-you-for-your-review/");
    //return $this->Mailto;

You could also just replace the whole set/populate template section buy pushing the form fields into the $body


Community Member, 146 Posts

15 July 2011 at 4:18am

thanks very much... do you do any freelance? we are interested in getting a silverstripe developer on board. Cheers


Community Member, 532 Posts

15 July 2011 at 5:30am

Haha I do, but I have an impending baby on the way and I don't want to commit to any major projects until I know how it will big wrench it'l throw in my freelance time :)

But if you need some advice, feel free to contact me.