问题
How can I randomise items in the array and loop them?
{% for item in article.resources|shuffle|slice(1) %}
...
{% endfor %}
I get this error:
Unknown "shuffle" filter in "partials/content.twig" at line 30.
If I use random():
{% for item in random(article.resources|slice(1)) %}
Nothing is returned.
Any ideas?
NOTES:
I don't want to use PHP btw.
回答1:
Twig Array Extension already has a shuffle()
filter (based on PHP shuffle())
回答2:
Do something like that:
$twig = new Twig_Environment($loader);
$function = new Twig_SimpleFunction('shuffle', function ($array) {
shuffle($array);
return $array;
});
$twig->addFunction($function);
read more about it here
http://twig.sensiolabs.org/doc/advanced.html#functions
回答3:
I used the Twig Array Extension, to make use of |shuffle
. On my installation the extension wasn't loaded.
Added this to my config/services.yml, under services:
services:
twig.extension.array:
class: Twig_Extensions_Extension_Array
tags: [twig.extension]
Then you can use:
{% for item in items|shuffle %}
...
{% endfor %}
回答4:
I think you will have to remove slice part of it.
Try this code and let me know if this works.
{% for item in random(article.resources) %}
{% endfor %}
You would probably like to keep some check in your for loop to ensure random is not returning same item twice.
来源:https://stackoverflow.com/questions/40629390/twig-how-to-randomise-items-in-the-array-and-loop-them