* $items = array( * new SelectionGroup_Item( * 'one', * new LiteralField('one', 'one view'), * 'one title' * ), * new SelectionGroup_Item( * 'two', * new LiteralField('two', 'two view'), * 'two title' * ), * ); * $field = new SelectionGroup('MyGroup', $items); * * * @package forms * @subpackage fields-structural */ class SelectionGroup extends CompositeField { /** * Create a new selection group. * * @param string $name The field name of the selection group. * @param array $items The list of {@link SelectionGroup_Item} * @param mixed $value */ public function __construct($name, $items, $value = null) { $this->name = $name; if($value !== null) { $this->setValue($value); } $selectionItems = array(); foreach($items as $key => $item) { if($item instanceof SelectionGroup_Item) { $selectionItems[] = $item; } else { // Convert legacy format if(strpos($key,'//') !== false) { list($key,$title) = explode('//', $key,2); } else { $title = null; } $selectionItems[] = new SelectionGroup_Item($key, $item, $title); } } parent::__construct($selectionItems); Requirements::css(FRAMEWORK_DIR . '/client/dist/styles/SelectionGroup.css'); } public function FieldSet() { return $this->FieldList(); } public function FieldList() { $items = parent::FieldList()->toArray(); $count = 0; $newItems = array(); foreach($items as $item) { if($this->value == $item->getValue()) { $firstSelected = " class=\"selected\""; $checked = true; } else { $firstSelected = ""; $checked = false; } $itemID = $this->ID() . '_' . (++$count); $extra = array( "RadioButton" => FormField::create_tag( 'input', array( 'class' => 'selector', 'type' => 'radio', 'id' => $itemID, 'name' => $this->name, 'value' => $item->getValue(), 'checked' => $checked ) ), "RadioLabel" => FormField::create_tag( 'label', array('for' => $itemID), $item->getTitle() ), "Selected" => $firstSelected, ); $newItems[] = $item->customise($extra); } return new ArrayList($newItems); } public function hasData() { return true; } public function FieldHolder($properties = array()) { Requirements::javascript(THIRDPARTY_DIR .'/jquery/jquery.js'); Requirements::javascript(FRAMEWORK_DIR . '/client/dist/js/SelectionGroup.js'); Requirements::css(FRAMEWORK_DIR . '/client/dist/styles/SelectionGroup.css'); $obj = $properties ? $this->customise($properties) : $this; return $obj->renderWith($this->getTemplates()); } } class SelectionGroup_Item extends CompositeField { /** * @var String */ protected $value; /** * @var String */ protected $title; /** * @param String $value Form field identifier * @param FormField $field Contents of the option * @param String $title Title to show for the radio button option */ function __construct($value, $fields = null, $title = null) { $this->value = $value; $this->title = ($title) ? $title : $value; if($fields && !is_array($fields)) $fields = array($fields); parent::__construct($fields); } function getTitle() { return $this->title; } function setTitle($title) { $this->title = $title; return $this; } function getValue() { return $this->value; } function setValue($Value) { $this->value = $Value; return $this; } }