Shopify二次开发之三:liquid语法学习(Tags)

news2024/11/15 10:53:07

目录

Tags

变量声明

assign

capture

decrement

increment

条件语句

if 

else

unless

case

HTML

form表单生成

style

Iteration (遍历)

for

else

break

continue

cycle

paginate

Theme (主题)

render渲染一个snippet,可以传值

sections渲染一个sctions-group

section渲染一个sction

stylesheet & javascript:渲染css、js代码


liquid代码主要包括三部分,Tags、Filters、Objects

Tags

tags定义模板相关逻辑, 在liquid中,只有两种标记的方式,一种是{{  }}另一种是{% %}。

变量声明

liquid数据类型:String、Number、Boolean、Nil、Array、Object

assign
{% assign variable_name = value %}

{% assign variable_name = value1 %}

如果对一个变量继续赋值需要重新assign

capture
{%- assign up_title = product.title("Health potion") | upcase -%}
{%- assign down_title = product.title | downcase -%}
{%- assign show_up_title = true -%}

{%- capture title -%}
  {% if show_up_title -%}
    Upcase title: {{ up_title }}
  {%- else -%}
    Downcase title: {{ down_title }}
  {%- endif %}
{%- endcapture %}

{{ title }}

输出:Upcase title: HEALTH POTION

capture能够配合liquid逻辑将开始与结束标记之间的字符串捕获之后赋值给一个变量title

decrement
  {% decrement variable %}
  {% decrement variable1 %}
  {% decrement variable %}
  {% decrement variable1 %}
  {% decrement variable1 %}

输出: -1 -1 -2 -2 -3

decrement标记会生成一个变量,初始值为-1,每次执行同样的decrement代码就会减1

increment
{% increment variable %}
{% increment variable %}
{% increment variable %}

输出: 0 1 2

increment 标记会生成一个变量,初始值为0,每次执行同样的increment 代码就会加1

条件语句

操作符

==!=><>=<=orandcontainsblank
相等不相等大于小于大于等于小于等于逻辑或逻辑与包括

condition

( a > b , 'a大于b' )

( a or b, 'a为真或b为真' )

( a and b, 'a与b都为真' )

( a contains 'str', 'a包含str字串')

( a == blank, 'a是否为空')

如果要判断一个值是否为空值可以用blank,比如对空字符串 ''、 空对象{}、空数组[]、特殊空值Nil。

在liquid判断中,只有两种情况为假值,nil和false,其他的都是真值。

expression

可以在模板中渲染任何你想渲染的东西,比如渲染一个标签也比如渲染一个样式,总之就是根据条件渲染指定的东西。

if 

{% if condition %}
  expression
{% endif %}
else

{% if condition %}
  expression1
{% else %}
  expression2
{% endif %}
unless
{% unless condition %}
  expression
{% endunless %}
case
{% case variable %}
  {% when first_value %}
    first_expression
  {% when second_value %}
    second_expression
  {% else %}
    third_expression
{% endcase %}
HTML
form表单生成
  • activate_customer_password
  • cart
  • contact
  • create_customer
  • currency
  • customer
  • customer_address
  • customer_login
  • guest_login
  • localization
  • new_comment
  • product
  • recover_customer_password
  • reset_customer_password
  • storefront_password

比如form product

{% form 'product', product %}
  <select name="id">
    {% for variant in product.variants %}
      <option value="{{ variant.id }}">
        {{ variant.title }}
      </option>
    {% endfor %}
  </select>
  <button type="submit">Add to cart</button>
{% endform %}

又比如form contact

{% form 'contact' %}
  {{ form.errors | default_errors }}

  <div class="email">
    <label for="email">Email</label>
    <input type="email" name="contact[email]">
  </div>

  <div class="email">
    <label for="email">Name</label>
    <input type="text" name="contact[name]">
  </div>

  <div class="message">
    <label for="message">Message</label>
    <textarea name="contact[body]"></textarea>
  </div>

  <div class="submit">
    <input type="submit" value="Create">
  </div>
{% endform %}

发送邮件之后,商家的邮箱就会收到如下内容

style

{% style %}
  .h1 {
    color: {{ settings.colors_accent_1 }};
  }
{% endstyle %}
Iteration (遍历)
for
{% for product in collection.products -%}
  {{ product.title }}
{%- endfor %}

