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.

Form Questions

Mapping Two Fields using toDropDownMap ??


Reply

3 Posts   1864 Views

Avatar
ciaranhickey

26 January 2010 at 2:43am Community Member, 17 Posts

Hi,

I'm trying to figure out how to show two fields side by side in a single, mapped dropdown. For example in the code below I want the dropdown to display the combination of FirstName + LastName (and Map it to that Author's ID). I can work with a single field (either FirstName OR LastName) but can't seem to concatenate them both to be displayed in the Dropdown...

//This works fine but I need to include the LastName also
$authorData = DataObject::get('Author');
if($authorData->exists()) {
   $AuthorSource = $authorData->toDropDownMap('ID', 'FirstName', 'Select Author');
}

I tried using a function eg.

$authorData->toDropDownMap('ID', 'getFullName', 'Select Author');

and the function

function getFullName(){
      
$authorData = DataObject::get('Author');
return $authorData->FirstName.", ".$authorData->LastName;

}

But I had no luck with this. Would appreciate any help on this. It's driving me mad.

Regards,
Ciarán

Avatar
zenmonkey

29 January 2010 at 7:34am Community Member, 528 Posts

Well an you could also create an extra column on your DataObject that contains the full name and fill it with an onBeforeWrite instead of manually filling it in. Thats a quick in-elegant fix. My only other idea is even more complex. You could output the first name and last name to arrays and marry them back up, but I don't know if you can Map and array to drop down

Avatar
Rossel

8 March 2012 at 4:35pm Community Member, 18 Posts

I know this is very late but I recently just ran into the same issue. So my solution may help for those that find this page.

You can reference a function, as you know, in your toDropDownMap call instead of a field.

$member = $member->toDropdownMap('ID', 'getName', '(Select one)', true);

Either create a function in your custom class. Or use these ones that already exist in the Member class:
getTitle will return 'Surname, FirstName'
getName will return 'FirstName Surname'