Как группирировать вывод записей при использовании ActiveDataProvider в Yii2?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
MarkL
Сообщения: 58
Зарегистрирован: 2017.07.05, 20:37

Как группирировать вывод записей при использовании ActiveDataProvider в Yii2?

Сообщение MarkL »

Нужно выводить товар в таком формате:
Изображение

То есть, мы выводим товар в блоке группы, с которой он связан.

Имея дело с обычным массивом - это не было бы проблемой:

Код: Выделить всё

<?php foreach ($groups as $group): ?>
<div>
    <h1><?php echo $group['name'] ?></h1>
    <div>
        <table>
            <?php foreach ($group['products'] as $product): ?>
            <tr>
                <td><?php echo $product['name'] ?></td>
                <td><?php echo $product['price'] ?></td>
            </tr>
            <?php endforeach; ?>
        </table>
    </div>
</div>
<?php endforeach; ?>
Но нам нужна возможность фильтрации/сортировки, поэтому нужен ActiveDataProvider, данные которого оформляются с помощью ListView/GridView.

Из идей только костыли:

Код: Выделить всё

<?php foreach ($groups as $group): ?>
    <h1><?php echo $group['name'] ?></h1>
    <?php
        echo \yii\widgets\ListView::widget([
            'dataProvider' => new ActiveDataProvider([
                'query' => $group->products,
            ]),
            'layout' => "{items}",
            'itemView' => '@frontend/views/_parts/_order-search-item',
        ])
    ?>
<?php endforeach; ?>
Но он имеет кучу побочных эффектов, как минимум - лишние COUNT SQL-запросы. Как добиться нужного эффекта без костылей?
MarkL
Сообщения: 58
Зарегистрирован: 2017.07.05, 20:37

Re: Как группирировать вывод записей при использовании ActiveDataProvider в Yii2?

Сообщение MarkL »

Может, просто отказаться от ActiveDataProvider или же GridView/ListView, при этом сохранив функционал фильтрации?
unknownby
Сообщения: 713
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Как группирировать вывод записей при использовании ActiveDataProvider в Yii2?

Сообщение unknownby »

MarkL писал(а): 2022.05.24, 16:32 Может, просто отказаться от ActiveDataProvider или же GridView/ListView, при этом сохранив функционал фильтрации?
GridView - отображение моделей в виде списка.
ListView - отображение моделей со своим личным представлением.

Первый виджет больше для админ панели, а второй для пользовательского интерфейса.

Какая фильтрация вам нужна? В первом виджете фильтрация есть встроенная в виджете, во втором случае свою фильтрацию делаете.
Ответить