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

目录

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 }}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软著项目推荐 深度学习的口罩佩戴检测 - opencv 卷积神经网络 机器视觉 深度学习

文章目录 0 简介1 课题背景&#x1f6a9; 2 口罩佩戴算法实现2.1 YOLO 模型概览2.2 YOLOv32.3 YOLO 口罩佩戴检测实现数据集 2.4 实现代码2.5 检测效果 3 口罩佩戴检测算法评价指标3.1 准确率&#xff08;Accuracy&#xff09;3.2 精确率(Precision)和召回率(Recall)3.3 平均精…

span标签点击去掉光标

很简单&#xff0c;一行样式搞定 caret-color: transparent;

python获取阿里云云解析dns的域名解析记录

最近由于工作原因接触到阿里云的服务&#xff0c;我需要实时获取所有的域名信息&#xff0c;用于对其进行扫描&#xff0c;因此写了一个自动化爬取脚本 给需要的人分享。 &#xff08;阿里云有官方的demo&#xff0c;有兴趣的可以自己看一下&#xff0c;后面也会放链接&#xf…

【axios】拦截器:axios.interceptors.request.use|axios.interceptors.response.use

文章目录 概述设置拦截器Axios 拦截器的实现任务注册任务编排任务调度 来源 概述 axios有请求拦截器&#xff08;request&#xff09;、响应拦截器&#xff08;response&#xff09;、axios自定义回调处理&#xff08;这里就是我们常用的地方&#xff0c;会将成功和失败的回调…

小红书种草笔记多少钱?给大家揭秘

小红书&#xff0c;一个以生活方式分享为主题的社交电商平台&#xff0c;吸引了众多年轻用户。种草笔记&#xff0c;是指用户在小红书上分享的关于某一产品或服务的使用体验、心得感悟&#xff0c;通过图文并茂的形式&#xff0c;激发其他用户的好奇心和购买欲望&#xff0c;从…

ssm农业信息管理系统源码和论文

摘 要 网络的广泛应用给生活带来了十分的便利。所以把农业信息管理与现在网络相结合&#xff0c;利用java技术建设农业信息管理系统&#xff0c;实现农业信息管理的信息化。则对于进一步提高农业信息管理发展&#xff0c;丰富农业信息管理经验能起到不少的促进作用。 农业信息…

学习使用三个命令实现在腾讯云服务器TencentOS Server 3.1或者CentOS 8上安装ffmpeg

学习使用三个命令实现在腾讯云服务器TencentOS Server 3.1或者CentOS 8上安装ffmpeg Error: Unable to find a match: ffmpeg添加RPMfusion仓库安装SDL安装ffmpeg执行命令测试 Error: Unable to find a match: ffmpeg 添加RPMfusion仓库 yum install https://download1.rpmfus…

HTTP 和 HTTPS的区别

一、HTTP 1.明文传输&#xff0c;不安全 2.默认端口号&#xff1a;80 3.TCP三次握手即可 二、HTTPS 1.加密传输&#xff0c;更安全(在HTTP层与TCP层之间加上了SSL/TTL安全协议) SSL和TTL是在不同时期的两种叫法&#xff0c;含义相同。 2.默认端口号&#xff1a;443 3.TCP三…

全球与中国汽车电力电子市场:增长趋势、竞争格局与前景展望

目前&#xff0c;世界各国都致力于转向更环保、更永续的传统交通替代方案。 电动车满足所有要求&#xff0c;因为它们具有零废气排放、改善空气品质、减少温室气体排放并创造更清洁、更健康的环境。此外&#xff0c;电动车的运作成本比传统内燃机驱动的汽车低&#xff0c;因为…

SpringBoot系列之集成Jedis教程

SpringBoot系列之集成Jedis教程&#xff0c;Jedis是老牌的redis客户端框架&#xff0c;提供了比较齐全的redis使用命令&#xff0c;是一款开源的Java 客户端框架&#xff0c;本文使用Jedis3.1.0加上Springboot2.0&#xff0c;配合spring-boot-starter-data-redis使用&#xff0…

