- This topic is empty.
-
AuthorPosts
-
April 11, 2018 at 7:17 am #9625user9437856Participant
I am using Shopify. I am in collection page where I am getting all the filter with tag count something like,
All Products Apple(4) Banana(2) Orange(1) Mango(8)
Now when I click on any of the tag(For example I clicked on Banana) then It will display the banana products.
Now my issue is by clicking on the tag it’s changing the tag count.
All Products Apple(0) Banana(2) Orange(0) Mango(4)
I am using below code
{% for tag in collection.all_tags %} {% assign products_count = 0 %} {% for product in collection.products %} {% if product.tags contains tag %} {% assign products_count = products_count | plus: 1 %} {% endif %} {% endfor %} <a class="filter__link" href="/collections/{% if collection.handle != blank %}{{ collection.handle }}{% else %}all{% endif %}/{{ tag | handleize }}"{% if current_tags contains tag %} selected="selected" id="tag_active"{% endif %}>{{ tag }} ({{products_count }})</a> {% endfor %}
Thanks in advance.
April 12, 2018 at 9:12 am #9626alice-girardParticipantAs I was saying in comment, the issue comes from your secondary loop:
{% for product in collection.products %}
Which accesses only to the current view and not the full collection products.
I’ve not tested it but I guess it worthes a try:
{% assign whole_collection = collections[collection.handle] %} {% for product in whole_collection.products %} {% if product.tags contains tag %} {% assign products_count = products_count | plus: 1 %} {% endif %} {% endfor %}
Explanation, a code like this {{ collections[‘the-handle’].url }} allows access to any specific collection and its attributes.
HTH
Memo : this won’t work accurately if your collection has more than 50 items.
April 25, 2018 at 2:10 am #9627steph-sharpParticipantIt looks like the step you’re missing is the first line here:
{% assign collection = collections.all %}
You’re iterating over the current collection, so as you’ve noticed when you click on a tag the results change.
If you don’t have a collection with the handle
all
, you can create one by following this process:- Go to Products > Collections.
- Click Add a collection.
- Create the collection:
- Give your collection the Title
All
. - In the Conditions section, select “Automatically select products based on conditions”.
- Set the product condition “Product price is greater than $0”.
- Give your collection the Title
- Save
Edit:
This fixes the issue where the product count changes when you click on a tag link:
{% for tag in collection.all_tags %} {% assign products_count = 0 %} {% for product in collections[collection.handle].products %} {% if product.tags contains tag %} {% assign products_count = products_count | plus: 1 %} {% endif %} {% endfor %} <a class="filter__link" href="/collections/{% if collection.handle != blank %}{{ collection.handle }}{% else %}all{% endif %}/{{ tag | handleize }}"{% if current_tags contains tag %} selected="selected" id="tag_active"{% endif %}>{{ tag }} ({{products_count }})</a> {% endfor %}
The key part is:
{% for product in collections[collection.handle].products %}
It looks like when you’re filtering by tag with a URL like
collections/collection_1/tag_1
thencollection.products
is also filtered by the selected tag. The line above looks a bit messy, but it appears to return the full set of products. -
AuthorPosts
- You must be logged in to reply to this topic.