Commit dd9facce by Qiang Xue

Added $key parameter to several methods in grid view.

parent 79866ee3
...@@ -121,7 +121,7 @@ class Widget extends Component implements ViewContextInterface ...@@ -121,7 +121,7 @@ class Widget extends Component implements ViewContextInterface
* The [[render()]] and [[renderFile()]] methods will use * The [[render()]] and [[renderFile()]] methods will use
* this view object to implement the actual view rendering. * this view object to implement the actual view rendering.
* If not set, it will default to the "view" application component. * 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() public function getView()
{ {
......
...@@ -32,27 +32,27 @@ class ActionColumn extends Column ...@@ -32,27 +32,27 @@ class ActionColumn extends Column
protected function initDefaultButtons() protected function initDefaultButtons()
{ {
if (!isset($this->buttons['view'])) { if (!isset($this->buttons['view'])) {
$this->buttons['view'] = function ($model, $column) { $this->buttons['view'] = function ($model, $key, $index, $column) {
/** @var ActionColumn $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, [ return Html::a('<span class="glyphicon glyphicon-eye-open"></span>', $url, [
'title' => Yii::t('yii', 'View'), 'title' => Yii::t('yii', 'View'),
]); ]);
}; };
} }
if (!isset($this->buttons['update'])) { if (!isset($this->buttons['update'])) {
$this->buttons['update'] = function ($model, $column) { $this->buttons['update'] = function ($model, $key, $index, $column) {
/** @var ActionColumn $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, [ return Html::a('<span class="glyphicon glyphicon-pencil"></span>', $url, [
'title' => Yii::t('yii', 'Update'), 'title' => Yii::t('yii', 'Update'),
]); ]);
}; };
} }
if (!isset($this->buttons['delete'])) { if (!isset($this->buttons['delete'])) {
$this->buttons['delete'] = function ($model, $column) { $this->buttons['delete'] = function ($model, $key, $index, $column) {
/** @var ActionColumn $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, [ return Html::a('<span class="glyphicon glyphicon-trash"></span>', $url, [
'title' => Yii::t('yii', 'Delete'), 'title' => Yii::t('yii', 'Delete'),
'data-confirm' => Yii::t('yii', 'Are you sure to delete this item?'), 'data-confirm' => Yii::t('yii', 'Are you sure to delete this item?'),
...@@ -64,34 +64,30 @@ class ActionColumn extends Column ...@@ -64,34 +64,30 @@ class ActionColumn extends Column
/** /**
* @param \yii\db\ActiveRecord $model * @param \yii\db\ActiveRecord $model
* @param mixed $key the key associated with the data model
* @param integer $index
* @param string $action * @param string $action
* @return string * @return string
*/ */
public function createUrl($model, $action) public function createUrl($model, $key, $index, $action)
{ {
if ($this->urlCreator instanceof Closure) { if ($this->urlCreator instanceof Closure) {
return call_user_func($this->urlCreator, $model, $action); return call_user_func($this->urlCreator, $model, $key, $index, $action);
} else { } else {
$params = $model->getPrimaryKey(true); $params = is_array($key) ? $key : ['id' => $key];
if (count($params) === 1) {
$params = ['id' => reset($params)];
}
return Yii::$app->controller->createUrl($action, $params); return Yii::$app->controller->createUrl($action, $params);
} }
} }
/** /**
* Renders the data cell content. * @inheritdoc
* @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
*/ */
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]; $name = $matches[1];
if (isset($this->buttons[$name])) { 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 { } else {
return ''; return '';
} }
......
...@@ -67,15 +67,12 @@ class CheckboxColumn extends Column ...@@ -67,15 +67,12 @@ class CheckboxColumn extends Column
} }
/** /**
* Renders the data cell content. * @inheritdoc
* @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
*/ */
protected function renderDataCellContent($model, $index) protected function renderDataCellContent($model, $key, $index)
{ {
if ($this->checkboxOptions instanceof Closure) { 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 { } else {
$options = $this->checkboxOptions; $options = $this->checkboxOptions;
} }
......
...@@ -71,17 +71,18 @@ class Column extends Object ...@@ -71,17 +71,18 @@ class Column extends Object
/** /**
* Renders a data cell. * Renders a data cell.
* @param mixed $model the data model being rendered * @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]]. * @param integer $index the zero-based index of the data item among the item array returned by [[dataProvider]].
* @return string the rendering result * @return string the rendering result
*/ */
public function renderDataCell($model, $index) public function renderDataCell($model, $key, $index)
{ {
if ($this->contentOptions instanceof Closure) { 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 { } else {
$options = $this->contentOptions; $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 ...@@ -117,13 +118,14 @@ class Column extends Object
/** /**
* Renders the data cell content. * Renders the data cell content.
* @param mixed $model the data model * @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]]. * @param integer $index the zero-based index of the data model among the models array returned by [[dataProvider]].
* @return string the rendering result * @return string the rendering result
*/ */
protected function renderDataCellContent($model, $index) protected function renderDataCellContent($model, $key, $index)
{ {
if ($this->content !== null) { if ($this->content !== null) {
return call_user_func($this->content, $model, $index, $this); return call_user_func($this->content, $model, $key, $index, $this);
} else { } else {
return $this->grid->emptyCell; return $this->grid->emptyCell;
} }
......
...@@ -133,14 +133,17 @@ class DataColumn extends Column ...@@ -133,14 +133,17 @@ class DataColumn extends Column
} }
} }
protected function renderDataCellContent($model, $index) /**
* @inheritdoc
*/
protected function renderDataCellContent($model, $key, $index)
{ {
if ($this->value !== null) { if ($this->value !== null) {
$value = call_user_func($this->value, $model, $index, $this); $value = call_user_func($this->value, $model, $index, $this);
} elseif ($this->content === null && $this->attribute !== null) { } elseif ($this->content === null && $this->attribute !== null) {
$value = ArrayHelper::getValue($model, $this->attribute); $value = ArrayHelper::getValue($model, $this->attribute);
} else { } else {
return parent::renderDataCellContent($model, $index); return parent::renderDataCellContent($model, $key, $index);
} }
return $this->grid->formatter->format($value, $this->format); return $this->grid->formatter->format($value, $this->format);
} }
......
...@@ -366,7 +366,7 @@ class GridView extends BaseListView ...@@ -366,7 +366,7 @@ class GridView extends BaseListView
$cells = []; $cells = [];
/** @var Column $column */ /** @var Column $column */
foreach ($this->columns as $column) { foreach ($this->columns as $column) {
$cells[] = $column->renderDataCell($model, $index); $cells[] = $column->renderDataCell($model, $key, $index);
} }
if ($this->rowOptions instanceof Closure) { if ($this->rowOptions instanceof Closure) {
$options = call_user_func($this->rowOptions, $model, $key, $index, $this); $options = call_user_func($this->rowOptions, $model, $key, $index, $this);
......
...@@ -18,12 +18,9 @@ class SerialColumn extends Column ...@@ -18,12 +18,9 @@ class SerialColumn extends Column
public $header = '#'; public $header = '#';
/** /**
* Renders the data cell content. * @inheritdoc
* @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
*/ */
protected function renderDataCellContent($model, $index) protected function renderDataCellContent($model, $key, $index)
{ {
$pagination = $this->grid->dataProvider->getPagination(); $pagination = $this->grid->dataProvider->getPagination();
if ($pagination !== false) { if ($pagination !== false) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment