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.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

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

Conditional Fields in the CMS


Go to End


6 Posts   1834 Views

Avatar
quamsta

Community Member, 29 Posts

3 January 2009 at 6:50am

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

Forum Moderator, 4102 Posts

3 January 2009 at 7:14am

Edited: 03/01/2009 7:15am

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

Avatar
quamsta

Community Member, 29 Posts

3 January 2009 at 7:21am

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

Forum Moderator, 4102 Posts

3 January 2009 at 8:08am

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

Community Member, 29 Posts

3 January 2009 at 9:16am

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

Community Member, 135 Posts

26 March 2010 at 9:28am

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?