来自一个循环的 Twig 变量在另一个循环中不起作用
Twig variable from one loop in another doesn't work
我在 Twig 中有两个循环。一种是查看产品的库存水平,另一种是显示一些产品选项。我正在尝试从一个循环创建一个变量,我可以在另一个循环中使用它来将 class 名称添加到列表中。
我无法让它工作。欢迎任何帮助...
我的是这样的:
{% 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 %}
我认为您处理数据的方式有问题。现在,如果你的变量在你的第二个 for 循环中是可访问的,它的值将是最后一组,你的脚本无论如何都会失败。
我可以建议一些 hacky 方法,随意即兴创作或使用它背后的想法。
比如说,我们分配一个空数组:
{% set variantsArray = [] %}
然后,我们将使用过滤器 merge 用一些虚拟数据填充它(这就是您的第一个循环发挥作用的地方)
{% 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
]
希望你明白了。欢迎任何建议。
我不确定您要做什么,您如何从变体中获得库存水平?我认为最好有一个服务功能来帮助您按产品获得库存水平,代码会更清晰:
控制器动作
$stock_helper = $this->container->get('stockhelper_service');
$stocklevel = $stock_helper->getStockLevelByProduct($product); //getstocklevelbyproduct handle your logic and return the stock level integer.
将此变量传递给树枝。
你的树枝中有一个变量,那里没有循环,视图清晰,视图和操作中的代码易于理解。
好的,我找到了解决方案。诀窍是 "connect" 这两个值。像这样:
{% 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 %}
我在 Twig 中有两个循环。一种是查看产品的库存水平,另一种是显示一些产品选项。我正在尝试从一个循环创建一个变量,我可以在另一个循环中使用它来将 class 名称添加到列表中。
我无法让它工作。欢迎任何帮助...
我的是这样的:
{% 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 %}
我认为您处理数据的方式有问题。现在,如果你的变量在你的第二个 for 循环中是可访问的,它的值将是最后一组,你的脚本无论如何都会失败。
我可以建议一些 hacky 方法,随意即兴创作或使用它背后的想法。
比如说,我们分配一个空数组:
{% set variantsArray = [] %}
然后,我们将使用过滤器 merge 用一些虚拟数据填充它(这就是您的第一个循环发挥作用的地方)
{% 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
]
希望你明白了。欢迎任何建议。
我不确定您要做什么,您如何从变体中获得库存水平?我认为最好有一个服务功能来帮助您按产品获得库存水平,代码会更清晰:
控制器动作
$stock_helper = $this->container->get('stockhelper_service');
$stocklevel = $stock_helper->getStockLevelByProduct($product); //getstocklevelbyproduct handle your logic and return the stock level integer.
将此变量传递给树枝。
你的树枝中有一个变量,那里没有循环,视图清晰,视图和操作中的代码易于理解。
好的,我找到了解决方案。诀窍是 "connect" 这两个值。像这样:
{% 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 %}