所以我正在尝试使用octobercms上的前端用户数据创建排行榜, 排行榜将基于当前数据库中的变量总和。我最近才开始研究树枝和十月,所以请耐心地看一下
一般变量:
{% set totalScore = totalPoints + user.xp + user.progress %}
列表(简化)
{% for user in activatedUsers %}
<div class="card">
<p class="name"><span class="rank-title">NAME</span><br>{{ user.name }}</p>
<p><span class="rank-title">LEVEL</span><br>{{ user.level }}</p>
<p><span class="rank-title">TOTAL POINTS</span><br>{{ totalPoints }} </p>
<p><span class="rank-title">PROGRESS</span><br>{{ user.progress }}</p>
<p><span class="rank-title">XP</span><br>{{ user.xp }}</p>
</div>
{% endfor %}
我无法真正使用查询进行排序,因为某些变量不在数据库中,而是在页面中定义。 我已经研究了排序树枝功能,但我无法让它正常工作。 我试过了this solution,但我得到了例外。
我添加了以下代码,以便“usort”函数能够工作到modules / twig / extension文件,但它不起作用,并且必须有一个更简单的解决方案......
new \Twig_SimpleFilter('usort', array($this, 'usortFilter'))
public function usortFilter($item){
usort($item, function ($item1, $item2) {
if ($item1['orderNo'] == $item2['orderNo']) return 0;
return $item1['orderNo'] < $item2['orderNo'] ? -1 : 1;
});
return $item;
}
在阅读twig文档之后,我也尝试了逻辑上的事情:
{% for user in activatedUsers|sort('totalPoints') %}
但那里没有运气。 我可以走错路,所以请随意提出另一个或指出我错过的东西。 提前致谢
答案 0 :(得分:1)
嗯,我不确定你在设置activatedUsers
的位置,但在设置之前你可以简单地定义这个循环来对它们进行排序
只有当你的
dataset
数量有限,例如列表中的10或30个条目时,你才应该使用它,不能超过它对代码中的db记录排序效率不高
$activatedUsers = <<some code to fetch users>>
$sortedPointsWithUserId = [];
$sortedActivatedUsers = [];
foreach($activatedUsers as $user) {
// if $totalPoints is page variable you can use it directly $this->page['totalPoints'] from components and from page lifecycle $this['totalPoints']
$sortedPointsWithUserId[$user->id] = $totalPoints + $user->xp + $user->progress;
}
// sort array in descending order as we are storing totalpoints as value and key as user ID
// arsort maintain key value association
arsort($sortedPointsWithUserId);
foreach($sortedPointsWithUserId as $key => $value) {
$user = $activatedUsers[$key];
// create variable in model to hold totalPoints so we dont need to calculate again
$user->totalPoints = $value;
$sortedActivatedUsers[] = $user;
}
// $sortedActivatedUsers <-- this is your sorted array and you can use it
如果您有任何疑问,请发表评论