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

Page property access in Controller


Go to End


10 Posts   2827 Views

Avatar
Lazarus404

Community Member, 72 Posts

27 May 2011 at 12:06am

Edited: 27/05/2011 9:28am

Hi guys,

Okay, so, I've decided, to make life easy for the site admin, to default custom properties in a new page to match that of the home page. This way, the page doesn't look nasty if they've forgotten to add anything. This works great for single items, as I can just use

<% if Property %>
  $Property
<% else %>
  <% control Page(home) %>
    $Property
  <% end_control %>
<% end_if %>

However, a problem arises if the property is an array, as I can't nest control statements, and using

<% control Page(home).Property %>

doesn't work. The question is, then; how can I use the property of some other page in a control statement in a template?

Thanks,
Lee

Avatar
swaiba

Forum Moderator, 1899 Posts

27 May 2011 at 12:17am

how about replacing...

<% control Page(home).Property %>

with...

<% control Page(home) %>
<% if Property %>
do stuff
<% end_if %>
<% end_control %>

I'd expect that to work...

Avatar
Lazarus404

Community Member, 72 Posts

27 May 2011 at 9:25am

Hi Swaiba,

Yes, that would work if the property was a string or somesuch, but it's an array of items (DataObjects), thus I'd need to use "control" to iterate through it. As controls can't be nested, it means I can't access the data.

Thanks for commenting, though :)
Lee

Avatar
swaiba

Forum Moderator, 1899 Posts

27 May 2011 at 7:36pm

Edited: 27/05/2011 7:39pm

As controls can't be nested??

I don't follow that, I think I missed the "an array" part. A simple solution is to place your array into a DataObjectSet...

<% control Page(home) %> 
	<% if PropertyAsDataObjectSet %> 
		<% control PropertyAsDataObjectSet %> 
			do stuff 
		<% end_control %>
	<% end_if %> 
<% end_control %>

function PropertyAsDataObjectSet() {
	$dos = null;
	if (count($this->Property)) {
		$dos = new DataObjectSet();
		foreach ($this->Property as $do) {
			$dos->push($do);
		}
	}
	return $dos;
}

Avatar
Lazarus404

Community Member, 72 Posts

27 May 2011 at 8:19pm

Hi Swaiba,

Thanks, but I can't do that either, because I'd still be nesting control expressions, which isn't allowed. Otherwise, I could use it as it :)

Regards,
Lee

Avatar
swaiba

Forum Moderator, 1899 Posts

27 May 2011 at 8:31pm

because I'd still be nesting control expressions, which isn't allowed

How is that? Where did you get that idea?
I nest controls all the time...

Avatar
Lazarus404

Community Member, 72 Posts

27 May 2011 at 8:59pm

Doh! And therein lies my problem :) I'm not sure where I read that, but I've been avoiding it like soap on the floor of a communal shower.

Thanks buddy, I'll give that a go :)

Lee

Avatar
swaiba

Forum Moderator, 1899 Posts

27 May 2011 at 9:09pm

Edited: 27/05/2011 9:10pm

Good luck Lee, all silverstripe Bristolians together!

Go to Top