输出:

Draught of Immortality
Glacier ice
Health potion
Invisibility potion

else
{% for variable in array %}
  first_expression
{% else %}
  second_expression
{% endfor %}

当array长度为0的时候渲染 second_expression

break
{% for i in (1..5) -%}
  {%- if i == 4 -%}
    {% break %}
  {%- else -%}
    {{ i }}
  {%- endif -%}
{%- endfor %}

输出:1 2 3

1..5表示依次从1渲染到5,当条件i == 4的时候,break,结束循环。 

continue
{% for i in (1..5) %}
  {% if i == 4 %}
    {% continue %}
  {% else %}
    {{ i }}
  {% endif %}
{% endfor %}

输出:1 2 3 5

1..5表示依次从1渲染到5,当条件i == 4的时候,continue ,跳到下次循环。 

cycle
{% cycle 'one', 'two', 'three' %}
{% cycle '11', '22', '33' %}
{% cycle 'one', 'two', 'three' %}
{% cycle '11', '22', '33' %}

输出:

one 11 two 22

paginate
{% paginate collection.products by 4 %}
  {% for product in collection.products %}
    {% render 'product-item', product: product %}
  {% endfor %}
  {{ paginate | default_pagination }}
{% endpaginate %}

by 4 表示一组4个,  {{ paginate | default_pagination }} 模板渲染默认分页导航

Theme (主题)
render渲染一个snippet,可以传值

{% render 'product-item', product: product %}
sections渲染一个sctions-group

{% sections 'xxx-group' %}
section渲染一个sction

{% section 'xxx-section' %}
stylesheet & javascript:渲染css、js代码
{% stylesheet %}
  css_styles
{% endstylesheet %}


{% javascript %}
  javascript_code
{% endjavascript %}

注意: Liquid 不会在stylesheet & javascript里渲染,只能渲染寻常css和JavaScript代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1284987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用友NC word.docx接口存在任意文件读取漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、产品介绍 用友 NC Cloud&#xff0c;大型企业数字化平台&#xff…

MySQL笔记-第04章_运算符

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第04章_运算符1. 算术运算符2. 比较运算符3. 逻辑运算符4. 位运算符5. 运算符的优先级拓展&#xff1a;使用正则表达式查询 第04章_运算符 …

轻量封装WebGPU渲染系统示例<43>- PBR材质与阴影实(源码)

原理简介: 1. 基于rendering pass graph实现。 2. WGSL Shader 基于文件系统和宏机制动态组装。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/PBRShadowTest.ts 当前示例运行效果: 此示例基于此渲染系统实现&a…

【Windows】使用SeaFile搭建本地私有云盘并结合内网穿透实现远程访问

1. 前言 现在我们身边的只能设备越来越多&#xff0c;各种智能手机、平板、智能手表和数码相机充斥身边&#xff0c;需要存储的数据也越来越大&#xff0c;一张手机拍摄的照片都可能有十多M&#xff0c;电影和视频更是按G计算。而智能设备的存储空间也用的捉襟见肘。能存储大量…

探索CSS:从入门到精通Web开发(二)

前言 当我们谈论网页设计和开发时&#xff0c;CSS&#xff08;层叠样式表&#xff09;无疑是其中的重要一环。作为HTML的伴侣&#xff0c;CSS赋予网页以丰富的样式和布局&#xff0c;使得网站看起来更加吸引人并且具备更好的可读性。本书将通过一系列深入浅出的方式&#xff0…

Java多线程 - 黑马教程

文章目录 Java 多线程一、多线程概述二、 多线程创建方式1、继承 Thread 类创建线程2、实现 Runnable 接口3、实现 Callable 接口三、Thread 常用的方法四、线程安全什么是线程安全问题?线程安全问题出现的原因程序模拟线程安全五、线程同步线程同步方式1:同步代码块线程同步…

GPIO的使用--时钟使能含义--代码封装

目录 一、时钟使能的含义 1.为什么要时钟使能&#xff1f; 2.什么是时钟使能&#xff1f; 3.GPIO的使能信号&#xff1f; 二、代码封装 1.封装前完整代码 2.封装结构 封装后代码 led.c led.h key.c key.h main.c 一、时钟使能的含义 1.为什么要时钟使能&#xff1f…

