我在Twig中有两个循环。一种是检查产品的库存水平,另一种是显示一些产品选项。我正在尝试从一个循环创建一个变量,我可以在另一个循环中使用它来为列表添加类名。
我无法让它发挥作用。任何帮助都更受欢迎......
我拥有的是:
{% set stockLevel = '' %}
{% for variant in product.variants %}
{% set stockLevel = variant.stock.level %}
{{ stockLevel }} // gives 1 0 1 1 (So all sizes except the second one are available)
{% endfor %}
{% for option in product.options %}
<ul class="optionslist">
{% if option.values %}
{% for value in option.values %}
<li class=" {% if stockLevel == 0 %}not_on_stock {% endif %}" >
<a class="item">etc...</a>
</li>
{% endfor %}
{% endif %}
</ul>
{% endfor %}
答案 0 :(得分:0)
我相信您处理数据的方式有问题。现在,如果您的变量在第二个 for 循环中可访问,则会发生事件,它的值将是最后一个,并且您的脚本无论如何都会失败。
我可以建议一些hacky方式,随意即兴或使用它背后的想法。
说,我们分配一个空数组:
{% set variantsArray = [] %}
然后,我们将使用过滤器合并来填充一些虚拟数据(第一个循环开始发挥作用)
{% for number in 1..5 %}
{% set variantsArray = variantsArray | merge([number]) %}
{% endfor %}
那么可以肯定的是,我们可以访问那里的所有值,我们只是将它丢弃(那是你的第二个循环的来源)
{% for index in 1..3 %}
{{ dump(variantsArray) }}
{% endfor %}
生成以下转储:
array:5 [▼
0 => 1
1 => 2
2 => 3
3 => 4
4 => 5
]
希望你明白了。欢迎任何建议。
答案 1 :(得分:0)
我不确定你要做什么,你怎么从变种中获得你的库存水平?我认为最好有一个服务功能,帮助您按产品获得库存水平,代码更清洁:
$stock_helper = $this->container->get('stockhelper_service');
$stocklevel = $stock_helper->getStockLevelByProduct($product); //getstocklevelbyproduct handle your logic and return the stock level integer.
将此变量传递给树枝。
你的树枝中有一个变量,没有循环,视图和动作中的清晰视图,可理解的代码。
答案 2 :(得分:0)
好的,我找到了解决方案。诀窍是&#34; connect&#34;两个价值观。像这样:
{% for option in product.options %}
{% if option.values %}
<ul id="product_configure_option2_{{ option.id }}" data-id="{{ option.id }}">
{% for value in option.values %}
{% set stock = null %}
{% for variant in product.variants **if variant.title == (option.title ~ ': ' ~ value.title)** %}
{% set stock = variant.stock %}
{% endfor %}
<li value="{{ value.id }}"{% if not stock.available %} class="not_on_stock"{% endif %}>{{ value.title }}</li>
{% endfor %}
</ul>
{% endif %}
{% endfor %}