Jump to:

17452 Posts in 4473 Topics by 1971 members

Archive

SilverStripe Forums » Archive » ComplexTableFields and "MyName"

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: 1110 Views
  • JGC
    Avatar
    Community Member
    25 Posts

    ComplexTableFields and "MyName" Link to this post

    http://doc.silverstripe.com/doku.php?id=complextablefield

    In the documentation for CTFs, they're all shown as using a parameter "MyName" (which goes where the relation name would go).

    I'm modifying the CMS and trying to get different Page Types to show different CTFs. Each Page Type has its own class which extends Page, and it's pulling in only one table with no relations, which has its own class which extends DataObject.

    Example:
    BandMembers.php - table

    <?php

    class BandMembers extends DataObject
       {
       public static $db = array
          (
          'BandFirstName'         =>   'Text',
          'BandFamilyName'      =>   'Text',
          'BandInstruments'      =>   'Text',
          'BandMemberBlurb'      =>   'Text'
          );

       public static $has_one = array();
       }

    class BandMembers_Controller extends ContentController
       {
       }


    AboutPage.php - About Page page type

    class AboutPage extends Page
       {

       ##
       ##   Set up the database
       ##

       static $db = array
       (
          'BackgroundTitle'         =>   'Text',
          'BackgroundContent'         =>   'HTMLText',
    # Some more DB fields here, no name clashes or anything
       );

       function getCMSFields()
          {
          $fields = parent::getCMSFields();

          # Create Band Member management tab
          $showMembers = new ComplexTableField(
             $this,
             'MyName',
             'BandMembers',
             array(
                'BandFirstName' => 'Forename',
                'BandFamilyName' => 'Surname',
                'BandInstruments' => 'Instrument(s)'
             ),
             new FieldSet(
                new TextField('BandFirstName', 'Forename'),
                new TextField('BandFamilyName', 'Surname'),
                new TextField('BandInstruments', 'Instrument(s)'),
                new HTMLEditorField('BandMemberBlurb', 'Band Member Blurb')
             )
          );

          $showMembers->setPermissions(array(
             'add',
             'delete',
             'edit'
          ));

          $fields->addFieldToTab('Root.Content.BandMembers', $showMembers);
          return $fields;
          }

    The problem is I can only use "MyName" as a parameter for one Page Type like this - other Page Types using MyName will pull in this form. Using anything else gives a error of "I can't handle sub-URLs of a ... object" (Form, in this case).

    The member Dig here says he fixed it here:
    http://www.silverstripe.com/extending-hacking-silverstripe-forum/flat/245239
    "EDIT: I fixed it, I was being too clever and not constructing the full form if it wasn't being requested for displaying. Basically any path the exits early before creating the full form with the ComplexTableField in it will break it. Makes sense when you think about it!"

    I'd try to return a form, except I have to return a FieldSet for getCMSMethods.

    Any suggestions on how I can fix it to allow multiple CTFs with different tables?

    Each CTF only needs to show data from one table.

    Thanks in advance

  • JGC
    Avatar
    Community Member
    25 Posts

    Re: ComplexTableFields and "MyName" Link to this post

    Does anyone have any thoughts on how I could get this working?

  • JGC
    Avatar
    Community Member
    25 Posts

    Re: ComplexTableFields and "MyName" Link to this post

    Anybody at all? Would be really handy if someone could give me some ideas.

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