如何在此函数中使用此回调消息



我正在努力在 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 #}

但事实并非如此:(

我的建议是使 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 %}

同意 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 

最新更新