tag. * * Setting a $has_one relation * * Using here an example of an art gallery, with Exhibition pages, * each of which has a Gallery they belong to. The Gallery class is also user-defined. * * static $has_one = array( * 'Gallery' => 'Gallery', * ); * * public function getCMSFields() { * $fields = parent::getCMSFields(); * $galleries = DataObject::get('Gallery'); * if ($galleries) { * $galleries = $galleries->toDropdownMap('ID', 'Title', '(Select one)', true); * } * $fields->addFieldToTab('Root.Content.Main', new DropdownField('GalleryID', 'Gallery', $galleries), 'Content'); * * * As you see, you need to put "GalleryID", rather than "Gallery" here. * * Populate with Array * * Example model defintion: * * class MyObject extends DataObject { * static $db = array( * 'Country' => "Varchar(100)" * ); * } * * * Exampe instantiation: * * new DropdownField( * 'Country', * 'Country', * array( * 'NZ' => 'New Zealand', * 'US' => 'United States' * 'GEM'=> 'Germany' * ) * ); * * * Populate with Enum-Values * * You can automatically create a map of possible values from an {@link Enum} database column. * * Example model definition: * * class MyObject extends DataObject { * static $db = array( * 'Country' => "Enum('New Zealand,United States,Germany','New Zealand')" * ); * } * * * Field construction: * * new DropdownField( * 'Country', * 'Country', * singleton('MyObject')->dbObject('Country')->enumValues() * ); * * * @see CheckboxSetField for multiple selections through checkboxes instead. * @see ListboxField for a single element will be * rendered with the first option from {@link $source} selected. */ protected $hasEmptyDefault = false; /** * @var string $emptyString The title shown for an empty default selection, * e.g. "Select...". */ protected $emptyString = ''; /** * Creates a new dropdown field. * @param $name The field name * @param $title The field title * @param $source An map of the dropdown items * @param $value The current value * @param $form The parent form * @param $emptyString mixed Add an empty selection on to of the {@link $source}-Array * (can also be boolean, which results in an empty string) * Argument is deprecated in 2.3, please use {@link setHasEmptyDefault()} and {@link setEmptyString()} instead. */ function __construct($name, $title = null, $source = array(), $value = "", $form = null, $emptyString = null) { $this->source = $source; if($emptyString) $this->setHasEmptyDefault(true); if(is_string($emptyString)) $this->setEmptyString($emptyString); parent::__construct($name, ($title===null) ? $name : $title, $value, $form); } /** * Returns a * tag and option elements inside is as the content of the