Php Octobercms-按页面变量订购前端列表(变量不在数据库中)
所以我试图在octobercms上创建一个包含前端用户数据的排行榜, 排行榜将基于数据库中当前变量的总和。我最近才开始研究细枝和十月,所以请耐心地看一下 一般变量:Php Octobercms-按页面变量订购前端列表(变量不在数据库中),php,sorting,twig,octobercms,Php,Sorting,Twig,Octobercms,所以我试图在octobercms上创建一个包含前端用户数据的排行榜, 排行榜将基于数据库中当前变量的总和。我最近才开始研究细枝和十月,所以请耐心地看一下 一般变量: {% set totalScore = totalPoints + user.xp + user.progress %} 列表(简化) 但是那里没有运气。 我可能走错了路,所以请随意提出其他建议或指出我错过的东西。 提前感谢嗯,我不确定你在哪里设置你的激活用户,但是在设置之前,你可以简单地定义这个循环来对他们进行排序 只有当您的数
{% set totalScore = totalPoints + user.xp + user.progress %}
列表(简化)
但是那里没有运气。
我可能走错了路,所以请随意提出其他建议或指出我错过的东西。
提前感谢嗯,我不确定你在哪里设置你的
激活用户
,但是在设置之前,你可以简单地定义这个循环来对他们进行排序
只有当您的数据集
在列表中的条目数限制为10或30时,才应该使用此选项,但不能超过在代码中对db记录进行排序的效率
$activatedUsers=
$sortedPointsWithUserId=[];
$SORTEDATIVATEDUSERS=[];
foreach($activatedUsers as$user){
//如果$totalPoints是页面变量,您可以直接从组件和页面生命周期$this['totalPoints']使用它$this->page['totalPoints']
$sortedPointsWithUserId[$user->id]=$totalPoints+$user->xp+$user->progress;
}
//按降序对数组排序,因为我们将totalpoints存储为值,键存储为用户ID
//arsort维护键值关联
arsort($sortedPointsWithUserId);
foreach($sortedPointsWithUserId为$key=>$value){
$user=$activatedUsers[$key];
//在模型中创建一个变量来保存totalPoints,这样我们就不需要再次计算
$user->totalPoints=$value;
$sortedActivatedUsers[]=$user;
}
//$sortedActivatedUsers这是一个后端小部件吗?为什么不对激活的用户(在小部件类中)进行排序,然后将其传递给视图?我认为它比树枝更灵活。。
{% 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 %}
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;
}
{% for user in activatedUsers|sort('totalPoints') %}
$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