如何更改与页面相关的“如果”条件

时间:2019-05-01 10:50:53

标签: wordpress twig timber

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

{% include "tab_system.twig" %}

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

{% 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循环来显示相应的内容。我需要在active文件的第一个链接和第一个内容选项卡上添加blog_list.twig类,并根据用户的类别将active类添加到链接和内容选项卡。

<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是在其他地方定义的变量。他们工作

如何创建条件?预先谢谢你。

1 个答案:

答案 0 :(得分:0)

由于我假设您正在循环记录,所以我说不要使事情复杂化

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 %}