Shopify开发总结
1、做过的内容
- 1、修改某个文案
- 2、使用分期付款app
- 3、收集用户的email
- 4、html在shopify中的使用(liquid文件)
- 5、使用google地图api
2、前端html在shopify中的使用 步骤
- 写好页面dom与css
- 新建liquid文件
- 动态设置liquid文件变量
3、liquid文件 配置解释
- name:在可视化配置页面,左侧展示的section名称,必须保持唯一
- class: 尽量唯一,会自动生成带此class的dom
- settings: 页面变量
- type:变量类型(image_picker、text、textarea...待补充)
- id:变量名称,在此liquid需保持唯一
- label:在可视化编辑中,用于提示编辑者的名称
- blocks:页面可遍历的变量
{
"name": "BLACK FRIDAY BANNER",
"class": "black-friday-banner",
"settings": [
{
"type": "image_picker",
"id": "banner_image_pc",
"label": "Image"
}, {
"type": "image_picker",
"id": "banner_image_mobile",
"label": "Image"
}
],
"blocks": [
{
"type" : "product",
"name" : "Product",
"settings" : [
{
"type": "text",
"id": "content",
"label": "Content"
}
]
}
],
"presets": [
{
"name": "BLACK FRIDAY BANNER",
"blocks": []
}
]
}
4、使用媒体选择
- 移动端范围:0 ~ 899
- 平板端范围:900 ~ 1200
- PC端范围:1200 ~ ∞
5、flex布局
- 使用flex布局,导致宽度失效的话,子元素设置:
flex-shrink:0
转载:www.jianshu.com/p/e8ca761e8…
6、关于getTime()
- new Date('2022-11-30').getTime() 得到的是1970年01月01日8点至1970年11月30日8点整的毫秒数
- new Date('2022-11-30 23:59:59').getTime() 得到的是1970年01月01日8点至1970年11月30日23:59:59的毫秒数
7、关于满减插件
- 插件名称:script edit
- 插件图片:

- 教程地址: help.shopify.com/zh-CN/manua…
8、学到了新的css写法
- root选择器 定义全局变量 第一步:定义
:root{
--red: #ff0000;
--font-family-normal: DIN;
}
第二步:使用
.my-dom{
color: var(--red);
font-family: var(--font-family-normal);
}
- not选择器 会匹配到所有 不包含active类名的元素
.my-dom:not(.active){
font-size: 12px;
}
9、shopify搜索
- 搜索的内容只涵括:产品、页面、收藏、博客、文章
- 希望内容不被搜索到,需要在后台设置原字段seo.hidden为1
- 搜索使用的表单,隐藏的input框是用来存放url参数的
<form action="{{ routes.search_url }}" method="get" role="search"
class="site-header__search-form oc-photo-management-form" data-dark="{{ dark_search_bg }}">
<input type="hidden" name="type" value="product">
<input type="hidden" name="options[prefix]" value="last">
<!-- <input type="search" name="q" value="{{ search.terms | escape | replace: '*', '' }}" placeholder="Search" class="site-header__search-input oc-p-m-search-input" aria-label=""> -->
<input type="search" name="q" value="" placeholder="Search" class="site-header__search-input oc-p-m-search-input" aria-label="">
<button type="submit" class="text-link site-header__search-btn site-header__search-btn--submit oc-p-m-search-submit">
<img src="https://cdn.shopify.com/s/files/1/0280/0012/4993/files/search_icon_e0ed45ab-9bdc-470d-9197-d23200840c02.png?v=1676007707" alt="">
</button>
</form>
10、shopify图库需求
- 搜索的实现
所有页面的搜索都是用的同一个搜索section,section可配置背景图、高度
- 新建一个search的section
- shopify的搜索是用表单来实现的
<form action="{{ routes.search_url }}">
<input type="text"
placeholder="Search"
name="q"
value="{{ search.terms | escape }}"
/>
<input type="hidden" name="type" value="product,page" />
<input type="hidden" name="options[unavailable_products]" value="hide" />
<input type="hidden" name="options[prefix]" value="last" />
<input type="submit" value="Search" />
</form>
- search的form里添加一个标记,这样才能在search页面筛选图库产品。
<input type="hidden" name="pm-category" value="photo-manage">
-
文件名称和section名称是:
oc-photo-management-search[OC PM Search] -
在搜索结果页,根据url中是否有
pm-category=photo-manage判断是展示图库产品,还是展示默认的搜索结果 -
搜索页面的分类:
- 在search的section里添加一个可以录入collection的block
- 由于在search页面也需要对图库产品进行分类
- 使用collection-category模块
- 给每个item绑定事件,点击之后,展示对应的collection的产品
- 如果点击全部,展示所有产品。
- 因为一个产品可以对应多个collection,所以需要遍历每个产品的
data-collection-name,使用js处理之后,判断是否展示 - 注意:因为在搜索页面,搜出来的结果不会有重复的,所以不需要去重步骤
- 由于此需求不需要分页,且因为for循环被限制为每页 50 次迭代,所以您需要使用
paginate标记来迭代具有超过 50 项的数组所以搜索出来的结果这样展示:
- 放到
{% paginate search.results by 999 %}{% endpaginate %}标签内展示时,需要给数量设置为999
- 首页的实现
首页相对来说比较简单,步骤是:
- 新建一个page的template
- 新建一个section,section里包含collection列表(轮播图)+所有collection的产品展示。
oc-photo-management-collectionlist[OC PM Collection List] - setting的type使用collection_list,可以选择多个collection,得到的结果是一个数组。
- 由于页面会把所有collection里的所有产品展示出来,所以会有重复的product,需要用js进行一个去重。
- 排序页面的实现
其实排序页面和首页内容非常相似,不同点在于,可以对collection的内容进行排序
(毕竟首页只是page页面,没有排序功能)
- 新建一个collection的template
- 新建section
oc-photo-management-collectionsort[OC PM Collection Sort] - 在collection页面可以使用排序功能
- 自定义排序内容,总共需要Featured、Alphabetically, A-Z、Alphabetically, Z-A、Date, old to new、Date, new to old
<select name="sort_by" class="facet-filters__sort select__select caption-large" id="SortBy" aria-describedby="a11y-refresh-page-message">
<option value="manual" {% if 'manual' == sort_by %} selected="selected"{% endif %}>Featured</option>
</select>
- 需要引入排序的css和js文件
{{ 'component-facets.css' | asset_url | stylesheet_tag }}
<script src="{{ 'facets.js' | asset_url }}" defer="defer"></script>
- 结果放在#ProductGridContainer->.collection->#product-grid内,是facets.js的逻辑控制的,会直接替换innerhtml