3063 Posts in 864 Topics by 646 members
|
Page:
1
|
Go to End | |
| Author | Topic: | 1267 Views |
-
Generate array for GroupedDropdownField

16 December 2009 at 7:14am Last edited: 16 December 2009 5:02pm
Hi,
Hoping someone can help me... I need to generate an array of arrays in order to populate a GroupedDropdownField on a form.
I have an TrekPage class that lets users add multiple TrekDates via a DataObjectManager, each with a StartDate and EndDate field. I'd love to be able to write a function that iterates through the available TrekPages and creates an array for each consisting of dates, each of which is the result of a function that determines the range of the TrekDate's StartDate & EndDate (like this http://silverstripe.org/template-questions/show/267739#post267739).
i know i can use things like $this->toArray(); (http://doc.silverstripe.org/doku.php?id=dataobjectset) but haven't had much luck so far. And sorry if the above isn't explained very clearly, I'm new to a lot of this..
Thanks,
jack -
Re: Generate array for GroupedDropdownField

16 December 2009 at 5:01pm Last edited: 16 December 2009 6:25pm
Ok this is what I'm up to so far
1. creates a form with new GroupedDropdownField
2. function makes an array of arrays for each TrekPage (event page) consisting dates returned by the DateRange function. This array is inserted into the third parameter of the GroupedDropdownField.
3. on BookingPage.ss I have $BookingForm which should display a <select> drop-down with dates organised into <optgroups> for each TrekPage.BookingPage.php
...function BookingForm() {
return new Form($this, 'BookingForm', new FieldSet(
new GroupedDropdownField(
'trek',
'Trek/Date',
$treksArray
),...
}
function getTreksArray() {
$trekPage = DataObject::get('TrekPage');
$treksArray = array();
foreach($trekPage as $trek) {
$trekData = array();
foreach($trek->TrekDate as $trekDate) {
$dateRange = DateRange($trekDate);
$trekData->push($dateRange);
}
return $trekData;
}
return $treksArray;
}
function DateRange($date) {
$start = new Date();
$start->setValue($date->StartDate);
if (!is_null($this->EndDate)) { // Check if there is an end date
$end = new Date();
$end->setValue($date->EndDate);
return $start->RangeString($end);
} else {
return $start->Long();
}
}
| 1267 Views | ||
|
Page:
1
|
Go to Top |

