高级 Liquid 技巧
本指南将介绍高级 Liquid 开发技巧,帮助您创建更加高效、可维护和强大的主题代码。
高级过滤器技巧
链式过滤器优化
<!-- 复杂的数据处理链 -->
{% assign featured_products = collection.products
| where: 'available', true
| where: 'tags', 'featured'
| sort: 'created_at'
| reverse
| limit: 8 %}
<!-- 价格范围过滤 -->
{% assign affordable_products = collection.products
| where: 'available', true
| map: 'price'
| where: '>', 0
| where: '<', 50000 %}
<!-- 复杂排序和分组 -->
{% assign grouped_products = collection.products
| group_by: 'vendor'
| sort: 'name' %}
{% for vendor_group in grouped_products %}
<h3>{{ vendor_group.name }}</h3>
{% assign vendor_products = vendor_group.items | sort: 'price' %}
{% for product in vendor_products limit: 4 %}
{% render 'product-card', product: product %}
{% endfor %}
{% endfor %}
自定义过滤器模拟
<!-- 模拟 map_where 功能 -->
{% assign sale_prices = "" %}
{% for product in collection.products %}
{% if product.compare_at_price > product.price %}
{% if sale_prices == "" %}
{% assign sale_prices = product.price %}
{% else %}
{% assign sale_prices = sale_prices | append: "," | append: product.price %}
{% endif %}
{% endif %}
{% endfor %}
{% assign sale_prices_array = sale_prices | split: "," %}
<!-- 模拟 find 功能 -->
{% assign featured_product = null %}
{% for product in collection.products %}
{% if product.tags contains 'featured' %}
{% assign featured_product = product %}
{% break %}
{% endif %}
{% endfor %}
<!-- 模拟 count_by 功能 -->
{% assign vendor_counts = "" %}
{% assign unique_vendors = collection.products | map: 'vendor' | uniq %}
{% for vendor in unique_vendors %}
{% assign count = 0 %}
{% for product in collection.products %}
{% if product.vendor == vendor %}
{% assign count = count | plus: 1 %}
{% endif %}
{% endfor %}
{% assign vendor_info = vendor | append: ":" | append: count %}
{% if vendor_counts == "" %}
{% assign vendor_counts = vendor_info %}
{% else %}
{% assign vendor_counts = vendor_counts | append: "|" | append: vendor_info %}
{% endif %}
{% endfor %}
动态代码生成
动态变量名
<!-- 根据条件生成不同的变量名 -->
{% for i in (1..5) %}
{% assign var_name = 'product_' | append: i %}
{% assign temp_value = collection.products[forloop.index0] %}
<!-- 模拟动态变量赋值 -->
{% case i %}
{% when 1 %}{% assign product_1 = temp_value %}
{% when 2 %}{% assign product_2 = temp_value %}
{% when 3 %}{% assign product_3 = temp_value %}
{% when 4 %}{% assign product_4 = temp_value %}
{% when 5 %}{% assign product_5 = temp_value %}
{% endcase %}
{% endfor %}
<!-- 动态模板渲染 -->
{% assign device_type = 'mobile' %}
{% if request.user_agent contains 'Desktop' %}
{% assign device_type = 'desktop' %}
{% elsif request.user_agent contains 'Tablet' %}
{% assign device_type = 'tablet' %}
{% endif %}
{% assign template_name = 'product-card-' | append: device_type %}
{% render template_name, product: product %}
动态样式生成
<!-- 动态 CSS 类生成 -->
{% capture product_classes %}
product-card
{% if product.available %}available{% else %}unavailable{% endif %}
{% if product.compare_at_price > product.price %}on-sale{% endif %}
{% if product.tags contains 'featured' %}featured{% endif %}
{% if product.vendor %}vendor-{{ product.vendor | handleize }}{% endif %}
{% if product.type %}type-{{ product.type | handleize }}{% endif %}
{% assign price_range = '' %}
{% if product.price < 5000 %}
{% assign price_range = 'budget' %}
{% elsif product.price < 20000 %}
{% assign price_range = 'mid-range' %}
{% else %}
{% assign price_range = 'premium' %}
{% endif %}
price-{{ price_range }}
{% endcapture %}
<div class="{{ product_classes | strip | replace: ' ', ' ' }}">
<!-- 产品内容 -->
</div>
<!-- 动态样式属性 -->
{% assign gradient_colors = product.tags | where: 'contains', 'color-' %}
{% if gradient_colors.size > 0 %}
{% assign primary_color = gradient_colors[0] | remove: 'color-' %}
{% assign secondary_color = gradient_colors[1] | remove: 'color-' | default: primary_color %}
<div class="product-card"
style="background: linear-gradient(45deg, {{ primary_color }}, {{ secondary_color }});">
<!-- 产品内容 -->
</div>
{% endif %}
复杂业务逻辑实现
智能推荐系统
<!-- 基于多因素的产品推荐 -->
{% assign recommendation_pool = collections.all.products %}
{% assign recommendations = "" %}
{% assign max_recommendations = 4 %}
{% for candidate in recommendation_pool %}
{% if candidate.id == product.id %}{% continue %}{% endif %}
{% assign score = 0 %}
<!-- 相同类型加分 -->
{% if candidate.type == product.type %}
{% assign score = score | plus: 5 %}
{% endif %}
<!-- 相同供应商加分 -->
{% if candidate.vendor == product.vendor %}
{% assign score = score | plus: 3 %}
{% endif %}
<!-- 价格相近加分 -->
{% assign price_diff = candidate.price | minus: product.price | abs %}
{% assign price_ratio = price_diff | divided_by: product.price %}
{% if price_ratio < 0.3 %}
{% assign score = score | plus: 4 %}
{% elsif price_ratio < 0.5 %}
{% assign score = score | plus: 2 %}
{% endif %}
<!-- 标签匹配加分 -->
{% for tag in product.tags %}
{% if candidate.tags contains tag %}
{% assign score = score | plus: 1 %}
{% endif %}
{% endfor %}
<!-- 可用性检查 -->
{% unless candidate.available %}
{% assign score = score | minus: 10 %}
{% endunless %}
<!-- 收集高分推荐 -->
{% if score >= 6 %}
{% assign recommendation = candidate.id | append: ":" | append: score %}
{% if recommendations == "" %}
{% assign recommendations = recommendation %}
{% else %}
{% assign recommendations = recommendations | append: "|" | append: recommendation %}
{% endif %}
{% endif %}
{% endfor %}
<!-- 排序并显示推荐 -->
{% assign recommendation_list = recommendations | split: "|" | sort %}
{% assign shown_count = 0 %}
{% for rec in recommendation_list reversed %}
{% if shown_count >= max_recommendations %}{% break %}{% endif %}
{% assign rec_parts = rec | split: ":" %}
{% assign rec_id = rec_parts[0] %}
{% assign rec_score = rec_parts[1] %}
{% for candidate in recommendation_pool %}
{% if candidate.id == rec_id %}
<div class="recommendation" data-score="{{ rec_score }}">
{% render 'product-card', product: candidate, context: 'recommendation' %}
</div>
{% assign shown_count = shown_count | plus: 1 %}
{% break %}
{% endif %}
{% endfor %}
{% endfor %}
动态定价引擎
<!-- 复杂的动态定价逻辑 -->
{% assign base_price = product.price %}
{% assign final_price = base_price %}
{% assign discount_reasons = "" %}
<!-- 客户类型折扣 -->
{% if customer %}
{% if customer.tags contains 'vip' %}
{% assign vip_discount = base_price | times: 0.15 %}
{% assign final_price = final_price | minus: vip_discount %}
{% assign discount_reasons = discount_reasons | append: "VIP会员折扣15%|" %}
{% elsif customer.tags contains 'member' %}
{% assign member_discount = base_price | times: 0.1 %}
{% assign final_price = final_price | minus: member_discount %}
{% assign discount_reasons = discount_reasons | append: "会员折扣10%|" %}
{% endif %}
<!-- 生日折扣 -->
{% assign today = 'now' | date: '%m-%d' %}
{% assign birthday = customer.birthday | date: '%m-%d' %}
{% if today == birthday %}
{% assign birthday_discount = base_price | times: 0.2 %}
{% assign final_price = final_price | minus: birthday_discount %}
{% assign discount_reasons = discount_reasons | append: "生日特惠20%|" %}
{% endif %}
{% endif %}
<!-- 批量购买折扣 -->
{% assign cart_quantity = 0 %}
{% for item in cart.items %}
{% if item.product.id == product.id %}
{% assign cart_quantity = cart_quantity | plus: item.quantity %}
{% endif %}
{% endfor %}
{% if cart_quantity >= 5 %}
{% assign bulk_discount = base_price | times: 0.1 %}
{% assign final_price = final_price | minus: bulk_discount %}
{% assign discount_reasons = discount_reasons | append: "批量购买折扣10%|" %}
{% endif %}
<!-- 时间段折扣 -->
{% assign current_hour = 'now' | date: '%H' | plus: 0 %}
{% if current_hour >= 22 or current_hour <= 6 %}
{% assign night_discount = base_price | times: 0.05 %}
{% assign final_price = final_price | minus: night_discount %}
{% assign discount_reasons = discount_reasons | append: "夜间特惠5%|" %}
{% endif %}
<!-- 库存清理折扣 -->
{% assign inventory = product.selected_or_first_available_variant.inventory_quantity %}
{% if inventory <= 3 and inventory > 0 %}
{% assign clearance_discount = base_price | times: 0.15 %}
{% assign final_price = final_price | minus: clearance_discount %}
{% assign discount_reasons = discount_reasons | append: "清仓特价15%|" %}
{% endif %}
<!-- 显示价格和折扣信息 -->
<div class="dynamic-pricing">
{% if final_price < base_price %}
<span class="original-price">{{ base_price | money }}</span>
<span class="final-price">{{ final_price | money }}</span>
{% assign total_savings = base_price | minus: final_price %}
<span class="savings">节省 {{ total_savings | money }}</span>
{% assign discount_list = discount_reasons | split: "|" %}
<div class="discount-details">
{% for reason in discount_list %}
{% if reason != "" %}
<span class="discount-tag">{{ reason }}</span>
{% endif %}
{% endfor %}
</div>
{% else %}
<span class="price">{{ final_price | money }}</span>
{% endif %}
</div>
高级数据处理
复杂数据聚合
<!-- 销售数据分析 -->
{% assign sales_data = "" %}
{% assign total_revenue = 0 %}
{% assign product_performance = "" %}
{% for product in collection.products %}
<!-- 模拟销售数据收集 -->
{% assign product_revenue = 0 %}
{% assign estimated_sales = product.id | modulo: 100 | plus: 10 %}
{% assign product_revenue = estimated_sales | times: product.price %}
{% assign total_revenue = total_revenue | plus: product_revenue %}
{% assign performance_entry = product.id | append: ":" | append: product_revenue | append: ":" | append: estimated_sales %}
{% if product_performance == "" %}
{% assign product_performance = performance_entry %}
{% else %}
{% assign product_performance = product_performance | append: "|" | append: performance_entry %}
{% endif %}
{% endfor %}
<!-- 排序和分析 -->
{% assign performance_list = product_performance | split: "|" %}
{% assign top_performers = "" %}
{% assign performance_threshold = total_revenue | divided_by: collection.products.size %}
{% for entry in performance_list %}
{% assign parts = entry | split: ":" %}
{% assign product_id = parts[0] %}
{% assign revenue = parts[1] | plus: 0 %}
{% assign sales = parts[2] | plus: 0 %}
{% if revenue > performance_threshold %}
{% if top_performers == "" %}
{% assign top_performers = entry %}
{% else %}
{% assign top_performers = top_performers | append: "|" | append: entry %}
{% endif %}
{% endif %}
{% endfor %}
<!-- 生成报告 -->
<div class="sales-analytics">
<h3>销售分析报告</h3>
<p>总收入: {{ total_revenue | money }}</p>
<p>平均收入: {{ performance_threshold | money }}</p>
<p>顶级表现者: {{ top_performers | split: "|" | size }} 个产品</p>
<!-- 显示前5名产品 -->
<div class="top-products">
{% assign top_list = top_performers | split: "|" %}
{% for entry in top_list limit: 5 %}
{% assign parts = entry | split: ":" %}
{% assign product_id = parts[0] %}
{% assign revenue = parts[1] %}
{% assign sales = parts[2] %}
{% for product in collection.products %}
{% if product.id == product_id %}
<div class="performance-item">
<h4>{{ product.title }}</h4>
<p>预估销量: {{ sales }}</p>
<p>预估收入: {{ revenue | money }}</p>
</div>
{% break %}
{% endif %}
{% endfor %}
{% endfor %}
</div>
</div>
智能缓存系统
<!-- 基于时间的缓存 -->
{% assign cache_key = 'featured_products_' | append: collection.id %}
{% assign cache_duration = 3600 %} <!-- 1小时 -->
{% assign current_timestamp = 'now' | date: '%s' | plus: 0 %}
<!-- 检查缓存是否有效 -->
{% assign cache_timestamp_key = cache_key | append: '_timestamp' %}
{% assign cached_timestamp = shop.metafields.cache[cache_timestamp_key] | plus: 0 %}
{% assign cache_valid = false %}
{% if cached_timestamp > 0 %}
{% assign time_diff = current_timestamp | minus: cached_timestamp %}
{% if time_diff < cache_duration %}
{% assign cache_valid = true %}
{% endif %}
{% endif %}
<!-- 使用缓存或重新计算 -->
{% if cache_valid %}
<!-- 从缓存读取 -->
{% assign featured_products_json = shop.metafields.cache[cache_key] %}
{% assign featured_product_ids = featured_products_json | split: ',' %}
{% else %}
<!-- 重新计算并缓存 -->
{% assign featured_products = collection.products | where: 'tags', 'featured' | limit: 8 %}
{% assign featured_product_ids = featured_products | map: 'id' %}
{% assign featured_products_json = featured_product_ids | join: ',' %}
<!-- 存储到缓存 (这里是概念性的,实际需要后端支持) -->
{% comment %}
{% assign cache_update = shop.metafields.cache[cache_key] = featured_products_json %}
{% assign timestamp_update = shop.metafields.cache[cache_timestamp_key] = current_timestamp %}
{% endcomment %}
{% endif %}
<!-- 使用缓存的数据 -->
<div class="cached-featured-products">
{% for product_id in featured_product_ids %}
{% for product in collection.products %}
{% if product.id == product_id %}
{% render 'product-card', product: product %}
{% break %}
{% endif %}
{% endfor %}
{% endfor %}
</div>
高级模板组织
动态组件系统
<!-- 组件配置系统 -->
{% assign component_config = '{
"hero": {
"template": "hero-banner",
"props": {
"image": "hero.jpg",
"title": "欢迎来到我们的商店",
"subtitle": "发现独特的产品",
"cta_text": "立即购买",
"cta_url": "/collections/all"
}
},
"featured_products": {
"template": "product-grid",
"props": {
"collection": "featured",
"limit": 8,
"columns": 4,
"show_vendor": true
}
}
}' %}
<!-- 解析和渲染组件 -->
{% assign components = component_config | remove: ' ' | remove: '\n' %}
{% comment %}这里需要更复杂的JSON解析逻辑{% endcomment %}
<!-- 条件组件渲染 -->
{% assign page_components = settings.homepage_sections | split: ',' %}
{% for component_name in page_components %}
{% case component_name %}
{% when 'hero' %}
{% render 'section-hero',
image: settings.hero_image,
title: settings.hero_title,
subtitle: settings.hero_subtitle %}
{% when 'featured_products' %}
{% render 'section-products',
collection: collections.featured,
limit: settings.featured_limit,
style: settings.product_card_style %}
{% when 'newsletter' %}
{% render 'section-newsletter',
title: settings.newsletter_title,
description: settings.newsletter_description %}
{% when 'testimonials' %}
{% render 'section-testimonials',
testimonials: blog.testimonials.articles %}
{% endcase %}
{% endfor %}
智能主题配置
<!-- 响应式断点配置 -->
{% assign mobile_breakpoint = 768 %}
{% assign tablet_breakpoint = 1024 %}
{% assign desktop_breakpoint = 1200 %}
<!-- 设备检测和配置 -->
{% assign is_mobile = false %}
{% assign is_tablet = false %}
{% assign is_desktop = false %}
{% if request.user_agent contains 'Mobile' %}
{% assign is_mobile = true %}
{% assign grid_columns = 2 %}
{% assign image_size = '400x400' %}
{% elsif request.user_agent contains 'Tablet' %}
{% assign is_tablet = true %}
{% assign grid_columns = 3 %}
{% assign image_size = '500x500' %}
{% else %}
{% assign is_desktop = true %}
{% assign grid_columns = 4 %}
{% assign image_size = '600x600' %}
{% endif %}
<!-- 主题模式配置 -->
{% assign theme_mode = settings.theme_mode | default: 'auto' %}
{% if theme_mode == 'auto' %}
{% assign current_hour = 'now' | date: '%H' | plus: 0 %}
{% if current_hour >= 18 or current_hour <= 6 %}
{% assign theme_mode = 'dark' %}
{% else %}
{% assign theme_mode = 'light' %}
{% endif %}
{% endif %}
<!-- 应用配置 -->
<div class="theme-container theme-{{ theme_mode }}"
data-device-type="{% if is_mobile %}mobile{% elsif is_tablet %}tablet{% else %}desktop{% endif %}">
<style>
.products-grid {
grid-template-columns: repeat({{ grid_columns }}, 1fr);
}
{% if theme_mode == 'dark' %}
:root {
--bg-color: #1a1a1a;
--text-color: #ffffff;
--border-color: #333333;
}
{% else %}
:root {
--bg-color: #ffffff;
--text-color: #000000;
--border-color: #cccccc;
}
{% endif %}
</style>
<!-- 内容渲染 -->
<div class="products-grid">
{% for product in collection.products limit: grid_columns | times: 3 %}
<div class="product-card">
<img src="{{ product.featured_image | img_url: image_size }}"
alt="{{ product.title }}">
<h3>{{ product.title }}</h3>
<p>{{ product.price | money }}</p>
</div>
{% endfor %}
</div>
</div>
性能优化技巧
延迟加载实现
<!-- 图片延迟加载 -->
{% assign loading_placeholder = 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 300"%3E%3Crect width="300" height="300" fill="%23f0f0f0"/%3E%3C/svg%3E' %}
<div class="product-gallery">
{% for image in product.images %}
<img class="lazy-image"
src="{{ loading_placeholder }}"
data-src="{{ image | img_url: '600x600' }}"
data-srcset="{{ image | img_url: '300x300' }} 300w,
{{ image | img_url: '600x600' }} 600w,
{{ image | img_url: '1200x1200' }} 1200w"
alt="{{ image.alt | default: product.title }}"
loading="lazy">
{% endfor %}
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const lazyImages = document.querySelectorAll('.lazy-image');
if ('IntersectionObserver' in window) {
const observer = new IntersectionObserver(function(entries) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
if (img.dataset.srcset) {
img.srcset = img.dataset.srcset;
}
img.classList.remove('lazy-image');
observer.unobserve(img);
}
});
});
lazyImages.forEach(function(img) {
observer.observe(img);
});
}
});
</script>
条件加载优化
<!-- 智能内容加载 -->
{% assign load_reviews = false %}
{% assign load_recommendations = false %}
{% assign load_social_proof = false %}
<!-- 根据页面位置和用户行为决定加载内容 -->
{% if request.path contains '/products/' %}
{% assign load_reviews = true %}
{% assign load_recommendations = true %}
<!-- 高价值客户加载更多功能 -->
{% if customer and customer.total_spent > 100000 %}
{% assign load_social_proof = true %}
{% endif %}
{% endif %}
<!-- 条件渲染 -->
{% if load_reviews %}
<div id="product-reviews" data-product-id="{{ product.id }}">
<!-- 评论内容将通过AJAX加载 -->
<div class="loading-placeholder">加载评论中...</div>
</div>
{% endif %}
{% if load_recommendations %}
<div id="product-recommendations" data-product-id="{{ product.id }}">
<!-- 推荐内容将通过AJAX加载 -->
<div class="loading-placeholder">加载推荐商品中...</div>
</div>
{% endif %}
{% if load_social_proof %}
<div id="social-proof" data-product-id="{{ product.id }}">
<!-- 社会证明内容将通过AJAX加载 -->
<div class="loading-placeholder">加载购买记录中...</div>
</div>
{% endif %}
调试和开发工具
开发模式调试
<!-- 开发模式检测 -->
{% assign is_development = false %}
{% if request.host contains 'localhost' or request.host contains '.myshopify.com' %}
{% assign is_development = true %}
{% endif %}
{% if is_development or settings.debug_mode %}
<div class="debug-panel" style="position: fixed; top: 0; right: 0; background: rgba(0,0,0,0.9); color: white; padding: 15px; z-index: 9999; max-width: 300px; font-size: 12px;">
<h4>Liquid Debug Panel</h4>
<!-- 模板信息 -->
<div class="debug-section">
<h5>模板信息</h5>
<p>模板: {{ template }}</p>
<p>请求路径: {{ request.path }}</p>
<p>页面类型: {{ request.page_type }}</p>
</div>
<!-- 性能信息 -->
<div class="debug-section">
<h5>对象统计</h5>
{% if collection %}
<p>集合产品数: {{ collection.products.size }}</p>
{% endif %}
{% if product %}
<p>产品变体数: {{ product.variants.size }}</p>
<p>产品图片数: {{ product.images.size }}</p>
{% endif %}
<p>购物车商品数: {{ cart.item_count }}</p>
</div>
<!-- 用户信息 -->
<div class="debug-section">
<h5>用户信息</h5>
{% if customer %}
<p>客户: {{ customer.email }}</p>
<p>订单数: {{ customer.orders_count }}</p>
<p>总消费: {{ customer.total_spent | money }}</p>
{% else %}
<p>未登录用户</p>
{% endif %}
</div>
<!-- 当前对象JSON -->
<div class="debug-section">
<h5>当前对象 (JSON)</h5>
<details>
<summary>点击查看</summary>
<pre style="font-size: 10px; max-height: 200px; overflow: auto;">
{% if product %}{{ product | json }}{% endif %}
{% if collection %}{{ collection | json }}{% endif %}
{% if customer %}{{ customer | json }}{% endif %}
</pre>
</details>
</div>
</div>
{% endif %}
性能监控
<!-- 渲染时间监控 -->
{% assign render_start = 'now' | date: '%s' | plus: 0 %}
<!-- 主要内容渲染 -->
<div class="main-content">
<!-- 您的主要内容 -->
{% for product in collection.products limit: 12 %}
{% render 'product-card', product: product %}
{% endfor %}
</div>
{% assign render_end = 'now' | date: '%s' | plus: 0 %}
{% assign render_time = render_end | minus: render_start %}
{% if settings.show_performance_metrics %}
<div class="performance-metrics" style="font-size: 12px; color: #666; padding: 10px; border-top: 1px solid #eee;">
<p>页面渲染时间: ~{{ render_time }}秒</p>
<p>加载的对象数量: {{ collection.products.size }}</p>
<p>模板: {{ template }}</p>
</div>
{% endif %}
最佳实践总结
1. 代码组织
<!-- 将复杂逻辑分解为可重用的片段 -->
{% comment %} === 数据准备 === {% endcomment %}
{% assign featured_products = collection.products | where: 'tags', 'featured' %}
{% assign sale_products = collection.products | where: 'compare_at_price_max', '>', 0 %}
{% comment %} === 用户上下文 === {% endcomment %}
{% assign is_vip = customer.tags contains 'vip' %}
{% assign is_returning = customer.orders_count > 0 %}
{% comment %} === 业务逻辑 === {% endcomment %}
{% if is_vip and featured_products.size > 0 %}
{% render 'vip-featured-section', products: featured_products %}
{% elsif is_returning and sale_products.size > 0 %}
{% render 'returning-customer-deals', products: sale_products %}
{% else %}
{% render 'general-product-grid', products: collection.products %}
{% endif %}
2. 性能优化
<!-- 避免重复计算 -->
{% assign product_count = collection.products.size %}
{% assign has_products = product_count > 0 %}
{% assign show_pagination = product_count > 12 %}
<!-- 使用早期返回 -->
{% unless has_products %}
{% render 'empty-collection' %}
{% break %}
{% endunless %}
<!-- 缓存昂贵的操作 -->
{% assign sorted_products = collection.products | sort: 'price' %}
{% assign price_range = sorted_products | map: 'price' %}
{% assign min_price = price_range.first %}
{% assign max_price = price_range.last %}
3. 错误处理
<!-- 安全的对象访问 -->
{% if product and product.featured_image %}
<img src="{{ product.featured_image | img_url: '400x400' }}"
alt="{{ product.featured_image.alt | default: product.title | escape }}">
{% else %}
<div class="no-image-placeholder">
<span>暂无图片</span>
</div>
{% endif %}
<!-- 回退机制 -->
{% assign primary_collection = collections[settings.featured_collection] %}
{% assign fallback_collection = collections.all %}
{% assign display_collection = primary_collection | default: fallback_collection %}
下一步学习
掌握高级 Liquid 技巧后,建议继续学习:
高级技巧的掌握需要在实际项目中不断练习和应用,结合业务需求创造出更加优秀的用户体验!
最后更新时间: