Twig for 循环 - 如果 children 存在,则只输出 parent
Twig for loop - output only parent if any children exists
这些行打印所有类别和其中的产品。但是,如果类别没有产品,类别标题仍会打印。
{% for category in categories %}
<h1>{{ category.title }}</h1>
{% for product in products if products.category|first == category.title|lower %}
<h2>{{ product.title }}</h2>
{% endfor %}
{% endfor %}
如何优化它以便仅当类别包含产品时才打印类别标题?
有 (imo) 2 个解决方案。第一个是纯粹基于 twig
的,但是是两种方法中最差的。
为了在没有 children 的情况下跳过类别,这将需要第二个循环和标志变量来确定是否跳过类别。由于 twig
无法跳出循环,这意味着您需要 foreach
产品完全
两次
{% for category in categories %}
{% set flag = false %}
{% for product in products if products.category|first == category.title|lower %}
{% set flag = true %}
{% endfor %}
{% if flag %}
<h1>{{ category.title }}</h1>
{% for product in products if products.category|first == category.title|lower %}
<h2>{{ product.title }}</h2>
{% endfor %}
{% endif %}
{% endfor %}
第二个更好的解决方案是向您的 category
-模型添加一个额外的方法并执行类似
的操作
{% for category in categories if category.hasProducts() %}
<h1>{{ category.title }}</h1>
{% for product in products if products.category|first == category.title|lower %}
<h2>{{ product.title }}</h2>
{% endfor %}
{% endfor %}
一个简单的解决方案是在你的树枝循环中添加一个 is defined
条件。
示例:
{% for category in categories if categories is defined %}
<h1>{{ category.title }}</h1>
{% for product in products if products.category|first == category.title|lower %}
<h2>{{ product.title }}</h2>
{% endfor %}
{% endfor %}
这些行打印所有类别和其中的产品。但是,如果类别没有产品,类别标题仍会打印。
{% for category in categories %}
<h1>{{ category.title }}</h1>
{% for product in products if products.category|first == category.title|lower %}
<h2>{{ product.title }}</h2>
{% endfor %}
{% endfor %}
如何优化它以便仅当类别包含产品时才打印类别标题?
有 (imo) 2 个解决方案。第一个是纯粹基于 twig
的,但是是两种方法中最差的。
为了在没有 children 的情况下跳过类别,这将需要第二个循环和标志变量来确定是否跳过类别。由于 twig
无法跳出循环,这意味着您需要 foreach
产品完全
{% for category in categories %}
{% set flag = false %}
{% for product in products if products.category|first == category.title|lower %}
{% set flag = true %}
{% endfor %}
{% if flag %}
<h1>{{ category.title }}</h1>
{% for product in products if products.category|first == category.title|lower %}
<h2>{{ product.title }}</h2>
{% endfor %}
{% endif %}
{% endfor %}
第二个更好的解决方案是向您的 category
-模型添加一个额外的方法并执行类似
{% for category in categories if category.hasProducts() %}
<h1>{{ category.title }}</h1>
{% for product in products if products.category|first == category.title|lower %}
<h2>{{ product.title }}</h2>
{% endfor %}
{% endfor %}
一个简单的解决方案是在你的树枝循环中添加一个 is defined
条件。
示例:
{% for category in categories if categories is defined %}
<h1>{{ category.title }}</h1>
{% for product in products if products.category|first == category.title|lower %}
<h2>{{ product.title }}</h2>
{% endfor %}
{% endfor %}