因为drupal的树枝模板表现得很奇怪
我试图从事件列表中只显示即将发生的事件。下面是我试图展示的方式因为drupal的树枝模板表现得很奇怪,drupal,twig,drupal-8,Drupal,Twig,Drupal 8,我试图从事件列表中只显示即将发生的事件。下面是我试图展示的方式 <div class="row"> {% for item in items %} {% if item.content['#node'].field_event_type.getValue()|first.value == 'upcoming' %} <div class="col">{{item.content}}</div> {
<div class="row">
{% for item in items %}
{% if item.content['#node'].field_event_type.getValue()|first.value == 'upcoming' %}
<div class="col">{{item.content}}</div>
{% endif %}
{% endfor %}
</div>
{items%%中的项的%s}
{%if item.content['#node'].field_event_type.getValue()| first.value=='即将到来的'%}
{{item.content}
{%endif%}
{%endfor%}
但是输出渲染是,第二个事件显示在row div之后,如下所示。我不明白这是怎么发生的,因为for循环在row div中
<div class="row">
<div class="col"> content </div>
</div><div class="col"> content </div>
内容
内容
预期产量
<div class="row">
<div class="col"> content </div>
<div class="col"> content </div>
</div>
内容
内容
Twig做了很多事情:
- 加载(打开你的小枝内容)
- 解析(从细枝内容创建解析树)
- 编译(浏览该树以创建php文件)
- 缓存(将php文件存储在某个位置,以避免下次重新编译)
- 执行(执行生成的php文件)
{%for%}
时,Twig递归调用令牌解析器,直到找到{%endfor%}
并构建令牌树。在您的情况下,它看起来像:
root
|
--- string
|
--- for
| |
| --- if
| |
| --- string
|
--- string
然后,Twig编译器递归地遍历该树并生成相应的php代码。这样,以下细枝循环:
{% for i in 1..5 %}
Value = {{ i }}
{% endfor %}
在PHP中编译为:
// line 1
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable(range(1, 5));
foreach ($context['_seq'] as $context["_key"] => $context["i"]) {
// line 2
echo "Value = ";
echo twig_escape_filter($this->env, $context["i"], "html", null, true);
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['_key'], $context['i'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
如您所见,{%for%}
只不过是一个简单的foreach
,由于树枝标记存储在树中,因此设计上不可能显示位于一对打开/关闭标记下方的内容
我能看到的唯一可能性是,您在Twig中使用的一个标记正在使用输出缓冲,而您在循环中使用的一个方法会破坏ob堆栈(例如,没有任何先前打开的ob\u start()
)
我的建议是将您的twig文件名grep到缓存目录中(例如:
grep-Ri'test.twig'cache/
),以便查看编译为PHP的文件,准确了解它的功能,并对其进行调试。在Drupal视图中过滤结果,而不是过滤twig中的内容
在视图的“筛选条件”中,选择字段\事件\类型字段并将其设置为“等于”,然后选择/添加“即将到来”作为选项
如果在视图中进行过滤,则不必弄乱细枝模板