Browse Source

Added $key parameter to several methods in grid view.

tags/2.0.0-beta
Qiang Xue 11 years ago
parent
commit
dd9facceed
  1. 2
      framework/yii/base/Widget.php
  2. 34
      framework/yii/grid/ActionColumn.php
  3. 9
      framework/yii/grid/CheckboxColumn.php
  4. 12
      framework/yii/grid/Column.php
  5. 7
      framework/yii/grid/DataColumn.php
  6. 2
      framework/yii/grid/GridView.php
  7. 7
      framework/yii/grid/SerialColumn.php

2
framework/yii/base/Widget.php

@ -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()
{

34
framework/yii/grid/ActionColumn.php

@ -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 '';
}

9
framework/yii/grid/CheckboxColumn.php

@ -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;
}

12
framework/yii/grid/Column.php

@ -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;
}

7
framework/yii/grid/DataColumn.php

@ -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);
}

2
framework/yii/grid/GridView.php

@ -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);

7
framework/yii/grid/SerialColumn.php

@ -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) {

Loading…
Cancel
Save