2016-11-16 2 views
2

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

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

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

Unknown "shuffle" filter in "partials/content.twig" at line 30.

Если я использую random():

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

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

Любые идеи?

ПРИМЕЧАНИЯ:

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

+0

определить функцию прут под названием 'shuffle' и использовать PHP перетасовать в этой функции , http://stackoverflow.com/questions/13277444/using-a-custom-function-in-twig – JustOnUnderMillions

+0

http://php.net/manual/en/function.shuffle.php –

+1

И имейте в виду 'php shuffle' работает со ссылкой и не имеет возвращаемого значения. – JustOnUnderMillions

ответ

3

Twig Array Extension уже имеет shuffle() фильтр (based на PHP shuffle())

+0

Получил это спасибо! – laukok

+1

Вот рабочая ссылка: http://twig-extensions.readthedocs.io/en/latest/array.html –

+0

Спасибо, я исправляю anwser! – Timurib

-1

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

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

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

{% endfor %} 

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

2

ли что-то подобное:

$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

+0

спасибо за руководство! – laukok

+1

Нет, но 'Twig Array Extension' - лучший способ;) did not now it – JustOnUnderMillions

+0

получил его, отсортировав, установив расширения. благодаря! :-) – laukok

0

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

Добавлено это мой конфиг/services.yml, под услуги:

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

Затем вы можете использовать:

{% for item in items|shuffle %} 
    ... 
{% endfor %} 
Смежные вопросы