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.

Data Model Questions /

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

Decorating DataObjectSet?


Go to End


2 Posts   1449 Views

Avatar
fatlewis

Community Member, 1 Post

10 March 2012 at 5:35am

Hey, this is my first post so be nice!

A site that I've been working on has portfolio pieces stored as DataObjects, each with a relevant image. These are getting pulled to the template and shown in a widget, but the aim has been to show a random 4 logos, rather than 4 from a specifically sorted set.

Being somewhat averse to using mySQL's "RAND()" function in a query, I figured the best way of doing it would be to initialize the full set of DataObjects and then use a shuffle function (which for some reason isn't in the core DataObjectSet class). Unfortunately decorating the class and using:

public function Shuffle() {
	shuffle($this->owner->items);
}

Throws up the error:

[Notice] Indirect modification of overloaded property DataObjectSet::$items has no effect

I wondered if anyone could explain why this was and how one would go about decorating the class correctly (if at all)?

(FYI, I managed to achieve what I wanted by extending DataObjectSet, but wondered why decorating wasn't working)

Cheers!

Avatar
dizzystuff

Community Member, 94 Posts

8 April 2012 at 3:09am

Edited: 08/04/2012 3:10am

Hi fatlewis! Could it just be that you're missing the ( ) at the end of ->items?

shuffle($this->owner->Items());

This isn't my first post but usually I'm here asking questions not answering them (I'm procrastinating pretty epically right now so figured I'd try to be useful at least) so please be nice back if this is doesn't do the trick :)

EDIT: just saw the date on the post heh. ah well. hope it helps someone.