> YII 类库手册 > CButtonColumn
zii.widgets.grid
继承 class CButtonColumn » CGridColumn » CComponent
源自 1.1
版本 $Id: CButtonColumn.php 3424 2011-10-24 20:13:19Z mDOMba $
源码
CButtonColumn represents a grid view column that renders one or several buttons.

By default, it will display three buttons, "view", "update" and "delete", which triggers the corresponding actions on the model of the row.

By configuring buttons and template properties, the column can display other buttons and customize the display order of the buttons.

公共属性

属性 类型 描述 定义在
afterDelete string a javascript function that will be invoked after the delete ajax call. CButtonColumn
buttons array the configuration for additional buttons. CButtonColumn
cssClassExpression string 计算PHP表达式中每一个数据元件, 其结果作为这个数据元件的CSS类名。在这个表达式中, 变量$row是行号(零基础); $data是该行的数据模型; $this是列的对象。 CGridColumn
deleteButtonImageUrl string the image URL for the delete button. CButtonColumn
deleteButtonLabel string the label for the delete button. CButtonColumn
deleteButtonOptions array the HTML options for the view button tag. CButtonColumn
deleteButtonUrl string a PHP expression that is evaLuated for every delete button and whose result is used as the URL for the delete button. CButtonColumn
deleteConfirmation string the confirmation message to be displayed when delete button is clicked. CButtonColumn
footerHtmlOptions array the HTML options for the footer cell tag. CButtonColumn
grid CGridView 拥有此列的表格视图对象。 CGridColumn
hasFooter boolean 确定此列是否有底部元件。 这决定基于是否footer已设置。 CGridColumn
headerHtmlOptions array the HTML options for the header cell tag. CButtonColumn
htmlOptions array the HTML options for the data cell tags. CButtonColumn
id string the ID of this column. CGridColumn
template string the template that is used to render the content in each data cell. CButtonColumn
updateButtonImageUrl string the image URL for the update button. CButtonColumn
updateButtonLabel string the label for the update button. CButtonColumn
updateButtonOptions array the HTML options for the update button tag. CButtonColumn
updateButtonUrl string a PHP expression that is evaluated for every update button and whose result is used as the URL for the update button. CButtonColumn
viewButtonImageUrl string the image URL for the view button. CButtonColumn
viewButtonLabel string the label for the view button. CButtonColumn
viewButtonOptions array the HTML options for the view button tag. CButtonColumn
viewButtonUrl string a PHP expression that is evaluated for every view button and whose result is used as the URL for the view button. CButtonColumn
visible boolean 此列是否可见。默认为true。 CGridColumn

公共方法

方法 描述 定义在
__call() 如果类中没有调的方法名,则调用这个方法。 CComponent
__construct() 构造方法。 CGridColumn
__get() 返回一个属性值、一个事件处理程序列表或一个行为名称。 CComponent
__isset() 检查一个属性是否为null。 CComponent
__set() 设置一个组件的属性值。 CComponent
__unset() 设置一个组件的属性为null。 CComponent
asa() 返回这个名字的行为对象。 CComponent
attachBehavior() 附加一个行为到组件。 CComponent
attachBehaviors() 附加一个行为列表到组件。 CComponent
attachEventHandler() 为事件附加一个事件处理程序。 CComponent
canGetProperty() 确定属性是否可读。 CComponent
canSetProperty() 确定属性是否可写。 CComponent
detachBehavior() 从组件中分离一个行为。 CComponent
detachBehaviors() 从组件中分离所有行为。 CComponent
detachEventHandler() 分离一个存在的事件处理程序。 CComponent
disableBehavior() 禁用一个附加行为。 CComponent
disableBehaviors() 禁用组件附加的所有行为。 CComponent
enableBehavior() 启用一个附加行为。 CComponent
enableBehaviors() 启用组件附加的所有行为。 CComponent
evaluateExpression() 计算一个PHP表达式,或根据组件上下文执行回调。 CComponent
getEventHandlers() 返回一个事件的附加处理程序列表。 CComponent
getHasFooter() 返回确定此列是否有底部元件。 这决定基于是否footer已设置。 CGridColumn
hasEvent() 确定一个事件是否定义。 CComponent
hasEventHandler() 检查事件是否有附加的处理程序。 CComponent
hasProperty() 确定属性是否被定义。 CComponent
init() Initializes the column. CButtonColumn
raiseEvent() 发起一个事件。 CComponent
renderDataCell() 渲染一个数据元件。 CGridColumn
renderFilterCell() 渲染过滤器元件。 CGridColumn
renderFooterCell() 渲染底部元件。 CGridColumn
renderHeaderCell() 渲染头部元件。 CGridColumn

受保护方法

方法 描述 定义在
initDefaultButtons() Initializes the default buttons (view, update and delete). CButtonColumn
registerClientScript() Registers the client scripts for the button column. CButtonColumn
renderButton() Renders a link button. CButtonColumn
renderDataCellContent() Renders the data cell content. CButtonColumn
renderFilterCellContent() Renders the filter cell content. CGridColumn
renderFooterCellContent() Renders the footer cell content. CGridColumn
renderHeaderCellContent() Renders the header cell content. CGridColumn

