@MarkLb

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

Нужно выводить товар в таком формате:
jOanRZM.png

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

Имея дело с обычным массивом - это не было бы проблемой:
<?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-запросы. Как добиться нужного эффекта без костылей?
  • Вопрос задан
  • 24 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы