Jump to:

17452 Posts in 4473 Topics by 1971 members

Archive

SilverStripe Forums » Archive » Questions about custom forms

Our old forums are still available as a read-only archive.

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

Page: 1
Go to End
Author Topic: 1141 Views
  • poseydozer
    Avatar
    Community Member
    8 Posts

    Questions about custom forms Link to this post

    Hello,

    I am creating a new page type for our ss site that includes a form. I am creating this instead of using the existing contact form page type so that my users don't have to create the same registration form everytime they add an event to our site. I have run into two issues that I cannot resolve.

    The first is getting the form fields to show up in the submissions tab in the cms. The data from the form is making it into the database, but only the date/time of the submission is appearing on the submissions tab. I assume I am neglecting some detail, but I don't know what it is. Here are my class and controller:

    <?php
    /**
    * Defines the EventPage page type
    */

    class EventPage extends Page {
    static $db = array(
    'Date' => 'Date',
          'Time' => 'Text',
          'Location' => 'Text',
          'Meeting_time' => 'Text',
          'Meeting_place' => 'Text',
          'Registration_required' => 'Boolean',
          'Map' => 'Text',
          'Author' => 'Text',
          "OnCompleteMessage" => "HTMLText"
    );
       
    static $has_one = array(
    );

        static $has_many = array(
          "Submissions" => "EventRegisterFormSubmission"
       );
       
    static $icon = "mysite/images/treeicons/news";

    static $defaults = array(
    'ProvideComments' => false,
        "OnCompleteMessage" => "<p>Thanks, we've received your registration.</p>",
          
       );

    function getCMSFields() {
    $fields = parent::getCMSFields();
    $fields->addFieldToTab('Root.Content.Main', new CalendarDateField('Date', 'Date of event'), 'Content');
    $fields->addFieldToTab('Root.Content.Main', new TextField('Time', 'Time of event'), 'Content');
        $fields->addFieldToTab('Root.Content.Main', new TextField('Location', 'Location of event'), 'Content');
        $fields->addFieldToTab('Root.Content.Main', new TextField('Meeting_time', 'Carpool meeting time'), 'Content');
        $fields->addFieldToTab('Root.Content.Main', new TextField('Meeting_place', 'Carpool meeting place'), 'Content');
        $fields->addFieldToTab('Root.Content.Main', new TextField('Map', 'Map to event'), 'Content');
        $fields->addFieldToTab('Root.Content.Main', new TextField('Author'), 'Content');
        $fields->addFieldToTab('Root.Content.Main', new CheckboxField('Registration_required', 'Check if registration required'), 'Content');
    $fields->addFieldToTab("Root.Content.On complete", new HtmlEditorField( "OnCompleteMessage", "Show on completion",3,"",$this->OnCompleteMessage, $this ) );
        $fields->addFieldToTab("Root.Submissions", new SubmittedFormReportField( "Reports", "Received Registrations", "", $this ) );
        return $fields;
    }

    }

    class EventPage_Controller extends Page_Controller {

    function EventRegisterForm() {
       
       //create the fields for the registration form
       $nameField = new TextField('Name');
       $emailField = new EmailField('Email');
       $hiddenField = new HiddenField('ParentID');
       
       //put the fields into a fieldset
       $fields = new FieldSet(
    $nameField,
    $emailField
    );
       
       // Create validator
    $validator = new RequiredFields('Name', 'Email');
       
       //create an action and a submit button for the form
       
       $submitAction = new FormAction('doEventRegisterForm', 'Submit');
       
       //put the submit button into a field set
       $actions = new FieldSet(
       $submitAction
       );
       
       //return the form with the fields and the action
       return new Form($this, 'EventRegisterForm', $fields, $actions, $validator);
    }
       
       function doEventRegisterForm($data, $form) {
    $submission = new EventRegisterFormSubmission();
             $submission->ParentID = $this->ID;
             $submission->Name = $_POST['Name'];
             $submission->Email = $_POST['Email'];
    $submission->write();      
             Director::redirectBack();
    }

    }

    ?>

    I also don't know how to get the "On complete message" to display once the form has been submitted.

    Thanks for the help.

    1141 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.