【问题标题】:Shopify Liquid Theme advance custom field checkbox if-statement did not understand "true" as truthyShopify Liquid Theme 高级自定义字段复选框 if 语句不理解“真”为真
【发布时间】:2021-07-28 17:36:41
【问题描述】:

我通过高级自定义字段插件在 Shopify 中的产品中添加了一些复选框。

在主题中,我想遍历这些复选框,并且只有当复选框已被选中时,我才想在此处显示特定的翻译文本。

但是,我在 IF 语句中无法检查复选框是否被选中。

这是我的代码(带有一些调试输出)

<ul>
  {% for field in product.metafields.warnhinweise %}
    {% assign field_first = field | first %}
    {% assign field_last = field | last %}
    <li>ID: {{ field_first }} - Value: {{ field_last }}</li>

    {% assign language_key = 'products.productwarnings.' | append: field_first %}

      {% if field_last == true %}
        <ul>
          <li>ID: {{ field_first }} - Value: {{ field_last }}</li>
          <ul>
            <li>nest the variable output: {{ language_key  | t }}</li>
          </ul>
        </ul>
      {% else %}
        <ul>
          <li>don't show</li>  
        </ul>
      {% endif %}
  {% endfor %}
</ul>

这是输出:

结论:也许真实不真实?

我也试过这个,检查字符串:

{% if field_last == 'true' %}

但这会导致相同的结果。

这是来自高级自定义字段后端的屏幕截图

这里是一个复选框的示例配置。

我真的很奇怪为什么这么简单的 IF 语句在这里不起作用?

非常感谢您的帮助。

【问题讨论】:

  • 也许问题在于复选框以及它返回“真实”的方式?是在数组里面还是类似的东西?
  • 如果你更新你的打印语句来输出Value: {{ field_last | json }},你会得到什么? (json 过滤器将任何值转换为 javascript 合法输出,因此将显示可能存在的任何引号、数组括号等)
  • 尝试剥离变量以获得额外的空格{% assign field_last = field | last | strip %}
  • 抱歉,回复晚了。 @DaveB 输出现在是:Value: ["false"]Value: ["true"] @cMarius 好主意,但这并没有解决问题。有趣的是,json 过滤器的输出现在是:"[\"false\"]""[\"true\"]"
  • 有趣 - 看起来元字段被存储为一个数组,该数组已转换为字符串,并保存 ["true"]["false"] 的文字值(作为字符串)。如果您将比较更新为{% if field_last contains 'true' %},会发生什么?

标签: shopify liquid


【解决方案1】:

元字段可能未以与您的比较完全匹配的格式存储

当 Shopify 将值打印到您的文档时,有时可能很难确定基础值的数据类型。例如,如果true 正在打印到文档中,是因为该值是布尔值true、字符串"true"、包含['true'] 的值数组还是其他什么?

要找出幕后使用的确切值是什么,我建议使用| json 过滤器来输出您的变量。通过使用 {{ field_last | json }} 之类的东西,Shopify 会将变量转换为 javascript-legal 格式并包含所有特殊字符(并且引号等一些特殊字符将被 \ 字符转义),从而揭示底层结构是。

在您的情况下,元字段值看起来像数组。我建议不要在此构造上进行完全匹配,而是建议在比较 contains 关键字时切换相等运算符 (==):

{% if field_last contains 'true' %}
  <!-- Cool feature goes here! -->
{% endif %}

【讨论】:

    猜你喜欢
    • 2014-10-13
    • 2015-09-27
    • 2013-10-23
    • 2019-03-20
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    相关资源
    最近更新 更多