Liquid编程进阶中文封面,突出主题开发主题

Liquid编程进阶

摘要

22 Liquid编程进阶

先判断问题出现在哪里

不懂 Liquid,你只能受限于主题的死板框架。掌握 Liquid,你能直接调用 Shopify 数据库里的任何字段,把静态页面变成千人千面的动态营销机器。

Liquid编程进阶的四项 Shopify 检查清单
Liquid编程进阶的四项 Shopify 检查清单

实战步骤

步骤 1:开发带倒计时的自定义促销 Section

不要花每个月 $19 去买倒计时插件,自己写一个 Section,速度快 10 倍且完全免费。

操作路径Shopify后台 -> 在线商店 -> 主题 -> 编辑代码 -> sections -> 添加新 section (命名为 custom-promo-banner.liquid)

{% # 1. 定义 Schema 让商家可以在后台配置 %}
{% schema %}
{
  "name": "促销倒计时横幅",
  "settings": [
    {
      "type": "text",
      "id": "promo_text",
      "label": "促销文案",
      "default": "Flash Sale! 20% OFF ends in:"
    },
    {
      "type": "text",
      "id": "end_date",
      "label": "结束时间 (格式: YYYY-MM-DD HH:MM)",
      "default": "2026-12-31 23:59"
    }
  ],
  "presets": [{"name": "促销倒计时横幅"}]
}
{% endschema %}

{% # 2. 渲染 HTML 结构 %}
<div class="custom-promo-banner" style="background: #ef4444; color: white; text-align: center; padding: 10px;">
  <span>{{ section.settings.promo_text }}</span>
  <strong id="countdown-timer-{{ section.id }}" data-end="{{ section.settings.end_date }}"></strong>
</div>

{% # 3. 注入倒计时 JS 逻辑 %}
<script>
  document.addEventListener("DOMContentLoaded", function() {
    const timerEl = document.getElementById('countdown-timer-{{ section.id }}');
    const endDate = new Date(timerEl.getAttribute('data-end')).getTime();
    
    const x = setInterval(function() {
      const now = new Date().getTime();
      const distance = endDate - now;
      if (distance < 0) {
        clearInterval(x);
        timerEl.innerHTML = "EXPIRED";
        return;
      }
      const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
      const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
      const seconds = Math.floor((distance % (1000 * 60)) / 1000);
      timerEl.innerHTML = hours + "h " + minutes + "m " + seconds + "s ";
    }, 1000);
  });
</script>

步骤 2:利用 Liquid 过滤器 (Filters) 动态处理数据

不要在后台手动算折扣价,让系统自动算。

操作路径在 product.liquid 或 product-card.liquid 中使用

{% # 计算并显示动态折扣百分比 %}
{% if product.compare_at_price > product.price %}
  {% assign discount_amount = product.compare_at_price | minus: product.price %}
  {% assign discount_percent = discount_amount | times: 100.0 | divided_by: product.compare_at_price | round %}
  
  <span class="badge-sale" style="background: red; color: white;">
    Save {{ discount_percent }}% ({{ discount_amount | money }})
  </span>
{% endif %}

步骤 3:使用 paginate 标签优化海量数据加载

如果一个集合有 500 个产品,一次性加载会让页面直接卡死。

操作路径在 collection.liquid 中使用分页

{% # 严格限制每页只加载 24 个产品 %}
{% paginate collection.products by 24 %}
  <div class="product-grid">
    {% for product in collection.products %}
      {% render 'product-card', product: product %}
    {% endfor %}
  </div>
  
  {% # 渲染底部分页按钮 %}
  {% if paginate.pages > 1 %}
    {{ paginate | default_pagination }}
  {% endif %}
{% endpaginate %}

常见误区与处理方法

误区一:在 for 循环中滥用 assign 导致内存溢出

在遍历 1000 个订单或客户数据时,在循环内部疯狂定义新变量(assign),会导致 Shopify 服务器渲染超时(Liquid Error: Memory limits exceeded),页面直接白屏报错。

规避方法:尽量在循环外部定义好变量。如果必须在循环内过滤数据,优先使用 where 过滤器直接在数组层面筛选,而不是用 for + if 逐个判断。例如:{% assign available_products = collection.products | where: "available", true %}

误区二:直接修改主题核心文件,导致无法升级

为了加个小功能,直接在 theme.liquidglobal.js 里乱改一通。半年后主题出了修复安全漏洞的新版本,你一升级,所有自定义代码全部被覆盖清空。

规避方法绝对不要直接修改主题自带的核心文件! 必须使用 自定义 SectionSnippets(代码片段),或者在后台主题编辑器中通过 Custom CSS / Custom Liquid 区块 注入代码。这样即使主题升级,你的自定义模块也能无损迁移。

Liquid编程进阶从判断到验证的三步执行路径
Liquid编程进阶从判断到验证的三步执行路径

FAQ

Liquid编程进阶应该先检查什么?

先确认业务阶段、数据基础和当前最需要解决的一个问题。不要同时改很多位置,先记录当前页面和数据,再处理最明确的问题。

需要马上安装新的 Shopify App 吗?

不一定。先判断主题现有功能、后台字段和少量代码能否解决。只有需要持续同步数据或复杂自动化时,再评估 App 的费用、脚本负担和卸载影响。

修改后怎么验证是否有效?

记录修改日期、页面 URL 和改动内容,再用实际页面、移动端、Google Search Console、Bing Webmaster Tools 或 GA4 检查结果。技术修改还要保留测试记录和回滚版本。

哪些情况不建议马上修改?

数据量太少、追踪没有配置、问题还没有复现,或者正在进行大型主题更新时,不建议一次性重做。先把问题拆开,确认影响范围后再改。

下一步阅读

分享这篇文章

阅读说明

这些文章更适合当作排查笔记,而不是万能模板。

这篇文章适合怎么读?

先看结论和步骤,再对照自己的网站情况判断是否适用。涉及代码或后台设置的部分,建议先在预览主题或测试环境里试。

可以直接照着改吗?

有些步骤可以直接参考,有些要看主题结构、App、页面内容和当前业务阶段。不要在正式主题上直接试,先备份或用预览主题验证。

代码片段需要注意什么?

不同主题的 section、snippet 和 CSS 结构不一样。复制代码前先确认文件位置和命名,改完后检查桌面端、移动端和购物流程。

后续还会补充吗?

会。内容会围绕建站流程、主题代码、页面优化、速度排查和工具实测慢慢补,不追热点,优先写实际遇到的问题。

我的情况和文章不一样怎么办?

可以先把网站链接、页面现象和你已经尝试过的操作记下来,再决定是继续自查,还是发来让我帮你判断问题类型。

继续看 Shopify 实操笔记

如果这篇文章解决了一部分问题,可以回到博客列表继续看相关笔记;如果情况不一样,再带着页面和现象来判断。

返回博客列表 发来问题