如何更改与页面相关的 "if" 条件

How to change "if" condition related to a page

我想将 tab_system.twig 文件包含在两个不同的文件中:archive.twigblog_list.twig 以便在这两个文件中具有相同的 html。

{% include "tab_system.twig" %}

在这个 tab_system.twig 文件中,我有一个条件要添加 active class :

{% if XXX %}active{% endif %}

但是这个条件必须根据用户所在的页面而有所不同。

对于blog_list.twig{% if loop.first %}active{% endif %}

对于archive.twig{% if item.term_id == term_page.term_id %}active{% endif %}

我写这个没有成功:

{% set addclass = '' %}

{% if is_blog_list %}
    {% set addclass = '{% if loop.first %}active{% endif %}' %}
{% elseif is_archive %}
    {% set addclass = '{% if item.term_id == term_page.term_id %}active{% endif %}' %}
{% endif %}

tab_system.twig 中,我有一个选项卡系统,其中包含一部分的菜单和另一部分的内容。我写了一个js循环显示相应的内容。我需要在 blog_list.twig 文件的第一个 link 和第一个内容选项卡上添加 active class,并将 active class 添加到 link 和内容选项卡,具体取决于用户所属的类别。

<div class="tab-menu-list">
   {% for item in all_posts %}
        <a href="#" class="tab-menu {{ addclass }}"</a>
   {% endfor %}
</div>

<div class="tab-content-list">
   {% for item in all_posts %}
        <div href="#" class="tab-content {{ addclass }}"</div>
   {% endfor %}
</div>

is_archiveis_blog_list 是别处定义的变量。他们工作

如何创建条件?提前谢谢你。

因为我假设您正在循环记录,所以我会说不要使事情过于复杂,

single.twig

{% for i in 1..5 %}
    {% include 'article.twig' with { 'active' : loop.first, } %}
{% endfor %}

template_blog.twig

{% for item in items %}
    {% include 'article.twig' with { 'active' : item.term_id == term_page.term_id, } %}
{% endfor %}

article.twig

<div class="articles__list tab-content{{ active ? ' active'}}">
    foo
</div>

demo - 只需更改主模板


如果您真的想将 for 保留在 article 模板中,我认为这不是一个好主意,您仍然可以使用变量 is_archiveis_blog_listarticle 内,例如

article.twig

{% for item in items %}
    {% if is_archive %}
        {% set active = loop.first %}
    {% elseif is_blog_list %}
        {% set active = item.term_id == term_page.term_id %}
    {% endif %}
    <div class="articles__list tab-content{{ active ? ' active'}}">

{% endfor %}