Yii2中ListView的自定义分类器
标准ListView小部件通过在其Yii2中ListView的自定义分类器,yii2,Yii2,标准ListView小部件通过在其$layout属性中包含{sorter}部分,自动生成一种分类器。然而,我需要一个更复杂的分类器,为我的产品列表定制一个模板 基本上,我需要能够: 按几个字段(流行度、新鲜度、价格等)对列表进行排序 选择每页要显示的条目数(12、50、100) 在两个不同的视图模板之间切换(更多/更少产品信息) 此时,我正试图了解我是否需要从ListView创建一个类子体,或者我可以配置现有类的属性 实现类似功能的最佳实践是什么?1)您可以如下配置分拣机: <?= Li
$layout
属性中包含{sorter}
部分,自动生成一种分类器。然而,我需要一个更复杂的分类器,为我的产品列表定制一个模板
基本上,我需要能够:
ListView
创建一个类子体,或者我可以配置现有类的属性
实现类似功能的最佳实践是什么?1)您可以如下配置分拣机:
<?= ListView::widget([
'layout' => "{sorter}\n{summary}\n{items}\n{pager}", // Add sorter to layout because it's turned off by default
'sorter' => [
// ...
],
]) ?>
但我建议使用另一种方法。不要在布局中包含{sorter}
,只需创建适合您需要的自定义分类器即可。在公共表单中输入名称sort
以供选择。您仍然可以在配置中为分拣机配置属性列表和其他选项
此外,您还需要给定值来选择如下选项:
受欢迎程度
-按受欢迎程度排序(asc),
-受欢迎程度
-按受欢迎程度排序(desc)
2)我记得Yii 2没有内置选项来生成这样的选择。你应该自己做这件事。创建选择框,以通用形式为其命名为每页,
(这是限制一页记录数量的默认名称)。select的名称和值对应必要的计数
首先,您需要覆盖数据提供程序
中的默认值,然后再将其传递给列表视图
:
<?= ListView::widget([
'sorter' => [
'class' => CustomLinkSorter::className(),
],
]) ?>
$dataProvider->pagination = [
'defaultPageSize' => 12,
'pageSizeLimit' => [12, 100],
],
<?= ListView::widget([
'dataProvider' => $dataProvider,
]) ?>
然后将其传递到ListView
:
<?= ListView::widget([
'sorter' => [
'class' => CustomLinkSorter::className(),
],
]) ?>
$dataProvider->pagination = [
'defaultPageSize' => 12,
'pageSizeLimit' => [12, 100],
],
<?= ListView::widget([
'dataProvider' => $dataProvider,
]) ?>
非常感谢你。这真的很有帮助。