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

Conditional Fields in the CMS


Reply

6 Posts   1381 Views

Avatar
quamsta

3 January 2009 at 6:50am Community Member, 29 Posts

Hi, I have a field in my Page.php getCMSFields function that I want to display on every TOP level page only. I don't want the field to show up in any level higher than 1. Is there a simple variable I can check with an if statement to do this?

Avatar
UncleCheese

3 January 2009 at 7:14am (Last edited: 3 January 2009 7:15am), 4085 Posts

if(!$this->Parent()) {
$fields->addFieldToTab...
}

Avatar
quamsta

3 January 2009 at 7:21am Community Member, 29 Posts

Hey, thanks for replying. I found Parent() in the API, earlier but I couldn't figure out how to use it.

I tried your if statement, but it doesn't work. The field doesn't show up anywhere, and when I negate the if-statement you showed me, the field shows up on all pages, regardless of their hierarchy :(

Avatar
UncleCheese

3 January 2009 at 8:08am 4085 Posts

It depends on how you have your architecture set up. Find out the parentID and just use that..

if(!this->Parent())
$fields->addFieldToTab...
else
$fields->addFieldToTab(new LiteralField('foo',$this->ParentID))

if $this->Parent() is returning true, it will return something other than 0 in the LiteralField, in which case, you're not really at the top level. If you want to leave it the way it is, just do

if($this->ParentID == $theID)
//add the field

or you could even do

if($this->Parent()->URLSegment == "some-page"))

you see what I mean..

Avatar
quamsta

3 January 2009 at 9:16am Community Member, 29 Posts

I see what you mean. I was able to get my code to work with this statement:

if(!$this->Parent) {
      $fields->addFieldToTab(

Thanks for your help!!

Avatar
zim

26 March 2010 at 9:28am Community Member, 135 Posts

I want to do this but the other way around. that is I have two image fields that I want to display only on top level... not children.

(the fields are declared in page.php)

Specifically on the blog entries in my blog module.

I tried

if(!$this->Level(0)) {

$fields->addFieldToTab("Root.Content.menuImage", new ImageField('menuImage'));
$fields->addFieldToTab("Root.Content.menuImage", new ImageField('menuImageRoll'));

}

but this did not work. fields still appear.

can anyone help?