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

Shopify Liquid 按天切换横幅自定义区块代码优化问询

Shopify自定义横幅区块代码优化方案

核心优化点(无需修改现有后台配置,直接替换冗余逻辑即可)

你原来的7分支case语句可以通过星期映射数组直接动态取值,仅需3行代码即可完成相同逻辑,大幅降低冗余:

{%- when 'simple' -%}
            {%- liquid
              assign block_img = ''
              assign block_text = ''
              if block.settings.link contains '/products/'
                assign product_handle = block.settings.link | remove: '/products/'
                assign block_img = all_products[product_handle].featured_media.preview_image
                assign block_text = all_products[product_handle].title
              elsif block.settings.link contains '/collections/'
                assign lang_code_string = request.locale.iso_code | prepend: '/'
                assign collection_handle = block.settings.link | remove: '/collections/' | remove: lang_code_string
                assign block_text = collections[collection_handle].title
                if collections[collection_handle].image
                  assign block_img = collections[collection_handle].image
                else
                  assign block_img = collections[collection_handle].products[0].featured_image
                endif
              endif
              if block.settings.text != ''
                assign block_text = block.settings.text
              endif
              # 优化后的星期判断逻辑开始
              assign checkday = false
              assign todaynumber = 'now' | date: '%u' | plus: 0
              # 数组索引0留空,1-7依次对应周一到周日的配置ID,和%u返回值完全匹配
              assign week_day_map = ",Lunes,Martes,Miercoles,Jueves,Viernes,Sabado,Domingo" | split: ","
              assign checkday = block.settings[week_day_map[todaynumber]]
              # 优化后的星期判断逻辑结束
              if block.settings.image
                if checkday
                    assign block_img = block.settings.imagepar
                else
                    assign block_img = block.settings.image
                endif
              endif
            -%}

后续扩展促销有效期的实现方案

如果要新增过期时间控制,仅需两步即可完成:

  1. 在schema配置中新增日期选择项:
{
  "type": "date",
  "id": "promo_expire_date",
  "label": "促销过期时间",
  "info": "过期后将自动切回主图"
}
  1. 在Liquid的图片判断逻辑中新增时间校验:
if block.settings.image
  assign now_ts = 'now' | date: '%s' | plus: 0
  assign expire_ts = block.settings.promo_expire_date | date: '%s' | plus: 0
  # 仅当当天符合星期规则且未过期时展示促销图
  if checkday and now_ts < expire_ts
      assign block_img = block.settings.imagepar
  else
      assign block_img = block.settings.image
  endif
endif

优化优势

  • 完全兼容你已有的后台配置,不需要重新设置已添加的区块内容
  • 后续调整星期配置仅需修改week_day_map数组即可,无需调整多分支判断逻辑
  • 代码量减少60%以上,可读性和可维护性大幅提升

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:15:03