Jump to:

17452 Posts in 4473 Topics by 1971 members

Archive

SilverStripe Forums » Archive » Creating a Holder Page Whose Children are Holders Themselves

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: 1145 Views
  • Garrett
    Avatar
    Community Member
    245 Posts

    Creating a Holder Page Whose Children are Holders Themselves Link to this post

    Hi, I have been builing my site in Silverstripe for the past couple of weeks and have been using the techniques and code I learned in the tutorials, which I completed. Today I have run into the need for something more complex than what the tutorials touched on, and I am sincerely hoping some can give me some guidance on this. I will attempt to describe what I need to do below.

    Basically, I have a section of the site called "Capabilities." I have a CapabilitiesHolder.php file which has:

    static $allowed_children = array('CapabilityPage');

    I have 5 or 6 pages of type CapabilityPage, which I want to be indexed and submenu'ed on the Capabilities front page, which is why I am using $allowed_children. But the problem is that the separate Capability Pages themselves need to use:

    ManyManyComplexTableField

    ...In order for users to be able to add subsections within these pages. Rather than having one big HTMLEditorField on each CapabilityPage, I want users to be able to add Subsection Headings and Text, because this will give them less control over the layout and sttyle on the page.

    The issue is that in the tutorials, I was not shown how to use the ManyManyComplexTableField concept WITHIN a page which is a Child of a Holder page. I have a CapabilityPage.php file, and I need to be able to click on each instance of this page type (again, INSIDE CapabilitiesHolder page type), and click on a "Subsections" tab, and then add Headings and Text. I need BOTH a getCMSFields() using ManyManyComplexTableField AND a getCMSFields_forPopup() function. Just don't really know how to use them together. My "Subsections" tab IS shownig up, but there are five empty entries on each page, new entries I add don't seem to be showing up in the database either. I have included a screenshot to show what one of the "Subsections" tabs looks like after rebuilding the database.

    I will paste my code from CapabilityPage.php below:

    <?php
    /**
    * Defines the CapabilityPage page type
    */
    class CapabilityPage extends Page {
       
       static $many_many = array(
          'CapabilitiesEntries' => 'CapabilityPage'
       );
       
       static $belongs_many_many = array(
          'CapabilitiesEntries' => 'CapabilityEntry'
       );
       
       static $db = array(
          'CapabilityHeading' => 'Text'
          ,'CapabilityText' => 'Text'
       );
       
       //static $has_one = array(
          //'CapabilitiesImage' => 'Image'
       //);
       
       
       function getCMSFields() {
          $fields = parent::getCMSFields();
          
          $fields->addFieldToTab('Root.Content.Main', new TextField('Subtitle'), 'Content');
          
          $CapabilitiesSubsection1tablefield = new ManyManyComplexTableField(
             $this,
             'CapabilitiesEntries',
             'CapabilityPage',
             array(
                'CapabilityHeading' => 'Subsection Heading'
                ,'CapabilityText' => 'Subsection Text'
                //,'CapabilityImage' => 'Subsection Image'
             ),
             'getCMSFields_forPopup'
          );
          $CapabilitiesSubsection1tablefield->setAddTitle( 'a Subsection' );
          $CapabilitiesSubsection1tablefield->setPageSize(100);

          $fields->addFieldToTab( 'Root.Content.Subsections', $CapabilitiesSubsection1tablefield );

          return $fields;
       }
       
       function getCMSFields_forPopup() {
          
          $fields = new FieldSet();
          
          $fields->push(new TextField('CapabilityHeading', 'Subsection Heading'));
          $fields->push(new TextField('CapabilityText', 'Subsection Text'));
          //$fields->push(new ImageField('CapabilityImage','Subsection Image'));
          
          return $fields;
       }
       
    }

    class CapabilityPage_Controller extends Page_Controller {
       
    }

    ?>

    Can someone please walk me through this? Seems like a common thing a site builder would have to do.

    A sincere thanks in advance,
    Garrett

  • Sam
    Avatar
    Administrator
    679 Posts

    Re: Creating a Holder Page Whose Children are Holders Themselves Link to this post

    I think that you want to define your getCMSFields_forPopup() method on the CapabilityEntry object instead.

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