我正在尝试为订单系统创建一个包含日期的数组。这些日期对应于商店无法提供的日期。
我无法创建该数组,因为值是字符串,并且使用merge
过滤器不断产生错误。
我只能访问商店的前端,因此我无法创建自定义功能。
最终结果需要是一个包含所有日期的数组,因此我可以将其用作javascript数组,如下所示:
var closed = [
{{ closedDates }} // ["01-01-2018", "02-01-2018", etc...]
];
所以我拥有的是:
1)网上商店填写他们关闭的一天,也许是一段天。 这是三个变量,如:
{{ closedDays }} {# produces eg 01-01-2018, 02-01-2018, 03-01-2018 { it's dd-mm-yy #}
{{ date_range_start }} {# produces eg. 10-01-2018 #}
{{ date_range_end }} {# produces eg. 20-01-2018 #}
2)所以我做的是:
{% set closedDates = [] %}
{% if theme.closedDays %}
{% set foo = theme.closedDays %}
{% for i in foo | slice(0, 5) %}
{% set closedDates = closedDates | merge(i) %}
{% endfor %}
{% endif %}
{% if theme.date_range_start and theme.date_range_end %}
{% set start_date = theme.date_range_start %}
{% set end_date = theme.date_range_end %}
{# below function lists all days between start and end date #}
{% for weekRange in range(start_date|date('U'), end_date|date('U'), 86400 ) %}
{% set closedDates = closedDates | merge(weekRange | date('d-m-Y')) %}
{% endfor %}
{% endif %}
如上所述,我收到错误The merge filter only works with arrays or hashes;
。但是如何使用这些值创建数组呢?这只能用merge
完成吗?!
任何帮助非常感谢。
答案 0 :(得分:0)
在Twig中,您不能只将元素推送到数组。相反,您必须将数组与另一个数组合并。
给出一个数组:
{% set firstArray = ['a', 'b'] %}
如果你想添加元素'c',你必须合并它提供一个数组,即使你想添加单个字符串元素。
{% set firstArray = firstArray | merge(['c']) %}
如果使用关联数组,则类似:
{% set secondArray = {'a': 'string a', 'b': 'string b' } %}
{% set secondArray = secondArray | merge({'b': 'overwritten!', 'c': 'string c' }) %}
唯一的区别是元素b
将被secondArray
的值覆盖,所以你会得到:
{
'a': 'string a',
'b': 'overwritten!',
'c': 'string c'
}