来自另一个循环的Twig变量不起作用

时间:2015-04-09 22:27:14

标签: symfony twig

我在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 %}

3 个答案:

答案 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 %}