unknownby, благодарю за пример решения проблемы.
Однако контексте данной ситуации, боюсь что применение GridView сложно, поскольку:
1. У каждого блока специфическая вёрстка.
2. У каждой группы товаров есть своя подгрузка.
Увы, не было возможности приложить это наглядно — возможно, это позволило бы легче понять что к чему. Но те у кого GridView действительно будет проще.
Касательно сообщений не по теме:
Вам
подошел ответ от SiZE, в котором он дал ссылку на свойство GridView.
Я посоветовал также использовать GridView.
Вам
нужно внимательней быть
Призываю Вас внимательно почитать моё сообщение:
SiZE, спасибо, похоже на выход.
Я нигде не указывал, что ответ именно подошёл. При беглом осмотре — показалось, что это может решить заявленную проблему.
Видимо вам проще написать сюда и тут ждать ответа.
Да, жду-недождусь поместить в проект код с отключенной фильтрацией опасного содержимого, отсутствием тайп-хинтинга в коллбеке при свойствах с избыточным контекстом в наименовании.
---------------------------------------------------------------------------
Пока такое беглое решение,
однако содержит хардкод — $model должен содержать объект, который имеет публичное свойство с объектом $group, который в свою очередь содержать публичное свойство $name.
По завершению работ, приложу полноценный вариант.
Промежуточный:
Код: Выделить всё
<?php
namespace common\widgets;
use yii\helpers\Html;
use yii\widgets\ListView;
class GroupListView extends ListView
{
/**
* @var callable Callable which will be used to generate the group header content.
* The signature of this callable should be: `function ($group, $groupCount, $widget)`.
*/
public $groupHeader;
public function renderItems()
{
$models = $this->dataProvider->getModels();
$keys = $this->dataProvider->getKeys();
$groups = [];
foreach ($models as $index => $model) {
$key = $keys[$index];
$groupName = $model->group->name;
if (!isset($groups[$groupName])) {
if ($this->groupHeader !== null) {
$groups[$groupName] = call_user_func($this->groupHeader, $groupName, count($models), $this);
} else {
$groups[$groupName] = Html::tag('h2', $groupName);
}
}
$groups[$groupName] .= $this->renderItem($model, $key, $index);
}
return implode($this->separator, $groups);
}
}
Код: Выделить всё
<?php echo GroupListView::widget([
'dataProvider' => $dataProvider,
'itemView' => '_item-list-test',
'groupHeader' => function ($group) {
return Html::tag('h2', $group);
},
]);