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

Page property access in Controller


Go to End
Reply


10 Posts   1849 Views

Avatar
Lazarus404

Community Member, 71 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, 1805 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, 71 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, 1805 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, 71 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, 1805 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, 71 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, 1805 Posts

27 May 2011 at 9:09pm

Edited: 27/05/2011 9:10pm

Good luck Lee, all silverstripe Bristolians together!

Go to Top