关于如何解决问题?代码习惯。

警钟长鸣 从师哥身上学到的东西&#xff1a; 关于如何解决问题&#xff1f; 1、沟通&#xff1a;有效的沟通&#xff0c;将问题描述清楚&#xff0c;让老师和师哥明白你出了什么问题&#xff0c;给出建议&#xff0c;很多时候一句良言胜过自己摸索很久 2、出现问题由浅入深地…

国标GB28181安防监控平台EasyCVR录像时间轴优化步骤

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

Linux系统上RabbitMQ安装教程

一、安装前环境准备 Linux&#xff1a;CentOS 7.9 RabbitMQ Erlang 1、系统内须有C等基本工具 yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel tk tc xz socat2、下载安装包 1&#xff09;首先&a…

Harmony Ble蓝牙App(三)特性和属性

Ble蓝牙App&#xff08;三&#xff09;特性使用 前言正文一、获取属性列表二、属性提供者三、获取特性名称四、特性提供者五、加载特性六、源码 前言 在上一篇中我们完成了连接和发现服务两个动作&#xff0c;那么再发现服务之后要做什么呢&#xff1f;发现服务只是让你知道设备…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之linux存储管理(5)》(21)

《Linux操作系统原理分析之linux存储管理&#xff08;5&#xff09;》&#xff08;21&#xff09; 6 Linux存储管理6.6 Linux 物理空间管理6.6.1 Linux 物理内存空间6.6.2 物理页面的管理6.6.3 空闲页面管理——buddy 算法 6.7 内存的分配与释放6.7.1 物理内存分配的数据结构 6…

Design patterns--代理模式

设计模式之代理模式 我们使用Qt开发大型应用程序时&#xff0c;经常遇见大型程序启动时需要加载一些配置信息、用户末次操作信息&#xff0c;以及算法模型等数据时比较费时&#xff0c;笔者在程序启动时设计欢迎页或加载页等窗体来提示用户程序正在加载某些数据&#xff0c;加载…

基于SSM框架的《超市订单管理系统》Web项目开发(第五天)供应商管理,增删改查

基于SSM框架的《超市订单管理系统》Web项目开发&#xff08;第五天&#xff09;供应商管理&#xff0c;增删改查 上一次我们实现了多表关联查询&#xff0c;还有分页显示数据的功能。还完善了用户管理这一模块。 因此今天我们需要完成的是供应商管理模块&#xff0c;这一模块…

SQL自学通之表达式条件语句与运算

目录 一、目标 二、表达式条件语句 1、表达式&#xff1a; 2、条件 2.1、WHERE 子句 三、运算 1、数值型运算: 1.1、加法() 1.2、减法 (-) 1.3、除法&#xff08;/&#xff09; 1.4、乘法 &#xff08;*&#xff09; 1.5、取模 &#xff08;%&#xff09; 优先级别…

第24章:Kubernetes Helm Introduction

目录 1. Helm简介2. Helm Charts文件&#xff08;.tgz&#xff09;组成3. Helm核心术语&#xff1a;4. Helm常用命令&#xff1a;5. DIY简单Helm Charts参考链接 1. Helm简介 Helm用于管理Kubernetes应用程序&#xff0c;Helm Charts可以用于定义、安装和升级最复杂的Kubernet…

西南科技大学模拟电子技术实验七(集成运算放大器的非线性应用)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结果,不得分,页数可根据内容调整) 预习计算内容根据运放的非线…

Android加载AnimatedImageDrawable播放gif动态图,Kotlin

Android加载AnimatedImageDrawable播放gif动态图&#xff0c;Kotlin import android.graphics.ImageDecoder import android.graphics.ImageDecoder.OnHeaderDecodedListener import android.graphics.drawable.AnimatedImageDrawable import android.os.Bundle import android…

SVG-椭圆弧-参数转换-计算公式-标准解读

文章目录 1.简介2.基本参数2.1.椭圆的表达2.2.参数变换2.3.注意事项 3.参考资料4.总结 1.简介 为了与其他路径段表示法保持一致&#xff0c; SVG 路径中的圆弧是根据曲线上的起点和终点定义的。椭圆弧的这种端点参数化。优点是它允许与其它路径一致的语法&#xff0c;其中所有…