提升--21---JMM(Java内存模型)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 JMM--Java Memory ModelJMM 定义JMM规则&#xff1a;线程间通信的步骤&#xff1a; JMM的三大特性&#xff1a;原子性&#xff08;Atomicity&#xff09;可见性&…

【ElementUI】一行代码解决图片预览

【ElementUI】一行代码解决图片预览 只需要在图片标签上加入:preview-src-list 只需要在图片标签上加入:preview-src-list 完整代码如下&#xff1a; <el-table-column label"封面" align"center" prop"cover" :sort-orders"[descend…

亿发专业MES制造系统,现代化MES精益制造管理,建设数字化车间

在制造业信息化进程中&#xff0c;车间级信息化一直是薄弱环节&#xff0c;要提升车间自动化水平&#xff0c;可以发展MES技术。 MES&#xff08;制造执行系统&#xff09;强调对车间级的过程进行全面的集成、控制和监控&#xff0c;同时要合理配置和组织所有资源&#xff0c;以…

信而泰IPSec测试方法

什么是IPSec IPSec&#xff08;Internet Protocol Security&#xff09;是IETF&#xff08;Internet Engineering Task Force&#xff09;制定的一组开放的网络安全协议。它并不是一个单独的协议&#xff0c;而是一系列为IP网络提供安全性的协议和服务的集合&#xff0c;包括认…

【ArcGIS Pro微课1000例】0047:深度学习--棕榈树提取全流程

一、创建训练样本 对汤加科洛瓦伊种植园每棵棕榈树的健康状况进行清查和评估,这需要花费大量的时间和劳动力。 为简化此过程,将在 ArcGIS Pro 中使用深度学习模型来识别树木,然后根据植被绿度的测量值计算其健康状况。 第一步是找到显示汤加科洛瓦伊的影像,该影像具有足够…

vue2+electron桌面端一体机应用

vue2+electron项目 前言:公司有一个项目需要用Vue转成exe,首先我使用vue-cli脚手架搭建vue2项目,然后安装electron 安装electron 这一步骤可以省略,安装electron-builder时会自动安装electron npm i electron 安装electron-builder vue add electron-builder 项目中多出…

快手视频如何去掉水印?三个简单好用视频去水印方法

快手视频如何去掉水印&#xff1f;尽管新兴的短视频平台如春笋般涌现&#xff0c;吸引了众多观众在业余时间浏览和分享视频&#xff0c;快手作为当下主流短视频之一&#xff0c;许多自媒体创作者也常常会下载一些热门的视频素材进行二次编辑。然而&#xff0c;他们都可能会面临…

同旺科技 USB TO SPI / I2C --- 调试W5500_TCP Client接收数据

所需设备&#xff1a; 内附链接 1、USB转SPI_I2C适配器(专业版); 首先&#xff0c;连接W5500模块与同旺科技USB TO SPI / I2C适配器&#xff0c;如下图&#xff1a; 发送数据6个字节的数据&#xff1a;0x11,0x22,0x33,0x44,0x55,0x66 在专业版调试软件中编辑指令&#xff0c…

防火墙规则保存及自定义链

目录 防火墙规则保存 备份工具 iptables services 自定义链 自定义链实现方式 删除自定义链 重命名自定义链 防火墙规则保存 命令&#xff1a;iptables -save 工具&#xff1a;iptables services [rootlocalhost ~]# iptables-save > /opt/iptables.bak #将文件保存…

Win10安装ROS2遇到的小问题

按照网上教程安装ROS2&#xff0c;卡在了第一步。在cmd或powershell安装Chocolatey时&#xff0c;出现以下两种错误&#xff1a; “%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe” -NoPro …~here-string 标题后面和行尾之前不允许包含任何字符。 …… 或者 使…