有一些Twig数组:
feeds
,其中Feed为category_name
;
events
,news
,announces
发帖。
因此,我可以通过以下方式获取某个类别的帖子:
{% for feed in feeds %}
{% if feed.category_name == "events" %}
{% for post in events %}
{{post.title}}
{% endfor %}
{% endif %}
{% endfor %}
我可以获得相同的输出(如上面一个循环返回),并将category_name
字符串设置为数组名称吗?
此处feed.category_name
返回events
:
{% for feed in feeds %}
{% for post in feed.category_name %} {# feed.category_name == "events" #}
{{post.title}}
{% endfor %}
{% endfor %}
答案 0 :(得分:1)
我认为作者的意思是 - 使用从另一个变量派生的名称访问数组。因此,不需要额外的条件(这里的大多数答案都提出了额外的条件)。
基于我几分钟的研究,Volt一个人不会让你这么做。但是,由于您可以在Volt模板中嵌入PHP代码,并且稍后将twig文件编译为PHP,您可以执行以下操作:
{% for feed in feeds %}
<?php foreach (${$feed.category_name} as $post) { ?>
{{post.title}}
<?php } ?>
{% endif %}
{% endfor %}
我已经测试了这个 - 它确实有效。如果数组存在,您可能需要额外检查,以避免出现警告:
{% for feed in feeds %}
<?php
if (!empty(${$feed.category_name})) {
foreach (${$feed.category_name} as $post) {
?>
{{post.title}}
<?php } } ?>
{% endif %}
{% endfor %}
如果您不喜欢在模板中嵌入PHP的想法 - 请不要忘记您的模板将被编译为PHP!
答案 1 :(得分:1)
全局变量_context
包含当前上下文中的所有变量,因此您可以这样做:
{% for feed in feeds %}
{% for post in _context[feed.category_name]|default(null) %}
{{ post.title }}
{% endfor %}
{% endfor %}
如果找不到变量,则需要|default(null)
来防止Twig抛出异常。
答案 2 :(得分:0)
您希望将条件“添加”到循环中吗?我认为你的意思是Twig Documentation:
<ul>
{% for user in users if user.active %}
<li>{{ user.username|e }}</li>
{% endfor %}
</ul>
修改强> 你的主要问题是“变量变量”。您可以使用the attribute()函数解决此问题,并将不同的Feed合并到一个关联数组中(类别?)。
所以也许(未经测试):
{% for feed in feeds %}
{% for post in attribute(categories, feed.category_name) %}
{{post.title}}
{% endfor %}
{% endfor %}
答案 3 :(得分:0)
根据您的评论:
{% 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 %}