Вход Регистрация
Файл: framework/forms/SelectionGroup.php
Строк: 124
<?php
/**
 * Represents a number of fields which are selectable by a radio
 * button that appears at the beginning of each item.  Using CSS, you can
 * configure the field to only display its contents if the corresponding radio
 * button is selected. Each item is defined through {@link SelectionGroup_Item}.
 *
 * @example <code>
 * $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);
 * </code>
 *
 * @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 '/css/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   '/javascript/SelectionGroup.js');
        
Requirements::css(FRAMEWORK_DIR '/css/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;
    }

}
Онлайн: 1
Реклама