I have used Merchello for several, smaller, projects but for this particular implementation I am wanting to filter products based on a user selection.
I was assuming that the Specified Filters could be used for this purpose, but I am having finding any documentation on how these can be accessed in a view.
In my example I have a single filter called "Product Type" with values such as - Table, Chair, Sofa, Armchair, Suite, Side Table, Homeware - each product can belong to multiple filters, i.e. a leather Lay-z-boy recliner can belong in the Armchar, Chair and Suite filters.
So far I have been able to successfully add a filter group into the system (Merchello --> Products --> Filter Groups --> Add) as well as adding multiple filters to a product (Merchello --> Products --> [product] --> Product Filters -- > tick multiple filter)
I have successfully been able to extract all of the filters which I have entered into the system using the following
MerchelloHelper merchelloHelper = new Merchello.Web.MerchelloHelper();
var filterGroups = merchelloHelper.Filters.Product.GetAll();
This allows me to get all of the filter groups and then iterate through them to get the Name and Key of each of the filters, but this is where I run out of information.
What I would like to do is:
1: Only output the filters which are used by a (list of) products
2: Output the filters which are selected for a product
Any help on this would be very much appreciated. I will also report back if I come across a solution during my continued investigation.
I did some digging and found the answers to both of my questions.
Problem #1:
There is a function inside of helper.Filters.Product called GetFilterGroupsForCollectionContext() which accepts a Collection Key - this will return a list of filter groups and filters, with the bonus of the occurrence of each filter being returned in the count field - this can then be used to create a dropdown or checkbox list
var filters = merchelloHelper.Filters.Product.GetFilterGroupsForCollectionContext(Model.Content.Catalogue.CollectionKey);
foreach (var filter in filters)
{
<p>@filter.Name</p>
<ul>
@foreach (var fil in filter.Filters)
{
<li>@fil.Name - <small>@fil.Key</small> - @fil.Count</li>
}
</ul>
}
Output:
Problem #2:
Ok, I haven't figured this out, however I have found the next best thing - how to filter the products. I did this using some help from the following link (Cheers Simon and Rusty):
The key is the ProductContentQuery() function inside of the Merchello helper, this allows you to chain selectors together to search and filter products. In my case I called the following to return a list of products filtered by the result of GetFilterFromSource(IProductFilter filter):
Then of course you can iterate through the products collection to output your products. The PagedCollection object also contains properties for PageSize, CurrentPage, etc.
I am no expert on any of this so your mileage may vary. Hope it helps someone else though.
Filters
Hello
I have used Merchello for several, smaller, projects but for this particular implementation I am wanting to filter products based on a user selection.
I was assuming that the Specified Filters could be used for this purpose, but I am having finding any documentation on how these can be accessed in a view.
In my example I have a single filter called "Product Type" with values such as - Table, Chair, Sofa, Armchair, Suite, Side Table, Homeware - each product can belong to multiple filters, i.e. a leather Lay-z-boy recliner can belong in the Armchar, Chair and Suite filters.
So far I have been able to successfully add a filter group into the system (Merchello --> Products --> Filter Groups --> Add) as well as adding multiple filters to a product (Merchello --> Products --> [product] --> Product Filters -- > tick multiple filter)
I have successfully been able to extract all of the filters which I have entered into the system using the following
This allows me to get all of the filter groups and then iterate through them to get the Name and Key of each of the filters, but this is where I run out of information.
What I would like to do is:
1: Only output the filters which are used by a (list of) products
2: Output the filters which are selected for a product
Any help on this would be very much appreciated. I will also report back if I come across a solution during my continued investigation.
Regards, Andrew
EDIT: I am using v2.6.0 of Merchello
It's me again - talking to myself as usual.
I did some digging and found the answers to both of my questions.
Problem #1:
There is a function inside of helper.Filters.Product called GetFilterGroupsForCollectionContext() which accepts a Collection Key - this will return a list of filter groups and filters, with the bonus of the occurrence of each filter being returned in the count field - this can then be used to create a dropdown or checkbox list
Output:
Problem #2:
Ok, I haven't figured this out, however I have found the next best thing - how to filter the products. I did this using some help from the following link (Cheers Simon and Rusty):
https://our.umbraco.com/packages/collaboration/merchello/merchello/79449-get-list-of-products-from-collections-merchello#comment-256518
The key is the ProductContentQuery() function inside of the Merchello helper, this allows you to chain selectors together to search and filter products. In my case I called the following to return a list of products filtered by the result of GetFilterFromSource(IProductFilter filter):
Then of course you can iterate through the products collection to output your products. The PagedCollection object also contains properties for PageSize, CurrentPage, etc.
I am no expert on any of this so your mileage may vary. Hope it helps someone else though.
This works perfectly to apply one filter. But what if I wanted to get all of the products that were in the filter table or in chair for example?
is working on a reply...