You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在Shopify Block Schema中创建含变量的动态链接?

问题解答

核心结论

不能在Block的schema中直接解析{{ shop.domain }}{{ block.id }}这类Liquid动态变量。因为schema是用于定义区块配置结构的JSON格式代码,仅作用于Shopify后台的配置界面,不会执行Liquid渲染逻辑,写入的变量会被当作纯文本输出。

推荐替代方案

1. 前端Liquid模板中渲染动态链接(最适合公开页面场景)

在schema中仅定义按钮的静态配置项(如显示文本),实际的动态URL在区块的Liquid模板文件中拼接生成,这是你需要的前端公开页面场景的最优解。

示例代码:

  • schema部分(仅定义按钮文本):
{
  "type": "block",
  "name": "应用设置按钮",
  "settings": [
    {
      "type": "text",
      "id": "button_label",
      "label": "按钮显示文本",
      "default": "打开应用设置"
    }
  ]
}
  • 区块Liquid模板部分(生成动态链接):
{% if block.settings.button_label %}
  <a href="https://你的应用域名.com/config?shop={{ shop.domain | url_encode }}&block_id={{ block.id }}" class="app-settings-btn">
    {{ block.settings.button_label }}
  </a>
{% endif %}

2. 后台配置界面用App Bridge生成动态链接(针对后台场景)

如果是想在Shopify后台的区块配置面板中添加跳转链接,其他应用常用的方式是借助Shopify App Bridge获取当前上下文的店铺域名和区块ID,动态生成链接。

示例代码(React环境):

import { Redirect } from '@shopify/app-bridge/actions';
import { useAppBridge } from '@shopify/app-bridge-react';

function AppSettingsButton({ blockId, shopDomain }) {
  const app = useAppBridge();
  
  const handleRedirect = () => {
    Redirect.create(app).dispatch(
      Redirect.Action.APP,
      `/settings?shop=${shopDomain}&block_id=${blockId}`
    );
  };

  return <button onClick={handleRedirect}>打开应用设置</button>;
}

3. 预生成链接并存入元字段(复杂场景)

若有特殊需求需在schema中关联动态链接,可通过应用后端逻辑实现:

  • 监听区块的创建/更新事件(通过Shopify Webhooks)
  • 生成包含shop.domainblock.id的动态URL,存入区块的元字段(metafield)
  • 在schema的链接字段中读取该元字段的值

此方案复杂度较高,仅适合特定业务场景。

其他应用实现方式说明

  • 前端公开页面的动态链接:基本都是采用第一种方案,直接在Liquid模板中拼接变量生成URL
  • 后台配置界面的动态链接:依赖Shopify App Bridge获取当前店铺、区块的上下文参数,动态构造跳转地址

内容的提问来源于stack exchange,提问作者Developer

火山引擎 最新活动