T
Data handling: /**
* Допустим, новости хранятся в таблице article с полями id, title, views и year
*/
class Article extends \yii\base\Model //\yii\db\ActiveRecord
{
// Я добавил поля в модель и наследовал \yii\base\Model потому, что не работаю с бд
public $id;
public $title;
public $views;
public $year;
public static function tableName()
{
return "article";
}
}
/**
$articles = Article::find()
// Сортируем по году и ID
->orderBy(['year' => SORT_DESC, 'id' => SORT_ASC])
// Массив будет такого вида: [2017 => [Article, Article, ....], 2018 => [...]]
->indexBy('year')
->all();
*/
// У меня такой таблиц нет, я просто эмулирую выборку
$articles = [
2016 => [
new Article([
'id' => 1,
'title' => "Test title",
'views' => 100500,
'year' => 2016
]),
new Article([
'id' => 2,
'title' => "Test title 2",
'views' => 1000,
'year' => 2016
]),
new Article([
'id' => 3,
'title' => "Title for 3",
'views' => 200,
'year' => 2016
]),
],
2017 => [
new Article([
'id' => 4,
'title' => "Test title 2017",
'views' => 100500,
'year' => 2017
]),
new Article([
'id' => 5,
'title' => "Test title 2017 2",
'views' => 0,
'year' => 2017
]),
new Article([
'id' => 6,
'title' => "Title for 2017 3",
'views' => 800,
'year' => 2017
]),
]
];
View:<div class="ThisDay-default-index">
<div class="form-group thisday-butt">
<div class="col-md-2">
<button type="submit" class="btn btn-default">Далее</button>
</div>
</div>
<p class="thisday-time">Выберите ключевые новости
12 Января из прошлого:</p>
<?php
$form = \yii\widgets\ActiveForm::begin([
'options' => [
'class' => 'thisday-content',
],
]); ?>
<div class="thisday-container">
<div class="horizontal-scroll-wrapper">
<?php foreach ($articles as $year => $yearArticles): ?>
<div class="control-group">
<h3><?= $year ?></h3>
<?php foreach ($yearArticles as $article): ?>
<?= $form->field($article, 'id[' . $year . '][]')->radio([
'value' => $article->id,
'label' => \app\helpers\Html::encode($article->title)
. \app\helpers\Html::tag('div', '', ['class' => 'control__indicator'])
. \app\helpers\Html::tag('span', $article->views, ['class' => 'control-views-count']),
'labelOptions' => [
'encode' => false,
'class' => 'control control--radio',
],
]); ?>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
</div>
</div>
<?php \yii\widgets\ActiveForm::end(); ?>
</div>
Pay attention to the model's attribute. I made the radio work within one year. the input will contain such parameters: name="Article[id][2017][]" value="4"♪ The POST will be a mass ['Article' => ['id' => [5, 6]]]If only one year can be chosen, a year can be removed from the attribut.