Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Octobercms-按页面变量订购前端列表(变量不在数据库中)_Php_Sorting_Twig_Octobercms - Fatal编程技术网

Php Octobercms-按页面变量订购前端列表(变量不在数据库中)

Php Octobercms-按页面变量订购前端列表(变量不在数据库中),php,sorting,twig,octobercms,Php,Sorting,Twig,Octobercms,所以我试图在octobercms上创建一个包含前端用户数据的排行榜, 排行榜将基于数据库中当前变量的总和。我最近才开始研究细枝和十月,所以请耐心地看一下 一般变量: {% set totalScore = totalPoints + user.xp + user.progress %} 列表(简化) 但是那里没有运气。 我可能走错了路,所以请随意提出其他建议或指出我错过的东西。 提前感谢嗯,我不确定你在哪里设置你的激活用户,但是在设置之前,你可以简单地定义这个循环来对他们进行排序 只有当您的数

所以我试图在octobercms上创建一个包含前端用户数据的排行榜, 排行榜将基于数据库中当前变量的总和。我最近才开始研究细枝和十月,所以请耐心地看一下

一般变量:

{% 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