Možnosti výběru

Formulářové pole Select, MultiSelect a RadioButton musí mít nutné definované možnosti ze kterých si uživatel vybere.

Základní způsob jak možnosti definovat je asociované pole, nebo iterátor, kde klíč reprezentuje budoucí vybranou hodnotu a hodnota je to co se uživateli zobrazí.

Někdy může být nutné ovlivnit vizuální styl jednotlivých možností. Vezměme si zase jako příklad administraci ukázkové aplikace. Ve správě rolí vybíráte pomocí pole MultiSelect jaká práva bude role mít. Možnosti jsou odsazené, skupiny možností nadepsané tučně ... Pomocí jednoduchého asociovaného pole by nebylo možné této funkcionality nějak jednoduše a transparentně docílit.

Z toho důvodu je vždy každá možnost reprezentována instancí třídy Jet\Form_Field_Select_Option. Možnosti lze definovat rovnou jako pole instancí této třídy, nebo možnosti definovat jako prosté pole či instanci iterátoru a formulářový prvek instance třídy Jet\Form_Field_Select_Option automaticky vytvoří. Viz příklad:

use Jet\Form_Field_Select;
use 
Jet\Logger;
use 
Jet\Tr;

$select_field = new Form_Field_Select('event_class''Event class:');
$select_field->setSelectOptions([
    
Logger::EVENT_CLASS_WARNING => Tr::_('Warning'),
    
Logger::EVENT_CLASS_DANGER => Tr::_('Danger'),
    
Logger::EVENT_CLASS_INFO => Tr::_('Info')    
]);

$options $select_field->getSelectOptions();

$options[Logger::EVENT_CLASS_WARNING]->setSelectOptionCssClass('warning');
$options[Logger::EVENT_CLASS_DANGER]->setSelectOptionCssClass('danger');
$options[Logger::EVENT_CLASS_INFO]->setSelectOptionCssClass('info');

$select_field->setSelectOptions$options );

Pozor! Formulář má vestavěné napojení na překladač. O překlad možností se však formulář nestará, protože nezná logiku překladu (co překládat, co ne, jestli doplňovat hodnoty a tak dále).

Ovšem asociované pole není jediná cesta jak možnosti definovat. Možností se může stát libovolný objekt jehož třída implementuje rozhraní Jet\Form_Field_Select_Option_Interface. Příkladem takové třídy je Jet\Data_Tree_Node. Tedy pokud nastavíte jako možnosti výběru pole obsahující objekty implementující rozhraní Jet\Form_Field_Select_Option_Interface, nebo iterátor poskytující takové objekty, pak formulářové prvky hodnoty nepřevádí na instance třídy Jet\Form_Field_Select_Option, ale ponechávají původní instance jako možnosti výběru.

Předchozí kapitola
Jet\Form_Field_FileImage / Form_Field::TYPE_FILE_IMAGE
Další kapitola
Jet\Form_Field_Select_Option_Interface