Yii2 Gridview – Как использовать итоговые значения для нижнего уровня

Столбец VALUE:

[ 'attribute' => 'value', 'format' => 'raw', 'contentOptions'=>['style'=>'width: 10%;text-align:left'], 'footer' => ??? ], 

Как использовать итоговые значения строк для свойства FOOTER?

это работы 1. создать класс, затем 2. создать матрицу столбцов, столбец 3.configure, 4.configure grid

 namespace app\components; class PTotal { public static function pageTotal($provider, $fieldName) { $total=0; foreach($provider as $item){ $total+=$item[$fieldName]; } return $total; } $provider = new ActiveDataProvider([ 'query' => $query, 'sort' => $sort, ]); $grid_columns=[ [ 'attribute' => 'saldo_in', 'footer'=>PTotal::pageTotal($provider->models,'saldo_in'), ] ] echo GridView::widget([ 'dataProvider' => $provider, 'showFooter'=>TRUE, 'footerRowOptions'=>['style'=>'font-weight:bold;text-decoration: underline;'], 'columns' =>$grid_columns, ]); 

в файле представления выше вычисляет сумму нижнего колонтитула по следующему коду

  $amount = 0; if (!empty($dataProvider->getModels())) { foreach ($dataProvider->getModels() as $key => $val) { $amount += $val->amount; } } 

теперь в вашем режиме gridview просто передайте переменную суммы, как следует

 [ 'attribute' => 'amount', 'label' => 'Charged Amount', 'value' => function ($model, $key, $index, $widget) { return Yii::$app->formatter->asCurrency($model->amount, 'INR'); }, 'footer' => $amount, ], 

я попробовал, он будет работать …

Я не пробовал это, но попробую определить столбец, как это.

В верхней части файла укажите

 $total = 0; 

Затем определите столбец следующим образом:

 [ 'attribute' => 'value', 'format' => 'raw', 'contentOptions'=>['style'=>'width: 10%;text-align:left'], 'value'=>function ($model, $key, $index, $widget) use ($total) { $total += $model->value; return $model->value; }, 'footer' => function () use ($total) { //format the total here return $total; }, ], 

Теперь есть несколько проблем с этим, так как они связаны с http://demos.krajee.com/grid, что означает, что оно добавит только то, что показано, если у вас есть разбиение на страницы, оно просто покажет общее количество на этой странице.

Если вам нужна общая сумма для всех записей, вы должны добавить ее вручную, используя dataprovider без разбивки на страницы.

Опять я не пробовал это, просто дайте ему шанс.

я пытаюсь, как вы говорите, но покажите мне ошибку: trim () ожидает, что параметр 1 будет строкой, объект указан

 protected function renderFooterCellContent() { return trim($this->footer) !== '' ? $this->footer : $this->grid->emptyCell; } 

В Yii 1 работает отлично, я просто создаю эту функцию в Model

 public function getTotals($ids) { if($ids){ $ids = implode(",",$ids); $connection=Yii::app()->db; $command=$connection->createCommand("SELECT SUM(value) FROM `tb_cashbook` where id in ($ids)"); $amount = $command->queryScalar(); return "R$ ".Yii::app()->format->formatNumber($amount); } else return null; } 

И в представлении, таким образом, в нижнем слое:

 'footer'=>"<strong>".$model->getTotals($model->search()->getKeys())." </strong>",