Version: current

# Class TreeMultiselectField

This formfield represents many-many joins using a tree selector shown in a dropdown styled element which can be added to any form usually in the CMS.

  Object
  ViewableData implements IteratorAggregate
  RequestHandler
  FormField
  TreeDropdownField
  TreeMultiselectField

### Direct known subclasses

`TreeMultiselectField_Readonly`

Package: forms\fields-relational
Located at sapphire/forms/TreeMultiselectField.php

## Methods summary

`public` | # `__construct( string $name, string $title, sourceObject $sourceObject = "Group", string $keyField = "ID", string $labelField = "Title" )` CAVEAT: for search to work properly $labelField must be a database field, or you need to setSearchFunction. CAVEAT: for search to work properly $labelField must be a database field, or you need to setSearchFunction. #### Parameters $name string $name the field name $title string $title the field label $sourceObject sourceObject The object-type to list in the tree. Must be a 'hierachy' object. Alternatively, you can set this to an array of key/value pairs, like a dropdown source. In this case, the field will act like show a flat list of tree items, without any hierachy. This is most useful in conjunction with TreeMultiselectField, for presenting a set of checkboxes in a compact view. $keyField string $keyField to field on the source class to save as the field value (default ID). $labelField string $labelField the field name to show as the human-readable value on the tree (default Title). #### Overrides `TreeDropdownField::__construct`
`public` | # `getItems( )` Return this field's linked items Return this field's linked items
`public string` | # `Field( )` We overwrite the field attribute to add our hidden fields, as this formfield can contain multiple values. We overwrite the field attribute to add our hidden fields, as this formfield can contain multiple values. #### Returns `string` string #### Overrides `TreeDropdownField::Field`
`public` | # `saveInto( `DataObject` $record )` Save the results into the form Calls function $record->onChange($items) before saving to the assummed Component set. Save the results into the form Calls function $record->onChange($items) before saving to the assummed Component set. #### Overrides `FormField::saveInto`
`public` | # `performReadonlyTransformation( )` Changes this field to the readonly field. Changes this field to the readonly field. #### Overrides `TreeDropdownField::performReadonlyTransformation`

### Methods inherited from TreeDropdownField

`filterMarking()`, `objectForKey()`, `populateIDs()`, `setFilterFunction()`, `setSearchFunction()`, `setTreeBaseID()`, `tree()`

### Methods inherited from FormField

`FieldHolder()`, `LeftTitle()`, `Link()`, `Message()`, `MessageType()`, `Name()`, `Required()`, `RightTitle()`, `SmallFieldHolder()`, `Title()`, `Type()`, `Value()`, `addExtraAttribute()`, `addExtraClass()`, `allowHTML5()`, `allow_html5()`, `attrName()`, `attrTitle()`, `attrValue()`, `createTag()`, `dataValue()`, `debug()`, `describe()`, `extraClass()`, `fieldHolderTemplates()`, `fieldTemplates()`, `forTemplate()`, `getCustomValidationMessage()`, `getExtraClasses()`, `getForm()`, `getHTML5Attribute()`, `getTabIndex()`, `getTabIndexHTML()`, `hasClass()`, `hasData()`, `id()`, `isComposite()`, `isDisabled()`, `isReadonly()`, `jsValidation()`, `name_to_label()`, `performDisabledTransformation()`, `removeExtraAttribute()`, `removeExtraClass()`, `rootFieldSet()`, `securityTokenEnabled()`, `setAutocomplete()`, `setContainerFieldSet()`, `setCustomValidationMessage()`, `setDisabled()`, `setError()`, `setFieldHolderTemplate()`, `setForm()`, `setHTML5Attribute()`, `setLeftTitle()`, `setName()`, `setReadonly()`, `setRightTitle()`, `setSmallFieldHolderTemplate()`, `setTabIndex()`, `setTemplate()`, `setTitle()`, `setValue()`, `smallFieldHolderTemplates()`, `transform()`, `useHTML5()`, `use_html5()`, `validate()`

### Methods inherited from RequestHandler

`allowedActions()`, `checkAccessAction()`, `getRequest()`, `handleRequest()`, `hasAction()`, `httpError()`

### Methods inherited from ViewableData

`ATT_val()`, `BaseHref()`, `CSSClasses()`, `ColumnBreak()`, `ColumnCalc()`, `ColumnNumber()`, `ColumnPad()`, `ColumnPos()`, `CurrentMember()`, `CurrentPage()`, `Debug()`, `Even()`, `EvenOdd()`, `First()`, `FirstLast()`, `HasPerm()`, `IsAjax()`, `JS_val()`, `Last()`, `Me()`, `Middle()`, `MiddleString()`, `Modulus()`, `MultipleOf()`, `Odd()`, `Pos()`, `RAW_val()`, `SQL_val()`, `ThemeDir()`, `ThemeName()`, `Top()`, `TotalItems()`, `XML_val()`, `__get()`, `__isset()`, `__set()`, `buildCastingCache()`, `cachedCall()`, `castingClass()`, `castingHelper()`, `castingHelperPair()`, `castingObjectCreator()`, `castingObjectCreatorPair()`, `customise()`, `defineMethods()`, `escapeTypeForField()`, `getField()`, `getIterator()`, `getSecurityID()`, `getXMLValues()`, `hasField()`, `hasValue()`, `i18nLocale()`, `iteratorProperties()`, `obj()`, `renderWith()`, `setCustomisedObj()`, `setField()`

### Methods inherited from Object

`__call()`, `__toString()`, `__wakeup()`, `addMethodsFrom()`, `addStaticVars()`, `addWrapperMethod()`, `add_extension()`, `add_static_var()`, `allMethodNames()`, `cacheToFile()`, `cacheToFileWithArgs()`, `clearCache()`, `combined_static()`, `create()`, `createMethod()`, `create_from_string()`, `exists()`, `extInstance()`, `extend()`, `getCustomClass()`, `getExtensionInstance()`, `getExtensionInstances()`, `get_extensions()`, `get_static()`, `hasExtension()`, `hasMethod()`, `has_extension()`, `invokeWithExtensions()`, `is_a()`, `loadCache()`, `parentClass()`, `parse_class_spec()`, `remove_extension()`, `sanitiseCachename()`, `saveCache()`, `set_stat()`, `set_static()`, `set_uninherited()`, `stat()`, `strong_create()`, `uninherited()`, `uninherited_static()`, `useCustomClass()`

### Magic methods summary

## Properties summary

### Properties inherited from TreeDropdownField

`$allowed_actions`, `$baseID`, `$filterCallback`, `$keyField`, `$labelField`, `$searchCallback`, `$searchExpanded`, `$searchIds`, `$url_handlers`

### Properties inherited from FormField

`$autocomplete`, `$containerFieldSet`, `$customValidationMessage`, `$description`, `$disabled`, `$dontEscape`, `$extraAttributes`, `$extraClass`, `$extraClasses`, `$fieldHTML5`, `$fieldHolderTemplate`, `$form`, `$html5Attributes`, `$leftTitle`, `$message`, `$messageType`, `$name`, `$possible_autocomplete_values`, `$readonly`, `$rightTitle`, `$smallFieldHolderTemplate`, `$tabIndex`, `$template`, `$title`, `$use_html5`, `$value`

### Properties inherited from RequestHandler

`$brokenOnConstruct`, `$request`

### Properties inherited from ViewableData

`$casting`, `$customisedObject`, `$default_cast`, `$failover`, `$iteratorPos`, `$iteratorTotalItems`

### Properties inherited from Object

`$class`, `$extension_instances`, `$extensions`

[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the Silverstripe Forums to ask development related questions. -