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're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

Form Questions /

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

Set default value for OptionsetField


Go to End


2 Posts   3909 Views

Avatar
Ben_W

Community Member, 80 Posts

25 May 2009 at 7:10pm

I have the following code in one of my forms for the backend cms, it seems that $source will only take numeric array, not associative array.
original code:
$myMediaType = new OptionsetField(
$name = "MediaType",
$title = "Media Type",
$source = array(
"Video" => "Video",
"Audio" => "Audio"
),
$value = "Video"
);
$fields->addFieldToTab('Root.Content.Main', $myMediaType, 'Content');

this will not work, but if I change the $source to a numeric array, it will set the default value.

$myMediaType = new OptionsetField(
$name = "MediaType",
$title = "Media Type",
$source = array("Video", "Audio"),
$value = 0
);
$fields->addFieldToTab('Root.Content.Main', $myMediaType, 'Content');

Does anyone come cross this problem, I would prefer to store string 'Video', 'Audio' into the database rather than integer. Could someone please point me the right direction? Thank you!

Avatar
mikhail

Community Member, 4 Posts

30 December 2011 at 12:26pm

Edited: 30/12/2011 12:29pm

Old thread, but I'm having the same problem. Resorted to storing int and using a numeric array as source.
Would still prefer to store a string.

If using associative array, on first load the OptionsetField marks no default. On page refresh, it correctly marks the db value.

...Class PieHolder...

public static $db = array(
'Pie' => "Enum('Pie1, Pie2, Pie3')"
)

...Form Constructor...

new OptionsetField('Pie', 'Pie', $PieHolder->dbObject('Pie')->enumValues(), $PieHolder->Pie);

=== no default marked on first load