包 | zii.widgets.grid |
---|---|
继承 | class CButtonColumn » CGridColumn » CComponent |
源自 | 1.1 |
版本 | $Id: CButtonColumn.php 3424 2011-10-24 20:13:19Z mDOMba $ |
源码 |
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 |
footer | string | 底部元件文本。请注意,它不会变成HTML编码。 | CGridColumn |
footerHtmlOptions | array | the HTML options for the footer cell tag. | CButtonColumn |
grid | CGridView | 拥有此列的表格视图对象。 | CGridColumn |
hasFooter | boolean | 确定此列是否有底部元件。 这决定基于是否footer已设置。 | CGridColumn |
header | string | 头部元件文本。请注意,它不会变成HTML编码。 | 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 |
属性详细
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.
Example:
array( class'=>'CButtonColumn', 'afterDelete'=>'function(link,success,data){ if(success) alert("Delete completed successfuly"); }', ),
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.
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.
the label for the delete button. Defaults to "Delete". Note that the label will not be HTML-encoded when rendering.
the HTML options for the view button tag.
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.
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.
the HTML options for the footer cell tag.
the HTML options for the header cell tag.
the HTML options for the data cell tags.
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.
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.
the label for the update button. Defaults to "Update". Note that the label will not be HTML-encoded when rendering.
the HTML options for the update button tag.
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.
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.
the label for the view button. Defaults to "View". Note that the label will not be HTML-encoded when rendering.
the HTML options for the view button tag.
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.
方法详细
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.
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).
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->id, implode("\n",$js));
}
Registers the client scripts for the button column.
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.
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.