Jump to:

2011 Posts in 1436 Topics by 620 members

Form Questions

SilverStripe Forums » Form Questions » Forms on dataobjects

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

Page: 1
Go to End
Author Topic: 544 Views
  • cumquat
    Avatar
    Community Member
    198 Posts

    Forms on dataobjects Link to this post

    Hi guys,

    Ok i need a bit of help.

    I have a data object called SEARCH this lists info about a search (supprise supprise) each SEARCH can have many MISPERS. I have a SEARCHPAGE that lists all the current searches when i select a link it takes me to the rendered page for showing me the SEARCH and the MISPER details. what i would like to do is add a link in the page that allows me to edit the MISPER detail i am looking at.This is where i seem to have confused myself and now cannot see the wood from the trees.
    I don't have a huge amount of knowledge on the whole MVC type approach but what i would like to happen is that the dataobject MISPER has a form on it that i can call in the rendered searchpage so far i've got that working but when i try to save said form it doesn't work it doesn't seem to know where to send/process the data. I'm sure this is due to a lack of controller and i'm used to using forms on an actual defined Pages. So i need to work out how to process a form that is on a dataobject.
    If i try and process the form on the rendered search page i'm not sure how to pass the correct ID for the MISPER bearing in mind there could be multiple MISPERS per search on that page.

    Any help or pointers appreciated.

    Mick

    Search.php

    class Search extends DataObject implements PermissionProvider {

       
       static $db = array(
          'Name' => 'Varchar(50)',
          'IncidentNum' => 'int',
          'CalloutDate' => 'SS_Datetime',
          'Area' => 'Varchar(250)',
          'Notes' => 'Text',
          'RVGridref' => 'Varchar(20)',
          'CurrentSearch' => 'Boolean',
          
    );

       static $has_many = array (
          'AuditTrails' => 'AuditTrail',
          'Locations' => 'Location',
          'Contacts' => 'Contact',
          'Mispers' => 'Misper'
          
       );


    Misper.php

    class Misper extends DataObject {

    static $db = array(
       'Name' => 'Varchar(50)',
       'Nickname' => 'Varchar(50)',
       'MispNum' => 'Varchar(5)',   
       //Description
       'Age' => 'Varchar(20)',
       'Race' => 'Varchar(50)',
       'Gender' => "Enum( array('Male','Female'),'Male')",
       'Height' => 'Varchar(10)',
       'Weight' => 'Varchar(50)',
       'Hair' => 'Varchar(75)',
       'FacialHair' => 'Varchar(50)',
       'DOB' => 'Date',
       'Notes' => 'Text',
       'SearchedBefore' => 'Boolean',
       //Clothing
       'Shirt' => 'Varchar(50)',
       'Jumper' => 'Varchar(50)',
       'Jacket' => 'Varchar(50)',
       'Headwear' => 'Varchar(50)',
       'Trousers' => 'Varchar(50)',
       'Footwear' => 'Varchar(50)',
       'Gloves' => 'Varchar(50)',
       'Glasses' => 'Varchar(50)',
       'Description' => 'Text',
          
    );

    static $has_one = array (
          'Photo' => 'Image',
          'Search' => 'Search'
       );

    function MisperClothing() {
       $fields = new FieldList(
       HiddenField::create('ID', 'aID', $this->ID),
       //HiddenField::create('MemberID', 'aID', $member),
                   
       HeaderField::create('LocationHeader' , 'Misper Clothing' , 3),
                      
       TextField::create("Shirt","Shirt/Blouse"),
       TextField::create("Jumper", "Jumper"),
       TextField::create("Jacket"),
       TextField::create("Headwear"),   
       TextField::create("Trousers"),   
       TextField::create("Footwear"),   
       TextField::create("Gloves"),   
       TextField::create("Glasses")      
                   
    );

       
       $actions = FieldList::create(
    FormAction::create("doMisperClothing","Update Mipser")
          
                
          
       );
             
       $form = Form::create($this, 'MisperClothing', $fields, $actions);
                      
             
       $editmis = Misper::get()->filter('ID', $this->ID)->First();
          
       $form->loadDataFrom($editmis->data());
          
       return $form;
             
          
    }
    function doMisperClothing($data, $form){

       $theID = $_POST["ID"];
       $mis = Misper::get()->byID($theID);
       $form->saveInto($mis);
       $mis->write();
       Director::redirectBack();
          
          
    }

    TheSearch.ss

       <% with getSearch %>
       ...
          <% loop Mispers %>
          ...
       
          $MisperClothing
          ...
          <% end_loop %>
       <% end_with %>


       

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