Shopify二次开发之三:liquid语法学习(访问Objects和Schema数据模型)

news2024/12/23 14:52:22

目录

Objects (对象)

全局对象

all_products:商店中所有的商品

articles: 商店中的所有文章

collections:商店中所有的集合

模板对象

在product.json(配置的section中) 访问product对象

在collection.json中可访问collection对象

在article.json中可访问article对象

schema

基本input settings : text、textarea、range、radui、select等等

特定input settings 

settings_schema.json(config文件夹)


在前面几章讲到shopify的项目结构,也讲到了如何像其他编程语言一样声明变量、条件判断、循环、使用filters等等,唯独没有讲到如何在模板中渲染数据,本次配合前几章还有官方文档讲解如何在模板中访问数据。

官方文档:Liquid objects

Objects (对象)

在shopify中有能全局访问的对象和能在页面中访问的对象以及在section schema配置的特定模型对象settings_schema.json中配置的模型对象

全局对象

有如上Global表示该对象能全局访问,例如

all_products:商店中所有的商品
{{ all_products['black-leather-bag'].title }}

可以通过句柄去访问指定的product

articles: 商店中的所有文章
{{ articles['testing/my-first-blog'].title }}

可以通过句柄去访问指定的article

collections:商店中所有的集合

可直接循环遍历

{% for collection in collections %}
  {{- collection.title | link_to: collection.url }}
{% endfor %}

也可通过句柄去访问指定collection

{% for product in collections['spring'].products %}
  {{- product.title | link_to: product.url }}
{% endfor %}

模板对象

shopify有指定的页面模板,比如集合列表模板(Collections List)、商品集合模板(Collections)、文章模板(Blog posts)、商品模板(Products)等等

在product.json(配置的section中) 访问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 %}
在collection.json中可访问collection对象
<h1>
  {{ collection.title }}
</h1>
在article.json中可访问article对象
<h1>{{ article.title }}</h1>

另外在page.json访问page对象、在search.json中访问search对象等等

schema

以下是schema配置和input settings的官方文档

Section schema

Input settings

在section中配置schema的settings中的模型值有两种类型,一种是基本input settings,还有特定input settings

基本input settings : text、textarea、range、radui、select等等
    {
      "type": "checkbox",
      "id": "checkbox",
      "label": "sel",
      "default": true
    },
    {
      "type": "radio",
      "id": "radio",
      "label": "Radio",
      "options": [
        {
          "value": "left",
          "label": "Left"
        },
        {
          "value": "centered",
          "label": "Centered"
        }
      ],
      "default": "left"
    },
    {
      "type": "range",
      "id": "font_size",
      "min": 12,
      "max": 24,
      "step": 1,
      "unit": "px",
      "label": "Font size",
      "default": 16
    }

在模板中访问之前, 需要了解一下页面组成, 页面由特定xxx-group和template模板组成,每一个template模板都由section组成,每一个section也可以有若干block。

section对象有配置的settings,有blocks,还有唯一id等

通过section.settings.[id]去访问配置的模型值

{% assign radio = section.settings.radio %}
{% assign font_size = section.settings.font_size %}
<div>radio value: {{ radio  }}</div>
<div>font_size value: {{ font_size }}</div>
特定input settings 

包括blog、article、collection、collection_list、product、image_picker等等

基本的input settings渲染的值是基本数据,特定input settings如果是一个对象,则需要查阅文档去查阅相关对象。

比如article:

    {
       "type": "header",
       "content": "type article"
    },
    {
       "type": "article",
       "id": "article",
       "label": "Article"
    }

shopify商城后台customize


article对象

访问article

{% assign article = section.settings.article %}
<div>{{ article.title }}</div>
<div>{{ article.content }}</div>

比如block:

block里的settings和schema设置的settings是完全一样的

  "blocks": [
     {
       "name": "Slide",
       "type": "slide",
       "settings": [
         {
           "type": "image_picker",
           "id": "image",
           "label": "Image"
         }
       ]
     }
  ],

block对象

访问block

  <div class="slide">
    {% for block in section.blocks %}
      {% case block.type %}
        {% when 'slide' %}
          {% assign image_url = block.settings.image | image_url %}
          <div class="img">
            <img width="100%" height="100%" src="{{ image_url }}/">
          </div>
      {% endcase %}
    {% endfor %}
  </div>

settings_schema.json(config文件夹)

在模板中访问

{{ settings.color_page_bg }}

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

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

相关文章

Spring Bean的生命周期各阶段详解附源码

目录 Bean的生命周期Bean定义阶段Bean实例化阶段Bean属性注入阶段Bean初始化阶段Bean销毁阶段 Bean的生命周期 bean的生命周期&#xff0c;我们都知道大致是分为&#xff1a;bean定义&#xff0c;bean的实例化&#xff0c;bean的属性注入&#xff0c;bean的初始化以及bean的销毁…

如何制作教育培训小程序

教育培训行业近年来发展迅速&#xff0c;越来越多的机构开始意识到通过小程序来提供在线教育服务的重要性。小程序不仅可以为用户提供便捷的学习体验&#xff0c;还可以增加机构的知名度和品牌影响力。那么&#xff0c;如何制作一款教育培训小程序呢&#xff1f; 首先&#xff…

socket.io介绍

1. 使用的技术 Socket.IO 是一个封装了 Websocket、基于 Node 的 JavaScript 框架&#xff0c;包含 client 的 JavaScript 和 server 的 Node。其屏蔽了所有底层细节&#xff0c;让顶层调用非常简单。 另外&#xff0c;Socket.IO 还有一个非常重要的好处。其不仅支持 WebSocket…

处理器中的TrustZone之安全状态

