标准ListView小部件通过{sorter}在其$layout属性中包含该部分来自动生成一种分类器.但是,我需要一个更复杂的分拣机,其中包含我的产品列表的自定义模板.

基本上我需要能够:
此时我试图了解是否需要创建类后代,ListView或者我可以配置现有类的属性.
实现这样的事情的最佳做法是什么?
1)你可以sorter像这样配置:
<?= ListView::widget([
'layout' => "{sorter}\n{summary}\n{items}\n{pager}", // Add sorter to layout because it's turned off by default
'sorter' => [
// ...
],
]) ?>
Run Code Online (Sandbox Code Playgroud)
请参阅yii\widgets\LinkSorter的官方文档中的可用属性.
但是没有样式选项,所以你需要另一个灵魂(默认情况下,分拣机就是这样ul).
你有两个选择.
您可以创建自定义类,该类扩展自yii\widgets\LinkSorter并覆盖renderSortLinks()负责呈现html的方法.
然后替换sorter你的默认值ListView:
<?= ListView::widget([
'sorter' => [
'class' => CustomLinkSorter::className(),
],
]) ?>
Run Code Online (Sandbox Code Playgroud)
但我建议使用其他方法.不要包含{sorter}in layout,只需创建适合您需求的自定义分拣机.放入常用表格并给出sort选择名称.您仍然可以在配置中将属性列表和其他选项配置为分拣机.
此外,您需要为这些选项提供值:
popularity- 按人气(asc)-popularity排序,
- 按人气排序(desc).
2)我记得Yii 2没有内置选项来生成这样的选择.你应该自己做.创建选择框,为其指定per-page常用形式的名称(这是限制一页上记录数量的默认名称).select的名称和值对应必要的计数.
首先,你需要重写的默认值分页在你dataProvider将它传递给前ListView:
$dataProvider->pagination = [
'defaultPageSize' => 12,
'pageSizeLimit' => [12, 100],
],
Run Code Online (Sandbox Code Playgroud)
然后将其传递给ListView:
<?= ListView::widget([
'dataProvider' => $dataProvider,
]) ?>
Run Code Online (Sandbox Code Playgroud)
同时检查此扩展名,也许您发现它很有用.
3)可以这样解决.因为只有两个模板,所以可以添加到表单参数中,例如advanced-view.因此,当此参数未设置或等于时0,将显示基本模板,高级模板将对应该值1.
在ListView你可以切换他们根据这个GET参数的值/存在:
<?= ListView::widget([
'itemView' => Yii::$app->request->get('advanced-view') ? '_advanced-view' : '_basic-view',
]) ?>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6894 次 |
| 最近记录: |