backboneit_selectri
A selection widget for large structured option sets., (*1)
Usage in DCA
Input type token: selectri
, (*2)
eval Parameters
Value retrieval, (*3)
The widgets canonical representation of selection values are arrays that map
selected nodes' keys to arrays containing the selected nodes' key at the array
key _key
as well as additional data associated with this selected node., (*4)
If you work with the widget directly, it is strongly recommended that you use
the getValue/setValue methods, which will always return values in this canonical
representation form., (*5)
If you however use this widget in DCAs, it is desired that the widget's value
property (which is used by the DCA) is converted to - on retrieval - or
converted from - on set - a specific format. To avoid the registration of
load/save callbacks, the value
property maintains an array of selected
options' keys or, if max
is set to 1
, a single selected option's key. For
commonly used conversions there exist the following eval properties to further
modify the value
's property content:, (*6)
-
findInSet
- boolean - defaults to false
, (*7)
-
get: Returns a comma-separated list of the selected options' keys. This
behavior takes precedence over the canonical
setting., (*8)
-
set: Strings are handled as comma-separated lists of selected options'
keys and gets split at ,
. A normalization to the canonical form is done after., (*9)
-
canonical
- boolean - defaults to false
, (*10)
-
get: Returns the canonical form of the selection or, if max
is set to
1
, only the selected option's data array., (*11)
-
set: A normalization to the canonical form is done., (*12)
Basic widget configuration, (*13)
-
min
- integer, non-negative - defaults to 0
, (*14)
How many nodes must be selected at least., (*15)
If the max
parameter is less than the configured minimum, the min
parameter will be considered equal to the configured maximum., (*16)
-
max
- integer, positive - defaults to 1
, (*17)
How many nodes can be selected at most., (*18)
-
mandatory
- boolean - optional - deprecated: the min
parameter
should be used, (*19)
If given and true
, the min
parameter will be set to 1
, if it is not
> 0
already.
If given and false
, the min
parameter will be set to 0
., (*20)
-
multiple
- boolean - optional - deprecated: the max
parameter
should be used, (*21)
If given and true
, the max
parameter will be set to PHP_INT_MAX
, if it
is not > 1
already.
If given and false
, the max
parameter will be set to 1
., (*22)
-
searchLimit
- integer, positive - defaults to 20
, (*23)
The max nodes retrieved from searches., (*24)
-
sort
- string, one of list
, preorder
, tree
- defaults to list
, (*25)
The structure implied on the made selection, (*26)
-
list
: the selection is a list (order matters), the selection is
sortable
-
preorder
not implemented: the selection is a set (order does not
matter), the selection is not sortable and preordered
-
tree
not implemented: the selection is a tree, the selection can
be arranged with tree properties
-
height
- string - defaults to auto
, (*27)
The CSS value and unit of the CSS height
property of the selection tree., (*28)
-
tl_class
- string - optional, (*29)
Only used in Backend., (*30)
-
class
- string - optional, (*31)
Use this to apply your custom CSS savely. You can use "radio" or "checkbox"
to replace the Contao-style select (+) and deselect (x) icons with Windows
legacy input-like icon images., (*32)
-
data
- string or an object implementing SelectriDataFactory
- defaults
to the string SelectriContaoTableDataFactory
, (*33)
If a factory object is given, these factory will be used to generate
a data instance for created widgets. The setParameters
method is not
called. This is the recommended way to provide a SelectriData
, as all data
implementation specific features and options can be properly configured through
their factories., (*34)
If a string is given, it must name a class implementing
SelectriDataFactory
. When creating the widget, a new factory instance is
created and its setParameters
method is called with the attributes of the
widget (the widget's attributes contains all settings from the DCA's eval
array)., (*35)
Factory specific configuration (used by setParameters
method of the
SelectriDataFactory
class given in the data
parameter), (*36)
-
treeTable
- string - optional, (*37)
The name of the table to fetch tree nodes from., (*38)
The parameter is used by SelectriContaoTableDataFactory::setParameters
method and preconfigures the data according to common Contao standards like
primary key column id
and parent key column pid
., (*39)
-
mode
- string - defaults to all
, (*40)
The parameter is used by SelectriTableDataFactory::setParameters
method., (*41)
-
all
: all nodes are selectable
-
leaf
: only leaf nodes are selectable
-
inner
: only inner nodes are selectable
Simple example for usage in DCA
$GLOBALS['TL_DCA']['tl_mydca']['fields']['mySelectriField'] = array(
...
'inputType' => 'selectri',
...
'eval' => array(
// all values are the defaults
'min' => 0, // the selection can be empty
'max' => 1, // let the user select not more than 1 item
'searchLimit' => 20, // max search results
'findInSet' => false, // dont use csv
'additionalInput' => false, // no additional inputs via node content callback is injected
'sort' => 'list',
'height' => 'auto', // the height of the tree widget
'tl_class' => 'clr', // some css-classes,
'class' => '', // use "radio" or "checkbox" to replace the icons
'data' => 'SelectriContaoTableDataFactory', // the data factory class to use
'treeTable' => 'tl_page', // a DB-table containing the tree structure (Contao-like adjacency list)
'mode' => 'all', // which nodes are selectable: "all", "leaf", "inner"
),
...
);
Advanced example for usage in DCA
Instead of using a implicit created factory instance by providing a factory
class name in the previous example, you can preconfigure your own factory
instance and have full access to all parameters used by the SelectriData
-class
produced by the factory., (*42)
$data = SelectriContaoTableDataFactory::create();
// use the tl_page table for the tree structure
$data->setTreeTable('tl_page');
// show all nodes
$data->getConfig()->setTreeMode('all');
// search the title and pageTitle column
$data->getConfig()->setTreeSearchColumns(array('title', 'pageTitle'));
// only show nodes matching the condition
$data->getConfig()->setTreeConditionExpr('type = \'regular\' AND tstamp > 0');
// only let the user select nodes matching the condition
$data->getConfig()->setSelectableExpr('hide <> \'1\'');
// for more parameters see the factory class and the underlaying config class
$GLOBALS['TL_DCA']['tl_mydca']['fields']['mySelectriField'] = array(
...
'inputType' => 'selectri',
...
'eval' => array(
'min' => 0,
'max' => 1,
'searchLimit' => 20,
'tl_class' => 'clr',
'class' => 'checkbox',
// assign your preconfigured factory instance to the widgets configuration
'data' => $data,
),
...
);