@Skrolea

Как вывести посты по времени?

Добрый день.
В базе есть фото, разбитые по годам
(Id: 1; url: photo1 ; year : 2015)
Контроллер стандартный
public function actionIndex() {
        $searchModel = new ArchiveSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        return $this->render('index', [
                    'searchModel' => $searchModel,
                    'dataProvider' => $dataProvider,
        ]);
    }

И вью
foreach ($dataProvider->models as $model) {
    ?>
    <div class="panel panel-default">
        <div class="panel-heading"><?= $model->year; ?></div>
        <div class="panel-body">
            <div class="row">
                <div class="col-xs-6 col-md-3">
                    <div class="thumbnail-journal thumbnail">
                        <img src="/<?= $model->cover_url; ?>" alt="<?= Yii::t('app', '_Journal') ?>">
                        <a href="<?= Url::to(['view']) ?>" class="btn btn-primary" role="button"><span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span> <?= Yii::t('app', '_View') ?></a>  
                        <a href="/<?= $model->journal_url; ?>" download="/<?= $model->journal_url; ?>" class="btn btn-default pull-right" role="button"><span class="glyphicon glyphicon-download" aria-hidden="true"></span> <?= Yii::t('app', '_Download') ?></a>
                    </div>
                </div>             
            </div>
        </div>
    </div>
    <?php
}

Можно ли сделать, чтобы выводилось "Год - 2015, пост 1, пост2, ... постN", "Год - 2016, пост1, пост2, постN с помощью foreach в view или надо делать запросы к базе, разбивающий по годам?
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
Insolita
@Insolita
Отчаянная домохозяйка
во-первых если вам нужны данные не для gridview\listview нет необходимости возвращать dataProvider в ArchiveSearch модели достаточно вернуть $query->all();
а чтобы получить по годам - предварительно сгруппируйте массив результатов по годам
$result = [];
         $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
         foreach($dataProvider->models as $model){
              $result[$model->year][] = $model;
         }
         return $this->render('index', [
                    'searchModel' => $searchModel,
                    'result' => $result,
        ]);


<?php foreach($result as $year=>$models):?>
     <h3><?=$year?></h3>
    <?php foreach($models as $model):?>
          <?=$model->data?>
     <?php endforeach?>
<?php endforeach?>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@karminski
Senior React.JS Developer
Попробуйте использовать группировку через ArrayHelper::map(inputArray, key, value, groupBy)
www.yiiframework.com/doc-2.0/guide-helper-array.ht...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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