我很想在Twig中选择一个前一个for循环。我试图在一个类别中显示一些类别标题,如果该类别有子类别。如果类别没有子类别,那么它应该显示前一个循环的标题。通常,如果任何类别具有相同的深度,这将不是问题。不幸的是,这些类别有不同的深度。
所以我尝试做的是创建一些为我这样做的功能。
例如:
Category A -> Category A.sub -> Category A.subsub
Title1 Title1.1 Title1.2
Title1 Title1.1 Title1.2
Category B -> Category B.sub -> Category A.subsub
Title1 Title1.1 Title1.1
Title1 Title1.1 Title1.1
正如您所看到的,Category B.sub.sub
没有任何子类别。如果是这种情况,则应显示Category B.sub
的子类别。通常我会做这样的事情:
{% for category in shop.categories %}
{{ category.title }}
{% if category.subs %}
{% for category in category.subs %}
{{ category.title }}
{% if category.subs %}
{% for category in category.subs %}
{{ category.title }}
{% endfor %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
有没有办法创建一些功能来检查一个类别是否有子类别。如果不是这种情况,则访问前一个循环并显示这些类别名称。
我认为这很简单:
{% elseif not category.subs %}
{# Do this #}
但事实并非如此:(
答案 0 :(得分:1)
我的建议是在你的PHP代码中使数组的结构相似,并且不要在模板中放置这样的逻辑。
所以在php中你会有这样的事情:
if (!isset($categoryB['sub']['subsub']) {
$categoryB['sub']['subsub'] = $categoryA['sub']['subsub'];
}
然后你只是迭代你的模板:
{% for category in shop.categories %}
{{ category.title }}
{% for category in category.subs %}
{{ category.title }}
{% for category in category.subs.subsub %}
{{ category.title }}
我还建议让它递归,所以你会有类似的东西:
{% itarerateCategoryes categories %}
答案 1 :(得分:0)
同意Fyntasia我在模板中没有很多逻辑,我会将控制器中的数据解析为我想要的形式。
但假设您的数据类似(无法理解您的符号);
$categories = [
0 => [
'top' => ['Atop1', 'Atop2'],
'middle' => ['Amiddle1', 'Amiddle2'],
'bottom' => ['Abottom1', 'Abottom2'],
],
1 => [
'top' => ['Btop1', 'Btop2'],
'middle' => ['Bmiddle1', 'Bmiddle2'],
],
];
喜欢的东西;
{% for main_index, category in categories %}
{% if category.top is defined and category.top|length > 0 %}
{{ loop.index0 }} has top values
{% endif %}
{% if category.middle is defined and category.middle|length > 0 %}
{{ loop.index0 }} has middle values
{% endif %}
{% if category.bottom is defined and category.bottom|length > 0 %}
{{ loop.index0 }} has bottom values
{% else %}
{{ loop.index0 }} has no value so using {{ categories[loop.index0 - 1].bottom|join(', ') }}
{% endif %}
<br />
{% endfor %}
输出类似的内容;
0 has top values 0 has middle values 0 has bottom values
1 has top values 1 has middle values 1 has no value so using Abottom1, Abottom2