在这个主题中&#xff0c;我们将讨论处理器内对TrustZone的支持。其他部分则涵盖了在内存系统中的支持&#xff0c;以及建立在处理器和内存系统支持基础上的软件情况。 3.1 安全状态 在Arm架构中&#xff0c;有两个安全状态&#xff1a;安全状态和非安全状态。这些安全状态映射…

fastadmin列表头部按钮批量上传视频

上传界面通过layui生成 index.html <a href="{:url(video/piliangadd)}" class="btn btn-success btn-piliangadd btn-dialog {:$auth->check(video/piliangadd)?:hide}" title="批量上传" ><i class="fa fa-plus">…

Python实现FA萤火虫优化算法优化卷积神经网络分类模型(CNN分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法&#xff08;Fire-fly algorithm&#xff0c;FA&#xff09;由剑桥大学Yang于2009年提出 , …

类和对象——(6)友元

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 没有存储汗水&#xff0c;就无法支取成…

AntDesign去国际化 | router页面显示问题

删除 Ant Design Pro 中的【国际化】模块报错&#xff1a;Environment key “es2022“ is unknown 问题描述 使用 npm run i18n-remove 运行 “i18n-remove”: “pro i18n-remove --localezh-CN --write” 删除【国际化】模块时出现如下报错&#xff1a; 问题分析 报错的大致…

Android,JNI开发和NDK之间的联系

Android&#xff0c;JNI开发和NDK。 1.jni和ndk jni是在jdk中就有出现的 在我们jdk路径中 D:\java\jdk11\include 这就是jdk中的jni Android开发环境中的ndk也有jni&#xff0c; D:\Android\sdk\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\in…

线程变量引发的session混乱问题

最近不是在救火&#xff0c;就是在救火的路上。 也没什么特别可写的&#xff0c;今天记录下最近遇到的一个问题&#xff0c;个人觉得挺有意思&#xff0c; 待有缘人阅读 言归正传&#xff0c;售后反馈&#xff1a; 营业查询中付款方式为第三方支付的几条银行缴费&#xff0c;创…

Affinity VS PS 2024最新功能详细对比?Affinity Photo与Photoshop比哪家强?

多年来&#xff0c;ps已经有了大量竞争对手。然而每次Photoshop都足以保持其领先地位。开源GIMP和Pixelmator都试图取代Photoshop&#xff0c;不过Photoshop对此不屑一顾。英国Serif公司研发了一款名为Affinity Photo的软件&#xff0c;声称可以叫板ps。今天我们看看有最有可能…

FPGA_单引脚输入输出-三态

FPGA_单引脚输入输出-三态 以常见的I2C协议通讯方式讲解&#xff0c;SDA线既可以接收数据也可以发送数据&#xff0c; I2C 发送写控制命令&#xff0c;在空闲状态时&#xff0c;我们给 I2C 数据方向控制&#xff08;sda_dir&#xff09;信号赋值高电平&#xff0c;将 sda 总线…

编译原理词法分析:正则表达式/正规式转NFA(原理+完整代码+可视化实现)

从正则到自动机&#xff1a;正则表达式/正规式转换为NFA 【本文内容摘要】 &#xff08;1&#xff09;从中缀表达式转换为后缀表达式 &#xff08;2&#xff09;从后缀表达式转换为NFA &#xff08;3&#xff09;打印NFA大致内容 &#xff08;4&#xff09;生成dot文件。 &…

macOS安装JDK8

在这篇博客的基础上进行补充。 https://blog.csdn.net/Sarah_luxy/article/details/128797756 百度搜索jdk8&#xff0c;选择官网进入 下载需要注册账户&#xff0c;提前注册登录 进入到Java SE中 选择下载 选择java归档&#xff0c;在历史版本里找jdk8 下拉找到jdk8 选…

SAAS版专业级条码标签打印软件解决方案

一。新一代互联网打印模式 saas云标签打印软件支持条码、二维码、表格等模式组合打印&#xff0c;支持批量打印标签、表格模拟数据 、在线预览二维码打印 、在线条码生成打印标签 ● 条码/二维码/标签打印&#xff0c;支持表格批量打印标签&#xff1b; ● 条码/二维码尺寸…

Stable Diffusion AI绘画系列【12】:国风美女剑客系列

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

vs查找与替换功能【在文件中查找】不显示任何结果

vs查找与替换功能【在文件中查找】不显示任何结果 vs查找与替换功能【在文件中查找】不显示任何结果1、注册表错误2、窗口重置3、检查查找窗口相关勾选正确吗 vs查找与替换功能【在文件中查找】不显示任何结果 请尝试以下三种方法中的任意一种 1、注册表错误 路径上的【数据】…

maven篇---第三篇

系列文章目录 文章目录 系列文章目录前言一、如何解决依赖传递引起的版本冲突?二、说说maven的依赖原则三、说说依赖的解析机制?四、说说插件的解析机制前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男…

MYSQL练题笔记-高级查询和连接-简单题3题

写了下面的前3道题。 一、每位经理的下属员工数量 看到题目就知道和之前的至少有5名下属的经理很相似&#xff0c;嘿嘿写对了就不做过多的讲解了。 二、员工的直属部门相关表和题目如下 刚开始觉得很简单&#xff0c;但是仔细想想这道题有两个输出&#xff0c;觉得想不出来&a…

layui+ssm实现数据表格双击编辑更新数据

layui实现数据表格双击编辑数据更新 在使用layui加载后端数据请求时&#xff0c;对数据选项框进行双击即可实现数据的输入编辑更改 代码块 var form layui.form, table layui.table,layer parent.layer undefined ? layui.layer : parent.layer,laypage layui.laypag…