2012-11-07 34 views
8

我有一个产品句柄的列表,我想基于这个句柄来获取产品。似乎没有办法告诉Liquid去获得单一产品。我可以用API来做到这一点,但是如果我使用API​​,那么我必须使用JavaScript,而且我必须将我已经存在的HTML复制到片段中,然后复制逻辑。如何在Shopify Liquid中检索特定产品?

一个削减什么,我试图版本:

{% assign handle = 'my-product-handle' %} 
{% assign product = products.handle %} 
{% include 'snippet-product-item' %} 

回答

1

据我所知,你不能用它的手柄取液产品。

这使我想问几个问题:为什么你首先要有一个产品手柄清单?它从哪里来的?我建议你把这些产品中的自定义集合,那么你可以这样引用它们:{% collections['my-collections'] %}

3

你可以尝试这样的事:

{% for product in collection.all_products %} 
    {% if product.handle contains 'your-handle-name' %} 
     // Do what you want here 
    {% endif %} 
{% endfor %} 

通过所有产品均通过一个特定的循环(也环路集合),您可以使用if语句查找所需的产品。

干杯。

+0

它确实看起来,这是唯一的选择。经过多次试验和误差,这是Shopify离开我们的(甚至在2015年!) – cpres

+2

供参考:Shopify Liquid for for循环有50种产品的硬限制。如果您的收藏品包含超过50种产品,则无法达到全部。自从这个答案发布后,Shopify允许'all_products ['handle']'使用它的'handle'来访问产品对象。正如最近的答案所述。 – FactoryAidan

19

您现在可以使用下面的检索通过手柄的产品:

{% assign someProduct = all_products.some-handle %} 

目前还没有任何文件,以支持这一行动,但希望有很快就会Shopify上侧有形的东西。

+0

保存了我的一天。谢谢 –

+1

Shopify有以下两种情况: '{{all_products ['some-handle']。title}}'和{{all_products.some-handle.title}}' – FactoryAidan

+0

有没有办法做到这一点包含所有产品而不是all_products的集合,以便我们不限于20?你可以分页all_products? – Buts

6

只是为了更新任何人只找到这个,你现在可以直接引用的产品通过手柄由all_products['handle']this response他们Shopify /液体回购。

+0

工作就像一个魅力! – JoshHighland

4

您不仅可以通过其处理任何液体页面上立即访问的任何产品与all_products['the-handle-of-the-product']但你可以威胁它像一个产品变量,像这样:这是一样的{{ product.title }}的product.liquid页面上

{{ all_products['the-handle-of-the-product'].title }}

1

我也在寻找这个,而且我还没有找到一种方法在液体文件中通过id获取产品。

但正如上面的答案告诉你可以通过一个手柄

{{ all_products['product-handle'] }}

我什么担心访问任何产品的是,我认为,如果你更改产品手柄的名字被自动更改,但实际上那不会发生,它仍然是旧的手柄。

您需要创建一个不同的产品才能更改句柄,所以我猜{{ all_products['product-handle'] }}是访问您的产品的好方法。

我做这样的事情:

{% assign product = all_products['test-product-1'] %} 
{% if product == blank %} 
    <h1>No product found</h1> 
{% else %} 
    <h1>{{ product.title }}</h1> 
{% endif %}