Как в GridView Yii2 добавить строку Total?

В общем есть GridView из advanced
вывод такой:
<?php Pjax::begin(); ?>    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'id',
            'date',
            'operator_count',
            'operator_count2',
            'operator_count4',
             'operator_count4',

        ],
    ]); ?>
<?php Pjax::end(); ?></div>

Не могу понять как добавить строку Итог,
  • Вопрос задан
  • 1788 просмотров
Решения вопроса 1
Akdmeh
@Akdmeh
PHP, Yii2, Music
1) итог придется считать самому с помощью доп. функций. Я делаю это с помощью хелпера:
<?php

namespace app\helpers;

class ArraySum
{
    public static function getSum($array)
    {
        $sumArray=[];
        foreach ($array as $k=>$subArray) {
            foreach ($subArray as $id=>$value) {
                $value = floatval($value);
                if(isset($sumArray[$id])) {
                    $sumArray[$id]+=$value;
                } else {
                    $sumArray[$id]=$value;
                }
            }
        }
        return $sumArray;
    }
}

Код помогал хорошо мне, но возможно вам можно будет адаптировать (например, указывать, какие поля плюсовать или нет).
Дальше я делал так. Допустим, у меня есть многомерный массив типа 0=>['id'=>2, 'date'=>'2017-05-12', 'operator_count'=>55, 'operator_count2'=>4, ...], 1=>['id'=>3, 'date'=>'2017-05-13', 'operator_count'=>57, ...]

Этот массив пропускаем через мой класс.
Если используете ActiveDataProvider, нужно сделать в контроллере
$dataProvider->prepare();
а затем
$total_statistic = \app\helpers\ArraySum::getSum($dataProvider->getModels());

Передаем $total_statistic в view, и там делаем следующие модификации:
1) добавляем 'showFooter'=>true
2) переделываем все "колонки" по аналогии с первым operator_count (остальные уже допишите сами).
<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'showFooter'=>true,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'id',
            'date',
            'operator_count'=>[
'attribute'=>'operator_count',
'footer' => $total_statistic['operator_count']
],
            'operator_count2',
            'operator_count4',
             'operator_count4',

        ],
    ]); ?>


Остаются мелочи - нужно украсить это с помощью CSS, доделать, проверить...
Но это уже, надеюсь, сами справитесь.

Буду очень благодарен, если мне подскажут более оптимальный вариант, но я вроде бы не встречал подобного встроенного функционала в Yii2
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы