Twig — Как рандомизировать элементы в массиве и зациклить их?

Как я могу рандомизировать элементы в массиве и зациклить их?

{% for item in article.resources|shuffle|slice(1) %}
...
{% endfor %}

Я получаю эту ошибку:

Неизвестный фильтр «shuffle» в файле «partials / content.twig» в строке 30.

Если я использую случайным образом ():

{% for item in random(article.resources|slice(1)) %}

Ничего не возвращается.

Есть идеи?

ЗАМЕТКИ:

Я не хочу использовать PHP, кстати.

4

Решение

прут Расширение массива уже есть shuffle() фильтр (основан на PHP shuffle())

4

Другие решения

Сделайте что-нибудь подобное:

$twig = new Twig_Environment($loader);
$function = new Twig_SimpleFunction('shuffle', function ($array) {
shuffle($array);
return $array;
});
$twig->addFunction($function);

Об этом подробнее здесь

http://twig.sensiolabs.org/doc/advanced.html#functions

2

Я думаю, вам придется удалить часть его части.

Попробуйте этот код и дайте мне знать, если это работает.

{% for item in random(article.resources) %}

{% endfor %}

Вы, вероятно, хотели бы сохранить некоторую проверку в цикле for, чтобы функция random не возвращала один и тот же элемент дважды.

0

Я использовал веточку Расширение массива, использовать |shuffle, На моей установке расширение не было загружено.

Добавил это в мой config / services.yml, в разделе services:

services:
twig.extension.array:
class: Twig_Extensions_Extension_Array
tags: [twig.extension]

Тогда вы можете использовать:

{% for item in items|shuffle %}
...
{% endfor %}
0
По вопросам рекламы [email protected]