Добавить элементы массива в переменную в Twig

Я сохранил некоторые настройки в массиве в Twig, и мне нужно сохранить их в какую-то переменную, чтобы я мог ее распечатать. Мой массив содержит некоторые атрибуты данных, подобные этому:

{% set data = {
    visible:    { data: "data-visible-items", value: options.visible_items },
    scroll: { data: "data-itemes-scroll", value: options.items_to_scroll },
    speed: { data: "data-animation-speed", value: options.animation_speed },
    infinite: { data: "data-infinite", value: options.infinite },
    autoplay: { data: "data-autoplay", value: options.autoplay_enable },
    interval: { data: "data-autoplay-interval", value: options.autoplay_interval },
    hover: { data: "data-autoplay-hover", value: options.autoplay_hover },
} %}

Просто я хочу хранить все из массива в одной переменной, в этой переменной нужно хранить вот так (разделитель пробел) например:

data-visible-items="5" data-items-scroll="2" data-animation-speed="400" data-infinite="0" data-autoplay="1" data-autoplay-interval="3000" data-autoplay-hover="1"

Итак, если переменная, например, атрибуты, я просто хочу распечатать ее следующим образом:

<div{{ attributes}}>
// Content
</div>

Я написал для цикла следующим образом:

{% for item in data %}
    {{ item.data }} {{ item.value }}
{% endfor %}

и он будет печатать все данные и значения, но как сохранить это в переменной так, как я описал выше?


person mixerowsky    schedule 02.08.2017    source источник


Ответы (2)


Если вы хотите сохранить в переменную, вы можете сделать это:

{% for item in data %}
    {% set myvar = item.data ~ ' ' ~ item.value %}
{% endfor %}
person Med    schedule 02.08.2017
comment
Переменная myvar не существует вне цикла, и вы каждый раз перезаписываете ее и, таким образом, не создаете строку со всеми переменными внутри нее. - person DarkBee; 03.08.2017
comment
Как сказал ОП, он хочет напечатать var, используя что-то вроде ‹div{{ var}}›, чтобы он мог сделать это в цикле, он не указывает, что хочет сохранить его вне цикла... - person Med; 03.08.2017
comment
Цитата из вопроса ОП, Simply I want to store everything from array in one variable, in this variable - person DarkBee; 03.08.2017

Если вы хотите преобразовать этот массив, вы можете использовать Twig_Filter или Twig_Function

  1. просто цепочка http_build_query

PHP

$twig->addFunction(new Twig_SimpleFunction('http_build_query', http_build_query', ['is_safe' => [ 'html', ],]));

Ветка

<div{{ http_build_query(attributes, '', ' ') }}>
  1. Создайте строку самостоятельно с помощью foreach

PHP

$twig->addFilter(new Twig_SimpleFilter('build_attribute_list', function (array $array) {
    $str = '';
    foreach($array as $key => $val) $str .= ' '.$key.'="'.$val.'"';
    return $str;
}, ['is_safe' => ['html'],]);

Ветка

<div{{ attributes|build_attribute_list }}>

(edit) Излишне говорить, что вы также можете сохранить вывод в переменной

{% set my_var = attributes|build_attribute_list %}
{{ my_var }}
person DarkBee    schedule 02.08.2017