Twig 细枝变量

Twig 细枝变量,twig,Twig,有一些细枝阵列: 提要,其中提要获取类别名称 事件,新闻,用帖子宣布 因此,我可以通过这种方式获得某个类别的帖子: {% for feed in feeds %} {% if feed.category_name == "events" %} {% for post in events %} {{post.title}} {% endfor %} {% endif %} {% endfor %} 我是否可以使用category\u namestring设置为数组名来

有一些细枝阵列:

  • 提要
    ,其中提要获取
    类别名称

  • 事件
    新闻
    用帖子宣布

因此,我可以通过这种方式获得某个类别的帖子:

{% for feed in feeds %}
  {% if feed.category_name == "events" %}
  {% for post in events %}
    {{post.title}}
  {% endfor %}
  {% endif %}
{% endfor %}
我是否可以使用
category\u name
string设置为数组名来获得相同的输出(如上一个循环返回)

此处
feed.category\u name
返回
events

{% for feed in feeds %}
  {% for post in feed.category_name %} {# feed.category_name == "events" #}
    {{post.title}}
  {% endfor %}
{% endfor %}

您想将条件“添加”到循环中吗?我想你的意思是:


根据您的评论:

{% set new_array = news|merge(events) %}
{% for feed in feeds if attribute(feed.category_name, ['events', 'news']) %}
     {% for post in new_array %}
         {{post.title}}
     {% endfor %}
  {% endif %}
{% endfor %}

我认为问题作者的意思是–使用从另一个变量派生的名称访问数组。所以不需要额外的条件(这里的大多数答案都提出了额外的条件)

根据我几分钟的研究,光是Volt是不会让你这么做的。但是,由于您可以在Volt模板中嵌入PHP代码,并且稍后会将细枝文件编译为PHP,因此您可以执行以下操作:

{% for feed in feeds %}
  <?php foreach (${$feed.category_name} as $post) { ?>
    {{post.title}}
  <?php } ?>
  {% endif %}
{% endfor %}
{%用于提要中的提要%}
{{post.title}
{%endif%}
{%endfor%}
我已经测试过了——它确实有效。如果阵列存在,您可能需要添加额外的检查,以避免出现警告:

{% for feed in feeds %}
  <?php 
    if (!empty(${$feed.category_name})) { 
      foreach (${$feed.category_name} as $post) { 
  ?>
          {{post.title}}
  <?php } } ?>
  {% endif %}
{% endfor %}
{%用于提要中的提要%}
{{post.title}
{%endif%}
{%endfor%}

如果您不喜欢在模板中嵌入PHP的想法,请不要忘记模板将被编译为PHP

全局变量
\u context
保存当前上下文中的所有变量,因此可以执行以下操作:

{% for feed in feeds %}
    {% for post in _context[feed.category_name]|default(null) %}
        {{ post.title }}
    {% endfor %}
{% endfor %}
如果未找到变量,则需要使用
| default(null)
来防止Twig引发异常


要将类别名称放入数组吗?@JCSama我要循环与
类别名称
同名的数组。可以发布
post
变量吗content@JCSama这是元素,。我不确定我是否得到了它,你有一个字符串
类别\u name
,你想在上面循环!!谢谢你的主意。我将
事件
新闻
数组组合成一个新的(
所有帖子
)数组,如果post.has_term(feed.category_name)%}[[post.title]{%endfor%}我现在可以获得该类别的帖子。这个解决方法对我的问题有所帮助。不过,它与变量主题并不完全相关。谢谢您的解决方案。不幸的是,在我的环境(WordPress Timber插件)中,我不能在Twig模板中使用PHP。那么,我想,您将无法以完美的方式完成它:-(您必须手动解析每个类别名称,就像其他建议的那样)
{% for feed in feeds %}
  <?php 
    if (!empty(${$feed.category_name})) { 
      foreach (${$feed.category_name} as $post) { 
  ?>
          {{post.title}}
  <?php } } ?>
  {% endif %}
{% endfor %}
{% for feed in feeds %}
    {% for post in _context[feed.category_name]|default(null) %}
        {{ post.title }}
    {% endfor %}
{% endfor %}