Вход Регистрация
Файл: framework/web/form/CFormButtonElement.php
Строк: 226
<?php
/**
 * CFormButtonElement class file.
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @link http://www.yiiframework.com/
 * @copyright 2008-2013 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

/**
 * CFormButtonElement represents a form button element.
 *
 * CFormButtonElement can represent the following types of button based on {@link type} property:
 * <ul>
 * <li>htmlButton: a normal button generated using {@link CHtml::htmlButton}</li>
 * <li>htmlReset a reset button generated using {@link CHtml::htmlButton}</li>
 * <li>htmlSubmit: a submit button generated using {@link CHtml::htmlButton}</li>
 * <li>submit: a submit button generated using {@link CHtml::submitButton}</li>
 * <li>button: a normal button generated using {@link CHtml::button}</li>
 * <li>image: an image button generated using {@link CHtml::imageButton}</li>
 * <li>reset: a reset button generated using {@link CHtml::resetButton}</li>
 * <li>link: a link button generated using {@link CHtml::linkButton}</li>
 * </ul>
 * The {@link type} property can also be a class name or a path alias to the class. In this case,
 * the button is generated using a widget of the specified class. Note, the widget must
 * have a property called "name".
 *
 * Because CFormElement is an ancestor class of CFormButtonElement, a value assigned to a non-existing property will be
 * stored in {@link attributes} which will be passed as HTML attribute values to the {@link CHtml} method
 * generating the button or initial values of the widget properties.
 *
 * @property string $on Scenario names separated by commas. Defaults to null.
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @package system.web.form
 * @since 1.1
 */
class CFormButtonElement extends CFormElement
{
    
/**
     * @var array Core button types (alias=>CHtml method name)
     */
    
public static $coreTypes=array(
        
'htmlButton'=>'htmlButton',
        
'htmlSubmit'=>'htmlButton',
        
'htmlReset'=>'htmlButton',
        
'button'=>'button',
        
'submit'=>'submitButton',
        
'reset'=>'resetButton',
        
'image'=>'imageButton',
        
'link'=>'linkButton',
    );

    
/**
     * @var string the type of this button. This can be a class name, a path alias of a class name,
     * or a button type alias (submit, button, image, reset, link, htmlButton, htmlSubmit, htmlReset).
     */
    
public $type;
    
/**
     * @var string name of this button
     */
    
public $name;
    
/**
     * @var string the label of this button. This property is ignored when a widget is used to generate the button.
     */
    
public $label;

    private 
$_on;

    
/**
     * Returns a value indicating under which scenarios this button is visible.
     * If the value is empty, it means the button is visible under all scenarios.
     * Otherwise, only when the model is in the scenario whose name can be found in
     * this value, will the button be visible. See {@link CModel::scenario} for more
     * information about model scenarios.
     * @return string scenario names separated by commas. Defaults to null.
     */
    
public function getOn()
    {
        return 
$this->_on;
    }

    
/**
     * @param string $value scenario names separated by commas.
     */
    
public function setOn($value)
    {
        
$this->_on=preg_split('/[s,]+/',$value,-1,PREG_SPLIT_NO_EMPTY);
    }

    
/**
     * Returns this button.
     * @return string the rendering result
     */
    
public function render()
    {
        
$attributes=$this->attributes;
        if(isset(
self::$coreTypes[$this->type]))
        {
            
$method=self::$coreTypes[$this->type];
            if(
$method==='linkButton')
            {
                if(!isset(
$attributes['params'][$this->name]))
                    
$attributes['params'][$this->name]=1;
            }
            elseif(
$method==='htmlButton')
            {
                
$attributes['type']=$this->type==='htmlSubmit' 'submit' : ($this->type==='htmlReset' 'reset' 'button');
                
$attributes['name']=$this->name;
            }
            else
                
$attributes['name']=$this->name;
            if(
$method==='imageButton')
                return 
CHtml::imageButton(isset($attributes['src']) ? $attributes['src'] : '',$attributes);
            else
                return 
CHtml::$method($this->label,$attributes);
        }
        else
        {
            
$attributes['name']=$this->name;
            
ob_start();
            
$this->getParent()->getOwner()->widget($this->type$attributes);
            return 
ob_get_clean();
        }
    }

    
/**
     * Evaluates the visibility of this element.
     * This method will check the {@link on} property to see if
     * the model is in a scenario that should have this string displayed.
     * @return boolean whether this element is visible.
     */
    
protected function evaluateVisible()
    {
        return empty(
$this->_on) || in_array($this->getParent()->getModel()->getScenario(),$this->_on);
    }
}
Онлайн: 2
Реклама