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, Ed, biapar, Willr, Ingo, swaiba

Sort DataList by ID array

Go to End

5 Posts   2524 Views


Community Member, 9 Posts

18 July 2012 at 7:40pm


i got array with last opened pages and i wanna ask you how to order items in datalist by this ordered array

i tried to add items one by one but it doesnt work

$idList = Session::get('recentproducts');
$dl = DataList::create('ProductPage')->byIDs(array($idList[0]));
for ($i = 1; $i < count($idList); $i++)
	$dl->addMany( DataList::create('ProductPage')->byIDs(array($idList[$i])));	
return $dl;

aby better idea?


Community Member, 15 Posts

19 July 2012 at 12:05am


Community Member, 9 Posts

19 July 2012 at 7:40pm

thanks, but i'm not sure you understood my problem

I have array with ID of pages
(for example 35 43 30 32 40 50 83 52)
and I want to create DataList with DataObjects in same order as in array

(or maybe i dont understand how to use sort method in this case, can you show me it in code please)


Community Member, 15 Posts

19 July 2012 at 8:24pm

Edited: 20/07/2012 1:47am

Sorry, I misunderstood your problem, but although you can use the sort metod combined with SQL functions .

You have an array with product ids and want to create a DataList with that products wich are in the same order like in your array?

Try the following:

// $idList is a comma separated string?
$dl = DataList::create('ProductPage')->byIDs(array($idList[0]))->sort('FIELD(ID, ' . $idList . ')');

// Plain SQL would look like 
// SELECT * FROM ProductPage WHERE ID IN (35, 43 ,30 ,32) ORDER BY FIELD (ID, 35, 43, 30, 32);



Community Member, 156 Posts

20 July 2012 at 1:46am

If you are planning for this to be in a GridField and you wish to change the sorting I would checkout the Sortable GridField Component.

Then you can drag and drop those items into whatever order you want and just use the sort() function when you build the list.