Twig/Timber 有条件地显示正文 class

Twig/Timber conditional to show body class

如果 URL 中有特定的字符串,我正在寻找一种向正文添加 class 的方法。

我的逻辑有点像,但语法如下: 1. 不干 2.因为if语句

只循环第一次迭代

我想我需要以某种方式在 'if' 语句之后放置一个数组,但不确定语法。 任何帮助,将不胜感激。 谢谢

{% if 'bus-data' in post.link %}
  <body class="{{body_class}} jumbo" data-template="base.twig">
{% elseif 'bus-data' not in post.link %}
  <body class="{{body_class}}" data-template="base.twig">
{% endif %}

{% if 'taxi-data' in post.link %}
  <body class="{{body_class}} jumbo" data-template="base.twig">
{% elseif 'taxi-data' not in post.link %}
  <body class="{{body_class}}" data-template="base.twig">
{% endif %}

{% if 'education-data' in post.link %}
  <body class="{{body_class}} jumbo" data-template="base.twig">
{% elseif 'education-data' not in post.link %}
  <body class="{{body_class}}" data-template="base.twig">
{% endif %}

{% if 'public-data' in post.link %}
  <body class="{{body_class}} jumbo" data-template="base.twig">
{% elseif 'public-data' not in post.link %}
  <body class="{{body_class}}" data-template="base.twig">
{% endif %}

您可以创建一个新的过滤器来解决这个问题,

过滤器

$twig->addFilter(new Twig_SimpleFilter('contains', function ($value, $needles) {
    if (!is_array($needles)) $needles = [ $needles, ];
    foreach($needles as $needle) if (strpos($value, $needle) !== false) return true;
    return false;
});

树枝

<body class="{{body_class}}{% if post.link|contains(['bus-data', 'taxi-data', 'education-data', 'public-data',]) %} jumbo{% endif %}" data-template="base.twig">

看来我可能把一些非常简单的事情复杂化了,离开它会使它变得更清晰。 我刚刚整理了 'else if' 循环:

{% if 'bus-data' in post.link %}
  <body class="{{body_class}} jumbo" data-template="base.twig">
{% elseif 'taxi-data' in post.link %}
  <body class="{{body_class}} jumbo" data-template="base.twig">
{% elseif 'education-data' in post.link %}
  <body class="{{body_class}} jumbo" data-template="base.twig">
{% elseif 'public-data' in post.link %}
  <body class="{{body_class}} jumbo" data-template="base.twig">
{% else %}
  <body class="{{body_class}}" data-template="base.twig">
{% endif %}