Jump to:

22979 Posts in 11815 Topics by 2826 members

General Questions

SilverStripe Forums » General Questions » Page property access in Controller

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: 1 2
Go to End
Author Topic: 1482 Views
  • Lazarus404
    Avatar
    Community Member
    71 Posts

    Page property access in Controller Link to this post

    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

  • swaiba
    Avatar
    Forum Moderator
    1769 Posts

    Re: Page property access in Controller Link to this post

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

  • Lazarus404
    Avatar
    Community Member
    71 Posts

    Re: Page property access in Controller Link to this post

    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

  • swaiba
    Avatar
    Forum Moderator
    1769 Posts

    Re: Page property access in Controller Link to this post

    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;
    }

  • Lazarus404
    Avatar
    Community Member
    71 Posts

    Re: Page property access in Controller Link to this post

    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

  • swaiba
    Avatar
    Forum Moderator
    1769 Posts

    Re: Page property access in Controller Link to this post

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

  • Lazarus404
    Avatar
    Community Member
    71 Posts

    Re: Page property access in Controller Link to this post

    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

  • swaiba
    Avatar
    Forum Moderator
    1769 Posts

    Re: Page property access in Controller Link to this post

    Good luck Lee, all silverstripe Bristolians together!

    1482 Views
Page: 1 2
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.