属性详细

afterDelete 属性
public string $afterDelete;

a javascript function that will be invoked after the delete ajax call. This property is used only if $this->buttons['delete']['click'] is not set.

The function signature is function(link, success, data)

  • link references the delete link.
  • success status of the ajax call, true if the ajax call was successful, false if the ajax call failed.
  • data the data returned by the server in case of a successful call or XHR object in case of error.
Note that if success is true it does not mean that the delete was successful, it only means that the ajax call was successful.

Example:
 array(
    class'=>'CButtonColumn',
    'afterDelete'=>'function(link,success,data){ if(success) alert("Delete completed successfuly"); }',
 ),
buttons 属性
public array $buttons;

the configuration for additional buttons. Each array element specifies a single button which has the following format:

'buttonID' => array(
    'label'=>'...',     // text label of the button
    'url'=>'...',       // a PHP expression for generating the URL of the button
    'imageUrl'=>'...',  // image URL of the button. If not set or false, a text link is used
    'options'=>array(...), // HTML options for the button tag
    'click'=>'...',     // a JS function to be invoked when the button is clicked
    'visible'=>'...',   // a PHP expression for determining whether the button is visible
)
In the PHP expression for the 'url' option and/or 'visible' option, the variable $row refers to the current row number (zero-based), and $data refers to the data model for the row.

Note that in order to display these additional buttons, the template property needs to be configured so that the corresponding button IDs appear as tokens in the template.
deleteButtonImageUrl 属性
public string $deleteButtonImageUrl;

the image URL for the delete button. If not set, an integrated image will be used. You may set this property to be false to render a text link instead.

deleteButtonLabel 属性
public string $deleteButtonLabel;

the label for the delete button. Defaults to "Delete". Note that the label will not be HTML-encoded when rendering.

deleteButtonOptions 属性
public array $deleteButtonOptions;

the HTML options for the view button tag.

deleteButtonUrl 属性
public string $deleteButtonUrl;

a PHP expression that is evaluated for every delete button and whose result is used as the URL for the delete button. In this expression, the variable $row the row number (zero-based); $data the data model for the row; and $this the column object.

deleteConfirmation 属性
public string $deleteConfirmation;

the confirmation message to be displayed when delete button is clicked. By setting this property to be false, no confirmation message will be displayed. This property is used only if $this->buttons['delete']['click'] is not set.

footerHtmlOptions 属性
public array $footerHtmlOptions;

the HTML options for the footer cell tag.

headerHtmlOptions 属性
public array $headerHtmlOptions;

the HTML options for the header cell tag.

htmlOptions 属性
public array $htmlOptions;

the HTML options for the data cell tags.

template 属性
public string $template;

the template that is used to render the content in each data cell. These default tokens are recognized: {view}, {update} and {delete}. If the buttons property defines additional buttons, their IDs are also recognized here. For example, if a button named 'preview' is declared in buttons, we can use the token '{preview}' here to specify where to display the button.

updateButtonImageUrl 属性
public string $updateButtonImageUrl;

the image URL for the update button. If not set, an integrated image will be used. You may set this property to be false to render a text link instead.

updateButtonLabel 属性
public string $updateButtonLabel;

the label for the update button. Defaults to "Update". Note that the label will not be HTML-encoded when rendering.

updateButtonOptions 属性
public array $updateButtonOptions;

the HTML options for the update button tag.

updateButtonUrl 属性
public string $updateButtonUrl;

a PHP expression that is evaluated for every update button and whose result is used as the URL for the update button. In this expression, the variable $row the row number (zero-based); $data the data model for the row; and $this the column object.

viewButtonImageUrl 属性
public string $viewButtonImageUrl;

the image URL for the view button. If not set, an integrated image will be used. You may set this property to be false to render a text link instead.

viewButtonLabel 属性
public string $viewButtonLabel;

the label for the view button. Defaults to "View". Note that the label will not be HTML-encoded when rendering.

viewButtonOptions 属性
public array $viewButtonOptions;

the HTML options for the view button tag.

viewButtonUrl 属性
public string $viewButtonUrl;

a PHP expression that is evaluated for every view button and whose result is used as the URL for the view button. In this expression, the variable $row the row number (zero-based); $data the data model for the row; and $this the column object.

方法详细

init() 方法
public void init()
public function init()
{
    
$this->initDefaultButtons();

    foreach(
$this->buttons as $id=>$button)
    {
        if(
strpos($this->template,'{'.$id.'}')===false)
            unset(
$this->buttons[$id]);
        else if(isset(
$button['click']))
        {
            if(!isset(
$button['options']['class']))
                
$this->buttons[$id]['options']['class']=$id;
            if(
strpos($button['click'],'js:')!==0)
                
$this->buttons[$id]['click']='js:'.$button['click'];
        }
    }

    
$this->registerClientScript();
}

Initializes the column. This method registers necessary client script for the button column.

