You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopify中用Liquid获取指定文件夹Metaobjects失败求助

Shopify Liquid无法加载Connections类型Metaobjects(Johnson Controls文件夹)问题排查与修复

核心问题分析

  1. 字段访问逻辑错误:自定义Metaobject字段必须通过.value获取实际内容,你当前代码中存在直接访问字段对象(如metaobject.name)而非字段值的情况,过滤条件也未针对字段值进行匹配。
  2. 文件夹过滤缺失:你提到要从Johnson Controls文件夹获取数据,但当前代码是通过company字段过滤,混淆了文件夹属性与自定义字段的区别。
  3. 调试输出不准确:调试循环未区分系统字段与自定义字段,导致输出信息混乱,无法精准定位数据是否正确加载。

修复后的代码

<div class="mentor-container">
    {% assign connection_name = 'connections' %}
    {% assign metaobjects = shop.metaobjects[connection_name] %}

    <h2>Debug Information</h2>
    <ul>
    {% for metaobject in metaobjects %}
      <li>
        Metaobject Handle: {{ metaobject.handle }}
        Folder: {{ metaobject.folder.name | default: 'No folder' }}
        <ul>
          {% comment %} 仅输出自定义字段的键值对,排除系统字段干扰 {% endcomment %}
          {% for field_key in metaobject.type.field_definitions %}
            <li>{{ field_key }}: {{ metaobject[field_key].value }}</li>
          {% endfor %}
        </ul>
      </li>
    {% endfor %}
    </ul>

    {% comment %} 方案1:按Johnson Controls文件夹过滤(匹配你的需求描述) {% endcomment %}
    {% assign filtered_metaobjects = metaobjects | where: 'folder.name', 'Johnson Controls' %}

    {% comment %} 方案2:按自定义company字段值过滤(如果需求是字段匹配) {% endcomment %}
    {% comment %} {% assign filtered_metaobjects = metaobjects | where: 'company.value', 'Johnson Controls' %} {% endcomment %}

    {% if filtered_metaobjects.size > 0 %}
      <meta name="description" content="{{ filtered_metaobjects.first.description.value | escape }}">
      {% render 'meta-tags' %}
    {% else %}
      <p>No metaobjects found for the specified folder/company.</p>
    {% endif %}

    {% for metaobject in filtered_metaobjects %}
      <div class="mentor-card" onclick="openVideo('{{ metaobject.vimeo_1.value | escape }}')">
        {% if metaobject.photo.value %}
          <img src="{{ metaobject.photo.value | image_url: width: 100 }}" alt="{{ metaobject.name.value | escape }}">
        {% else %}
          <p>No photo available for {{ metaobject.name.value | escape }}</p>
        {% endif %}
        {% if metaobject.name.value %}
          <h3>{{ metaobject.name.value }}</h3>
        {% endif %}
        {% if metaobject.job.value %}
          <p>{{ metaobject.job.value }}</p>
        {% endif %}
      </div>
    {% endfor %}
</div>

关键修复说明

  • 过滤逻辑选择:根据实际需求启用对应方案——如果目标是Johnson Controls文件夹下的Metaobjects,用方案1;如果是自定义company字段值匹配,用方案2。
  • 字段访问统一:所有自定义字段均通过.value获取内容,确保加载实际数据而非字段对象。
  • 调试优化:仅遍历输出自定义字段,配合文件夹信息展示,便于快速验证数据是否正确加载。
  • 安全加固:对输出到HTML属性的内容添加escape过滤器,避免XSS风险。

内容的提问来源于stack exchange,提问作者Prince Q. Togonon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:55:19