mirror of
https://github.com/yiisoft/yii2.git
synced 2025-08-20 10:27:18 +08:00
Added $key parameter to several methods in grid view.
This commit is contained in:
@ -121,7 +121,7 @@ class Widget extends Component implements ViewContextInterface
|
||||
* The [[render()]] and [[renderFile()]] methods will use
|
||||
* this view object to implement the actual view rendering.
|
||||
* If not set, it will default to the "view" application component.
|
||||
* @return View the view object that can be used to render views or view files.
|
||||
* @return \yii\web\View the view object that can be used to render views or view files.
|
||||
*/
|
||||
public function getView()
|
||||
{
|
||||
|
@ -32,27 +32,27 @@ class ActionColumn extends Column
|
||||
protected function initDefaultButtons()
|
||||
{
|
||||
if (!isset($this->buttons['view'])) {
|
||||
$this->buttons['view'] = function ($model, $column) {
|
||||
$this->buttons['view'] = function ($model, $key, $index, $column) {
|
||||
/** @var ActionColumn $column */
|
||||
$url = $column->createUrl($model, 'view');
|
||||
$url = $column->createUrl($model, $key, $index, 'view');
|
||||
return Html::a('<span class="glyphicon glyphicon-eye-open"></span>', $url, [
|
||||
'title' => Yii::t('yii', 'View'),
|
||||
]);
|
||||
};
|
||||
}
|
||||
if (!isset($this->buttons['update'])) {
|
||||
$this->buttons['update'] = function ($model, $column) {
|
||||
$this->buttons['update'] = function ($model, $key, $index, $column) {
|
||||
/** @var ActionColumn $column */
|
||||
$url = $column->createUrl($model, 'update');
|
||||
$url = $column->createUrl($model, $key, $index, 'update');
|
||||
return Html::a('<span class="glyphicon glyphicon-pencil"></span>', $url, [
|
||||
'title' => Yii::t('yii', 'Update'),
|
||||
]);
|
||||
};
|
||||
}
|
||||
if (!isset($this->buttons['delete'])) {
|
||||
$this->buttons['delete'] = function ($model, $column) {
|
||||
$this->buttons['delete'] = function ($model, $key, $index, $column) {
|
||||
/** @var ActionColumn $column */
|
||||
$url = $column->createUrl($model, 'delete');
|
||||
$url = $column->createUrl($model, $key, $index, 'delete');
|
||||
return Html::a('<span class="glyphicon glyphicon-trash"></span>', $url, [
|
||||
'title' => Yii::t('yii', 'Delete'),
|
||||
'data-confirm' => Yii::t('yii', 'Are you sure to delete this item?'),
|
||||
@ -64,34 +64,30 @@ class ActionColumn extends Column
|
||||
|
||||
/**
|
||||
* @param \yii\db\ActiveRecord $model
|
||||
* @param mixed $key the key associated with the data model
|
||||
* @param integer $index
|
||||
* @param string $action
|
||||
* @return string
|
||||
*/
|
||||
public function createUrl($model, $action)
|
||||
public function createUrl($model, $key, $index, $action)
|
||||
{
|
||||
if ($this->urlCreator instanceof Closure) {
|
||||
return call_user_func($this->urlCreator, $model, $action);
|
||||
return call_user_func($this->urlCreator, $model, $key, $index, $action);
|
||||
} else {
|
||||
$params = $model->getPrimaryKey(true);
|
||||
if (count($params) === 1) {
|
||||
$params = ['id' => reset($params)];
|
||||
}
|
||||
$params = is_array($key) ? $key : ['id' => $key];
|
||||
return Yii::$app->controller->createUrl($action, $params);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the data cell content.
|
||||
* @param mixed $model the data model
|
||||
* @param integer $index the zero-based index of the data model among the models array returned by [[dataProvider]].
|
||||
* @return string the rendering result
|
||||
* @inheritdoc
|
||||
*/
|
||||
protected function renderDataCellContent($model, $index)
|
||||
protected function renderDataCellContent($model, $key, $index)
|
||||
{
|
||||
return preg_replace_callback('/\\{(\w+)\\}/', function ($matches) use ($model) {
|
||||
return preg_replace_callback('/\\{(\w+)\\}/', function ($matches) use ($model, $key, $index) {
|
||||
$name = $matches[1];
|
||||
if (isset($this->buttons[$name])) {
|
||||
return call_user_func($this->buttons[$name], $model, $this);
|
||||
return call_user_func($this->buttons[$name], $model, $key, $index, $this);
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
|
@ -67,15 +67,12 @@ class CheckboxColumn extends Column
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the data cell content.
|
||||
* @param mixed $model the data model
|
||||
* @param integer $index the zero-based index of the data model among the models array returned by [[dataProvider]].
|
||||
* @return string the rendering result
|
||||
* @inheritdoc
|
||||
*/
|
||||
protected function renderDataCellContent($model, $index)
|
||||
protected function renderDataCellContent($model, $key, $index)
|
||||
{
|
||||
if ($this->checkboxOptions instanceof Closure) {
|
||||
$options = call_user_func($this->checkboxOptions, $model, $index, $this);
|
||||
$options = call_user_func($this->checkboxOptions, $model, $key, $index, $this);
|
||||
} else {
|
||||
$options = $this->checkboxOptions;
|
||||
}
|
||||
|
@ -71,17 +71,18 @@ class Column extends Object
|
||||
/**
|
||||
* Renders a data cell.
|
||||
* @param mixed $model the data model being rendered
|
||||
* @param mixed $key the key associated with the data model
|
||||
* @param integer $index the zero-based index of the data item among the item array returned by [[dataProvider]].
|
||||
* @return string the rendering result
|
||||
*/
|
||||
public function renderDataCell($model, $index)
|
||||
public function renderDataCell($model, $key, $index)
|
||||
{
|
||||
if ($this->contentOptions instanceof Closure) {
|
||||
$options = call_user_func($this->contentOptions, $model, $index, $this);
|
||||
$options = call_user_func($this->contentOptions, $model, $key, $index, $this);
|
||||
} else {
|
||||
$options = $this->contentOptions;
|
||||
}
|
||||
return Html::tag('td', $this->renderDataCellContent($model, $index), $options);
|
||||
return Html::tag('td', $this->renderDataCellContent($model, $key, $index), $options);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -117,13 +118,14 @@ class Column extends Object
|
||||
/**
|
||||
* Renders the data cell content.
|
||||
* @param mixed $model the data model
|
||||
* @param mixed $key the key associated with the data model
|
||||
* @param integer $index the zero-based index of the data model among the models array returned by [[dataProvider]].
|
||||
* @return string the rendering result
|
||||
*/
|
||||
protected function renderDataCellContent($model, $index)
|
||||
protected function renderDataCellContent($model, $key, $index)
|
||||
{
|
||||
if ($this->content !== null) {
|
||||
return call_user_func($this->content, $model, $index, $this);
|
||||
return call_user_func($this->content, $model, $key, $index, $this);
|
||||
} else {
|
||||
return $this->grid->emptyCell;
|
||||
}
|
||||
|
@ -133,14 +133,17 @@ class DataColumn extends Column
|
||||
}
|
||||
}
|
||||
|
||||
protected function renderDataCellContent($model, $index)
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
protected function renderDataCellContent($model, $key, $index)
|
||||
{
|
||||
if ($this->value !== null) {
|
||||
$value = call_user_func($this->value, $model, $index, $this);
|
||||
} elseif ($this->content === null && $this->attribute !== null) {
|
||||
$value = ArrayHelper::getValue($model, $this->attribute);
|
||||
} else {
|
||||
return parent::renderDataCellContent($model, $index);
|
||||
return parent::renderDataCellContent($model, $key, $index);
|
||||
}
|
||||
return $this->grid->formatter->format($value, $this->format);
|
||||
}
|
||||
|
@ -366,7 +366,7 @@ class GridView extends BaseListView
|
||||
$cells = [];
|
||||
/** @var Column $column */
|
||||
foreach ($this->columns as $column) {
|
||||
$cells[] = $column->renderDataCell($model, $index);
|
||||
$cells[] = $column->renderDataCell($model, $key, $index);
|
||||
}
|
||||
if ($this->rowOptions instanceof Closure) {
|
||||
$options = call_user_func($this->rowOptions, $model, $key, $index, $this);
|
||||
|
@ -18,12 +18,9 @@ class SerialColumn extends Column
|
||||
public $header = '#';
|
||||
|
||||
/**
|
||||
* Renders the data cell content.
|
||||
* @param mixed $model the data model
|
||||
* @param integer $index the zero-based index of the data model among the models array returned by [[dataProvider]].
|
||||
* @return string the rendering result
|
||||
* @inheritdoc
|
||||
*/
|
||||
protected function renderDataCellContent($model, $index)
|
||||
protected function renderDataCellContent($model, $key, $index)
|
||||
{
|
||||
$pagination = $this->grid->dataProvider->getPagination();
|
||||
if ($pagination !== false) {
|
||||
|
Reference in New Issue
Block a user