initDefaultButtons() 方法
protected void initDefaultButtons()
protected function initDefaultButtons()
{
    if(
$this->viewButtonLabel===null)
        
$this->viewButtonLabel=Yii::t('zii','View');
    if(
$this->updateButtonLabel===null)
        
$this->updateButtonLabel=Yii::t('zii','Update');
    if(
$this->deleteButtonLabel===null)
        
$this->deleteButtonLabel=Yii::t('zii','Delete');
    if(
$this->viewButtonImageUrl===null)
        
$this->viewButtonImageUrl=$this->grid->baseScriptUrl.'/view.png';
    if(
$this->updateButtonImageUrl===null)
        
$this->updateButtonImageUrl=$this->grid->baseScriptUrl.'/update.png';
    if(
$this->deleteButtonImageUrl===null)
        
$this->deleteButtonImageUrl=$this->grid->baseScriptUrl.'/delete.png';
    if(
$this->deleteConfirmation===null)
        
$this->deleteConfirmation=Yii::t('zii','Are you sure you want to delete this item?');

    foreach(array(
'view','update','delete') as $id)
    {
        
$button=array(
            
'label'=>$this->{$id.'ButtonLabel'},
            
'url'=>$this->{$id.'ButtonUrl'},
            
'imageUrl'=>$this->{$id.'ButtonImageUrl'},
            
'options'=>$this->{$id.'ButtonOptions'},
        );
        if(isset(
$this->buttons[$id]))
            
$this->buttons[$id]=array_merge($button,$this->buttons[$id]);
        else
            
$this->buttons[$id]=$button;
    }

    if(!isset(
$this->buttons['delete']['click']))
    {
        if(
is_string($this->deleteConfirmation))
            
$confirmation="if(!confirm(".CJavaScript::encode($this->deleteConfirmation).")) return false;";
        else
            
$confirmation='';

        if(
Yii::app()->request->enableCsrfValidation)
        {
            
$csrfTokenName Yii::app()->request->csrfTokenName;
            
$csrfToken Yii::app()->request->csrfToken;
            
$csrf "\n\t\tdata:{ '$csrfTokenName':'$csrfToken' },";
        }
        else
            
$csrf '';

        if(
$this->afterDelete===null)
            
$this->afterDelete='function(){}';

        
$this->buttons['delete']['click']=<<<EOD
function() {
$confirmation
var th=this;
var afterDelete=
$this->afterDelete;
$.fn.yiiGridView.update('
{$this->grid->id}', {
    type:'POST',
    url:$(this).attr('href'),
$csrf
    success:function(data) {
        $.fn.yiiGridView.update('
{$this->grid->id}');
        afterDelete(th,true,data);
    },
    error:function(XHR) {
        return afterDelete(th,false,XHR);
    }
});
return false;
}
EOD;
    }
}

Initializes the default buttons (view, update and delete).

registerClientScript() 方法
protected void registerClientScript()
protected function registerClientScript()
{
    
$js=array();
    foreach(
$this->buttons as $id=>$button)
    {
        if(isset(
$button['click']))
        {
            
$function=CJavaScript::encode($button['click']);
            
$class=preg_replace('/\s+/','.',$button['options']['class']);
            
$js[]="jQuery('#{$this->grid->id} a.{$class}').live('click',$function);";
        }
    }

    if(
$js!==array())
        
Yii::app()->getClientScript()->registerScript(__CLASS__.'#'.$this->idimplode("\n",$js));
}

Registers the client scripts for the button column.

renderButton() 方法
protected void renderButton(string $id, array $button, integer $row, mixed $data)
$id string the ID of the button
$button array the button configuration which may contain 'label', 'url', 'imageUrl' and 'options' elements. See buttons for more details.
$row integer the row number (zero-based)
$data mixed the data object associated with the row
protected function renderButton($id,$button,$row,$data)
{
    if (isset(
$button['visible']) && !$this->evaluateExpression($button['visible'],array('row'=>$row,'data'=>$data)))
          return;
    
$label=isset($button['label']) ? $button['label'] : $id;
    
$url=isset($button['url']) ? $this->evaluateExpression($button['url'],array('data'=>$data,'row'=>$row)) : '#';
    
$options=isset($button['options']) ? $button['options'] : array();
    if(!isset(
$options['title']))
        
$options['title']=$label;
    if(isset(
$button['imageUrl']) && is_string($button['imageUrl']))
        echo 
CHtml::link(CHtml::image($button['imageUrl'],$label),$url,$options);
    else
        echo 
CHtml::link($label,$url,$options);
}

Renders a link button.

renderDataCellContent() 方法
protected void renderDataCellContent(integer $row, mixed $data)
$row integer the row number (zero-based)
$data mixed the data associated with the row
protected function renderDataCellContent($row,$data)
{
    
$tr=array();
    
ob_start();
    foreach(
$this->buttons as $id=>$button)
    {
        
$this->renderButton($id,$button,$row,$data);
        
$tr['{'.$id.'}']=ob_get_contents();
        
ob_clean();
    }
    
ob_end_clean();
    echo 
strtr($this->template,$tr);
}

Renders the data cell content. This method renders the view, update and delete buttons in the data cell.

下一篇: