我有字段实体:
用户
还有更多。我发送给具有对象用户的Twig数组。
在表格中的树枝显示用户中:
{% for user in users %}
<td>{{ user.name }}<td> <td>{{ user.lastname}}<td> <td>{{ user.age}}<td>
{% endfor %}
如何在Twig中通过名称或姓氏等对用户进行排序。我想创建可排序表。
答案 0 :(得分:15)
是的,您可以添加自定义过滤器:
{% for user in users|usort %}
...
{% endfor %}
然后将扩展/新过滤器添加到Twig:
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;
}
答案 1 :(得分:3)
从Twig 2.12(于2019年10月5日发布)开始,您可以在sort
参数中使用带有箭头功能的arrow
过滤器。
例如,按名称订购:
{% for user in users|sort((a, b) => a.name <=> b.name) %}
<td>{{ user.name }}</td> <td>{{ user.lastname}}</td> <td>{{ user.age}}</td>
{% endfor %}
答案 2 :(得分:2)
按相反顺序排序:
{% for user in users|sort|reverse %}
...
{% endfor %}
排序和反转是可以组合的。
答案 3 :(得分:0)
您必须使用“Order by”子句在模型中执行此操作。但是,如果你想拥有一个可以动态排序的表,你应该关注jQuery tablesorter插件(或者如果你不想使用jQuery那么等效)。
答案 4 :(得分:0)
对于使用Collections in Grav的用户,您只需执行以下操作:
{% for user in users.order("name", "asc") %}
...
{% endfor %}
当然,name
可以是给定对象的任何属性,asc
可以是desc
。
这也适用于点连接属性:
{% for child in page.children.order("page.headers.foo.bar", "desc") %}
答案 5 :(得分:0)
使用新版本的树枝,您可以按冒号排序
{% set fruits = [
{ name: 'Apples', quantity: 5 },
{ name: 'Oranges', quantity: 2 },
{ name: 'Grapes', quantity: 4 },] %}
{% for fruit in fruits|sort((a, b) => a.quantity <=> b.quantity)|column('name') %}
{{ fruit }}
{% endfor %}
答案 6 :(得分:0)
我使用的是Timber for Wordpress,仍然使用Twig 1+,所以我不能使用arrow参数。我刚刚使用PHP的usort函数创建了这样的过滤器:
// sort an array of objects by parameter
$twig->addFilter( new Twig_SimpleFilter( 'sort_by_key',
function ( $array, $key, $order = 'asc', $type = 'string' ) {
usort( $array, function($a, $b) use ($key, $order, $type) {
$a = $a[$key]; $b = $b[$key];
if( $type === 'date' ) {
$a = strtotime( $a );
$b = strtotime( $b );
}
if( $a == $b ) {
return 0;
}
switch( $order ) {
case 'desc' : case 'DESC' :
return $a < $b ? 1 : -1;
break;
default :
return $a < $b ? -1 : 1;
}
} );
return $array;
}));
然后在我的树枝模板中
{% set array = myArrayOfObjects | sort_by_key('date', 'desc', 'date') %}
与“高级自定义字段”转发器字段配合使用。
答案 7 :(得分:-2)
根据特定领域的订单,开箱即用的树枝是不可能的。
你可以在twig中使用PHP asort对|sort
过滤器进行排序,或者你可以编写一个自定义的枝条扩展来完成你需要的工作。
{% for user in users|sort %}
...
{% endfor %}
并使用| reverse filter
反转顺序{% for user in users|reverse(true) %}
...
{% endfor %}