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

Sort DataList by ID array


Reply


5 Posts   1128 Views

Avatar
Matulko

Community Member, 9 Posts

18 July 2012 at 7:40pm

hello

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?
thx

Avatar
dpde

Community Member, 14 Posts

19 July 2012 at 12:05am

http://api.silverstripe.org/trunk/sapphire/model/DataList.html#methodsort

Avatar
Matulko

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)

Avatar
dpde

Community Member, 14 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);

Greetings
dpde

Avatar
Blackdog

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.

https://github.com/UndefinedOffset/SortableGridField

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