看这!快速理解Liquid!基础篇

1.Liquid简介

在这里插入图片描述

  • Liquid是一种模板语言,最初由Shopify开发用于电子商务平台。Liquid主要用于动态内容创建,允许用户在网站模板中嵌入变量、条件语句、循环和过滤器等功能,以便根据特定条件或数据生成动态页面内容。
  • Liquid代码可分为对象、标记、过滤器

对象告诉Liquid在页面的哪个位置展示内容。
标记创造了模板的逻辑和控制流。
过滤器改变 Liquid 对象的输出。他们被用在输出上,通过一个 | 符号分隔。

2.Liquid的基本语法元素

  1. 变量:用**{{variable}}**表示,用于显示动态数据
  2. 标记:用**{%tag%}**包裹,用于控制逻辑,如条件判断、循环等
  3. 注释:用**{# comment #}**表示,用于添加注释
  4. 过滤器:用**|**符号表示,可以对变量进行修改或处理
  5. 对象:代表数据对象,如产品、订单等
  6. 操作符:支持常见的操作符、比较符等操作符

Liquid示例

{# 创建一个变量,表示产品列表 #}
{% assign products = "Apple, Orange, Banana" | split: ", " %}

{# 如果产品列表不为空,则显示产品列表标题 #}
{% if products.size > 0 %}
  <h2>Product List</h2>
  <ul>
    {# 遍历产品列表,显示每个产品的名称 #}
    {% for product in products %}
      <li>{{ product }}</li>
    {% endfor %}
  </ul>
{% else %}
  {# 如果产品列表为空,则显示没有产品的消息 #}
  <p>No products available.</p>
{% endif %}

下面通过对象标记过滤器的顺序说明每一个需要注意的特点

3. 对象

3.1 控制输出的空白符

  • 在 Liquid 模版中,你可以将连字符放在标记(tag)中,例如 {{-、-}}、{%- 和 -%},用于将标记(tag)渲染之后的输出内容的左侧或右侧的空拍符剔除。

通常,即使不输出文本,模版中的任何 Liquid 表达式仍然会在渲染之后输出的 HTML 中包含一个空行
示例:

{% assign my_variable = "tomato" %}
{{ my_variable }}

输出结果:
在这里插入图片描述

通过为 assign 标记(tag)添加连字符,可以将渲染之后所输出的空拍符删除
示例:

{%- assign my_variable = "tomato" -%}
{{ my_variable }}

输出结果:
在这里插入图片描述

4. 标记

4.1 控制流

  • case/when
    创建一个开关表达式,用于将一个变量和多个不同值进行比较。case 用于初始化一个开关表达式,when 用于比较他们的值。
    示例:
{% assign handle = 'cake' %}
{% case handle %}
  {% when 'cake' %}
     This is a cake
  {% when 'cookie' %}
     This is a cookie
  {% else %}
     This is not a cake nor a cookie
{% endcase %}

输出结果:
在这里插入图片描述

4.2 迭代/循环

  1. limit 限定循环执行的次数
    示例
<!-- if array = [1,2,3,4,5,6] -->
{% for item in array limit:2 %}
  {{ item }}
{% endfor %}

在这里插入图片描述

  1. offset 从指定索引号开始执行循环
    示例
<!-- if array = [1,2,3,4,5,6] -->
{% for item in array offset:2 %}
  {{ item }}
{% endfor %}

输出
3. range 定义循环执行的范围,可利用数字或变量来定义此执行范围
示例

{% for i in (3..5) %}
  {{ i }}
{% endfor %}

{% assign num = 4 %}
{% for i in (1..num) %}
  {{ i }}
{% endfor %}

在这里插入图片描述
4. reversed 反转循环的执行顺序

<!-- if array = [1,2,3,4,5,6] -->
{% for item in array reversed %}
  {{ item }}
{% endfor %}

在这里插入图片描述
5. cycle:循环一组字符串并按照它们传入的顺序将其输出。每次调用 cycle 时,传入的参数中的下一个字符串将被输出。
示例

{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}
{% cycle 'one', 'two', 'three' %}

在这里插入图片描述
6. cycle(parameters)
cycle 能够接受一个叫做 cycle group 的参数,以便满足你在模版中需要使用多个 cycle 代码块的情况。如果没有为 cycle group 命名,那么将会假定带有相同参数的 cycle 调用属于同一个组(group)。
示例

{%- comment -%}
  # cycle 示例:使用cycle在模板中轮流显示不同颜色的文本
  # 定义两个不同的cycle group:colors 和 styles
  # 在每个group中交替应用不同的参数
{%- endcomment -%}

{%- assign colors = 'red', 'blue', 'green' -%}
{%- assign styles = 'bold', 'italic', 'underline' -%}

{%- comment -%}
  # 使用cycle分别在colors和styles group中交替应用参数
{%- endcomment -%}

{% for i in (1..6) %}
  <p style="color: {{ cycle(colors) }}; font-weight: {{ cycle(styles) }}">{{ i }}</p>
{% endfor %}
  1. tablerow
    生成一个HTML表格,必须要< table >和< /table>这两个标签将其包裹起来
    示例
<table>
{% tablerow product in collection.products %}
  {{ product.title }}
{% endtablerow %}
</table>

输出
在这里插入图片描述

8.tablerow (parameters)

  • 语法结构
{% tablerow variable in collection cols:x%}
行内内容
{% endtablerow %}
  • 参数说明

variable: 每次迭代时的变量名,表示当前元素
collection:用于迭代的集合或数组
cols:x:表示每行包含x列数据

  • 示例
{% assign products = "Cool Shirt, Alien Poster, Batman Poster, Bullseye Shirt, Another Classic Vinyl, Awesome Jeans" | split: ", " %}

<table>
  {% tablerow product in products cols:2 %}
    <tr class="row{{ tablerowloop.index }}">
      <td class="col1">{{ product }}</td>
      <td class="col2">{{ products[tablerowloop.index] }}</td>
    </tr>
  {% endtablerow %}
</table>

4.3 原始内容

raw标记临时禁止处理其所包围的代码。
示例

{% raw %}
  In Handlebars, {{ this }} will be HTML-escaped, but
  {{{ that }}} will not.
{% endraw %}

4.4 变量操作

assign:创建一个新变量
capture:将 capture 开始与结束标记之间的字符串捕获之后赋值给一个变量。通过 {% capture %} 创建的变量都是字符串。

  • capture示例:
{% capture my_variable %}I am being captured.{% endcapture %}
{{ my_variable }}
  • 综合应用
{% assign favorite_food = 'pizza' %}
{% assign age = 35 %}

{% capture about_me %}
I am {{ age }} and my favorite food is {{ favorite_food }}.
{% endcapture %}

{{ about_me }}

increment:创建一个全新的数值变量。并且在后续每次调用时将此变量的值加1。初始值是 0。
decrement
创建一个全新的数值变量,并且在后续每次调用时将此变量的值减 1。初始值是 -1。

  • 示例
{% increment my_counter %}
{% increment my_counter %}
{% increment my_counter %}

在这里插入图片描述
通过 in/decrement 标记(tag)创建的变量与通过 assign 或 capture 创建的变量是相互独立的。

5.过滤器

  1. abs 返回一个数字的绝对值
    示例
{{-17|abs}}

输出
在这里插入图片描述
2. capitalize:将字符串首字母转为大写
示例

{{ "title" | capitalize }}

在这里插入图片描述

  1. ceil:将一个浮点数向上取整并返回一个最接近的整数。在ceil过滤器执行之前Liquid会尝试将输入转换为数字格式
    示例
{{ "3.5" | ceil }}

在这里插入图片描述
4. compact:删除数组中的所有nil

nil值介绍

例如,假定整个网站所有内容页面作为一个数组保存在 site.pages 变量中,其中某些页面被设置了 category 属性用于指定该页面的内容分类。如果我们利用 map 过滤器将所有页面的 category 属性保存到一个数组中,就会出现如果某个页面没有 category 属性,其在数组中的值就会是 nil。

{% assign site_categories = site.pages | map: 'category' %}
{% for category in site_categories %}
    {{ category }}
{% endfor %}

在这里插入图片描述

更多详细的方法大家可以参考Liquid中文文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值