Bog*_*lea 1 shopify shopify-app shopify-template
如何在文章页面上显示产品列表(如食谱).你能给我一些关于我应该用什么来实现这种行为的指导吗?如何动态地将这些产品链接到文章?
在Shopify中有两种方法可以在任意页面上显示产品:
使用产品句柄从all_products全局对象获取产品.
例:
{% assign ingredient = all_products['lavender-oil'] %}
Run Code Online (Sandbox Code Playgroud)
这适用于少量产品,但对于大量产品,可能会导致页面加载时间延迟.我们也限制每页只有20个(我认为)调用all_products,所以这对于含有大量成分的食谱不起作用.
使用仅包含所需产品的集合.如果您知道集合的句柄,则可以引用任意任意集合.在进行集合时,您还可以手动对产品进行排序,以控制它们在循环时显示的顺序.集合可以包含任意数量的产品,我相信如果您没有指定任何其他限制,默认分页将为您提供前20或50个产品.如果需要,您可以通过使用paginate标签包装收集产品循环来调整所服务的产品数量(尽管出于性能原因,绝对不建议使用上限)
例:
{% assign ingredients = collections['love-potion-number-9'] %}
{% for product in ingredients.products %}
<h2>{{ product.name }}!!</h2>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
这两个方面的缺点是您无法在Shopify中的文章内容中编写Liquid代码,因此需要将此成分部分编写为主题文件中的片段或部分,并包含在用于这些内容的文章模板中食谱.
这让我想到了下一个问题 - 你想要包含数量与成分的概念,到目前为止,上述两个都没有给我们这样做.所以现在,困难的部分:
我可以通过几种不同的方式来帮助你解决问题.不幸的是,没有人是完美的.
Metafields是Shopify提供的一款出色的工具,但遗憾的是Shopify并不能让它们易于使用[1].
获得元数据编辑工具后,为"命名空间"和"键"值提供命名结构.例如,您可以为您提供的配方创建以下元字段.(注意:如何输入这些将取决于您正在使用的元数据编辑工具)
namespace: 'ingredients', // We'll use this as the 'box' that holds all our ingredients
key: 'juniper-berry-oil', // This will be the product handle for the product in question
value: '2 drops' // The quantity used for the recipe
namespace: 'ingredients',
key: 'rosemary-ct-camphor-oil',
value: '1 drop'
namespace: 'ingredients',
key: 'cypress-oil',
value: '1 drop'
... (etc) ...
Run Code Online (Sandbox Code Playgroud)
然后,在您创建成分列表的主题文件中,您将拥有如下所示的代码:
{% assign ingredients = article.metafields.ingredients %}
{% for ingredient in ingredients %}
{% assign handle = ingredient.first %}
{% assign amount = ingredient.last %}
{% assign product = all_products[handle] %}
<!-- HTML code here -->
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
如果您创建了一个标记命名方案,您可以循环使用它们并使用它们来构建您的成分列表.例如,如果您在表单中为文章提供了许多标记,则ingredient_[product-handle]_[amount]可以将它们引用为:
{% for tag in article.tags %}
{% if tag contains 'ingredient' %}
{% assign breakdown = tag | split: '_' %}
{% assign handle = breakdown[1] %}
{% assign product = all_products[handle] %}
{% assign amount = breakdown | last %}
<!-- HTML Code -->
{% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
这种方法的缺点是,如果以这种方式完成,没有简单的方法来重新排序标记 - 使用集合可以更好地控制它.
引用集合的最简单方法是使用与文章具有相同句柄的集合 - 然后您可以将集合及其产品引用为:
{% assign ingredients = collections[article.handle] %}
{% for product in ingredients.products %}
<!-- HTML Code here -->
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
这样做的好处是可以通过将集合设置为手动排序方法来轻松地对成分进行排序,但相应的缺点是没有明显的位置来放置数量信息.
获取该信息的一种方法是使用标签或元数据 - 元数据库具有能够直接访问产品数量的优势 - 如果在本答案的元数据部分使用上面的命名约定,您可以使用:
{% assign ingredients = collections[article.handle] %}
{% for product in ingredients.products %}
{% assign amount = article.metafields.ingredients[product.handle] %}
<!-- HTML Code here -->
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
如果使用标签,您需要一种可以像标签部分一样拆分的格式,并在每次循环浏览所有标签时找到适合您产品的标签.如果您的代码设置为ingredient_[product-handle]_[amount]
如果使用标签,您需要一种可以像标签部分一样拆分的格式,并在每次循环浏览所有标签时找到适合您产品的标签.如果您的代码设置为上述示例:
{% for tag in article.tags %}
{% if tag contains 'ingredient' and tag contains product.handle %}
{% assign amount = tag | split: '_' | last %}
{% endif %}
<!-- HTML Code -->
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
希望这有助于你开始!
[1] 使用Metafields:在Shopify中有几种可能的编辑元数据的解决方案 - 我的个人偏好是Chrome的'Shopify FD'扩展,但Shopify管理屏幕的最新更新干扰了此扩展程序加载和显示其功能的能力某些页面上的metafield面板.我知道产品页面仍然有效,但有些页面(如收藏品)不再存在.
您的商店还有许多可用于编辑元数据的应用程序 - 我没有使用它们,因此我无法说出它们的价值,但您可以在此处查看列表:https://apps.shopify. COM /搜索?q = metafield&st_source =
如果您有编码背景,您也可以通过向Shopify的Admin API发送正确的数据来自己创建和更新元数据 - 如果您愿意,请参阅https://help.shopify.com/en/api/reference/metafield上的文档尝试自己做.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |