.
Please, use the following credentials
user:manager,password:manager
for logging to the Dashboard.
New FREE Shopaholic Bootstrap Theme Available!
Free E-Commerce Bootstrap for Shopaholic theme is now available on October's marketplace. Check out the theme's live demo version. It demonstrates what you can build with Shopaholic and will soon have support for all our plugins and extensions. We will also constantly update it to cover all Shopaholic functionality.
Open to your Ideas!
Let us know if you have any questions, ideas or suggestions! Just drop a line at shopaholic@lovata.com
Live Demo
You can visit our Live Demo site. Sign in to backend using: login - manager, password - manager. You can deploy the demo site locally. To do so, you need to clone the repository, follow the steps from the "Installation guide", install the plugins. As a result, you will receive a copy of the demo site with a full database. Having a ready-made demo site example, you can easily learn how to operate the plugins.
Large Catalog Performance Live Demo
If you would like to know how our plugins perform with large catalogs of products, you can visit our Large Catalog Live Demo that has 21 000 products, 68 000 offers and 210 000 variations of property values.
Below are the performance characteristics for server setup: Dual Core CPU with 4GB of RAM.
For a catalog containing 210 products
Catalog page load time: 100-150 ms
Product list filtering time: 80-100 ms
For a catalog containing 21 000 products
Catalog page load time: 900-1100 ms
Product list filtering time: 500-600 ms
Support
Please join us on #shopaholic channel in October CMS slack chat in order to have quick support on all our products. You will also get all newest updates and insights about our existing and upcoming products!
If you have any specific requests, suggestions or ideas please do not hesitate to send us a message, it will help us make our products even better.
If you don't have access to octobercms.slack.com, please register here
Required Plugins
Recommended Plugins
General information
The Filter plugin adds functionality to Shopaholic, allowing you to create filters by brand and properties, including the properties provided by the Properties for Shopaholic plugin (if it’s installed).
With this plugin you can:
- Create complex filters and display them through interactive interface components (checkboxes and radio buttons, sliders).
- Add customizable filters by price that allow users to choose products of a certain price range from a minimum to a maximum amount.
- Add custom filters like “Discounted products” or “Products in stock” that check if the products have discounts or if they are currently in store.
- Choose which properties are to be included in a filter and customize it according to your individual needs.
Get involved and contribute to the project
If you’d like to help us improve the project, you can do so in the following ways:
- Report bugs and recommend new features on our plugin’s GitHub issues page;
- Contribute to the project by following these instructions;
- Follow and support us on social media: Twitter page; Facebook community.
You can also visit LOVATA’s GitHub page.
License
© 2018, LOVATA Software Development Company under Commercial License.
Developed by Andrey Kharanenka.
The following plugins are required
Toolbox
Helpers for faster development: pagination rendering, objects and lists caching, UI strings for using in third...
Toolbox
Helpers for faster development: pagination rendering, objects and lists caching, UI strings for using in third...
Shopaholic
No. 1 e-commerce platform for October CMS
Shopaholic
No. 1 e-commerce platform for October CMS
This plugin is also included into the following bundles
Advanced Shopaholic E-commerce Bundle
Bundle contains additional plugins for Shopaholic to create advanced e-commerce solution
Advanced Shopaholic E-commerce Bundle
Bundle contains additional plugins for Shopaholic to create advanced e-commerce solution
- Filter for Shopaholic
- Mighty SEO
- Popularity for Shopaholic
- Properties for Shopaholic
- + 2 more
Sneakers Shop Pro for Shopaholic
The ready-made online athletic shoe store
Sneakers Shop Pro for Shopaholic
The ready-made online athletic shoe store
- Sneakers E-Commerce Theme for Shopaholic
- Good News
- Filter for Shopaholic
- Mighty SEO
- + 14 more
Sneakers Shop for Shopaholic
The ready-made online athletic shoe store
Sneakers Shop for Shopaholic
The ready-made online athletic shoe store
- Sneakers E-Commerce Theme for Shopaholic
- Good News
- Filter for Shopaholic
- Mighty SEO
- + 8 more
Biolia Shop Pro for Shopaholic
The ready-made online organic food store
Biolia Shop Pro for Shopaholic
The ready-made online organic food store
- Biolia E-Commerce Theme for Shopaholic
- Good News
- Filter for Shopaholic
- Mighty SEO
- + 8 more
Biolia Shop for Shopaholic
The ready-made online organic food store
Biolia Shop for Shopaholic
The ready-made online organic food store
- Biolia E-Commerce Theme for Shopaholic
- Good News
- Filter for Shopaholic
- Mighty SEO
- + 5 more
The following plugin extends or depends on the plugin
The following themes use this plugin
Sneakers E-Commerce Theme for Shopaholic
Sneakers E-Commerce Theme for Shopaholic
Customizable and mobile-friendly e-commerce theme for Shopaholic designed especially for an online shoe store.
Axiam E-Commerce Theme for Shopaholic
Axiam E-Commerce Theme for Shopaholic
Responsive Bootstrap 4 Shopaholic theme for October CMS
Biolia E-Commerce Theme for Shopaholic
Biolia E-Commerce Theme for Shopaholic
Customizable and mobile-friendly e-commerce theme for Shopaholic designed especially for an online organic food & eco products store.
The full plugin documentation is available here.
FilterPanel component
Component allows you to render of custom filter panel for different site pages. For example: search results page, brand page with product list, etc.
Method list
getProductPropertyList($arPropertySetList, $obProductList = null)
- (array|string) $arPropertySetList - array with list of property set codes
- (ProductCollection) $obProductList - product collection. List of property values will be obtained for this product list.
Example: render of filter panel for product property set with code "main"
[FilterPanel] [ProductList] == {# Get product list collection#} {% set obProductList = ProductList.make().active() %} {# Get products proeprty list for property sets with code 'main', enabled how filters #} {% set obPropertyList = FilterPanel.getProductPropertyList(['main'], obProductList) %} {% for obProperty in obPropertyList if obProperty.hasValue() %} {# Render filter name #} <div>{{ obProperty.filter_name }}</div> {# Get filter type #} {% set sFilterType = obProperty.filter_type %} {# Get proeprty value list #} {% set obPropertyValueList = obProperty.property_value.sort() %} {# Render filtre with type == checkbox #} {% if sFilterType == 'checkbox' %} {% for obValue in obPropertyValueList %} <input type="checkbox" value="{{ obValue.slug }}"> <label>{{ obValue.value }}</label> {% endfor%} {% endif %} {# Render filtre with type == select #} {% if sFilterType == 'select' %} <select> {% for obValue in obPropertyValueList %} <option value="{{ obValue.slug }}">{{ obValue.value }}</option> {% endfor%} </select> {% endif %} {% endfor %}
getOfferPropertyList($arPropertySetList, $obProductList = null)
- (array|string) $arPropertySetList - array with list of property set codes
- (ProductCollection) $obProductList - product collection. List of property values will be obtained for this product list.
Example: render of filter panel for offer property set with code "main"
[FilterPanel] [ProductList] == {# Get product list collection#} {% set obProductList = ProductList.make().active() %} {# Get products proeprty list for property sets with code 'main', enabled how filters #} {% set obPropertyList = FilterPanel.getOfferPropertyList(['main'], obProductList) %} {% for obProperty in obPropertyList if obProperty.hasValue() %} {# Render filter name #} <div>{{ obProperty.filter_name }}</div> {# Get filter type #} {% set sFilterType = obProperty.filter_type %} {# Get proeprty value list #} {% set obPropertyValueList = obProperty.property_value.sort() %} {# Render filtre with type == checkbox #} {% if sFilterType == 'checkbox' %} {% for obValue in obPropertyValueList %} <input type="checkbox" value="{{ obValue.slug }}"> <label>{{ obValue.value }}</label> {% endfor%} {% endif %} {# Render filtre with type == select #} {% if sFilterType == 'select' %} <select> {% for obValue in obPropertyValueList %} <option value="{{ obValue.slug }}">{{ obValue.value }}</option> {% endfor%} </select> {% endif %} {% endfor %}
Extension CategoryItem class
Filter for Shopaholic plugin adds fields to CategoryItem class object:
- (FilterPropertyCollection) product_filter_property
- (FilterPropertyCollection) offer_filter_property
"product_filter_property" and "offer_filter_property" fields in CategoryItem object returns FilterPropertyCollection object with sorted active properties for this category. Property collection object has elements with properties, enabled how filters. "product_filter_property" and "offer_filter_property" fields helps render filter panel by properties of products or offers.
Example: render of filter panel for category
[CategoryPage] slug = "{{ :slug }}" == {# Get category item #} {% set obCategory = CategoryPage.get() %} <div data-id="{{ obCategory.id }}"> <h1>{{ obCategory.name }}</h1> {# Get products proeprty list for category, enabled how filters #} {% set obPropertyList = obCategory.product_filter_property %} {% if obPropertyList.isNotEmpty == true %} {% for obProeprty in obPropertyList if obProeprty.hasValue() %} {# Render filter name #} <div>{{ obPropertyList.getFilterName(obProeprty.id) }}</div> {# Get filter type #} {% set sFilterType = obPropertyList.getFilterType(obProeprty.id) %} {# Get proeprty value list #} {% set obPropertyValueList = obProeprty.property_value.sort() %} {# Render filtre with type == checkbox #} {% if sFilterType == 'checkbox' %} {% for obValue in obPropertyValueList %} <input type="checkbox" value="{{ obValue.slug }}"> <label>{{ obValue.value }}</label> {% endfor%} {% endif %} {# Render filtre with type == select #} {% if sFilterType == 'select' %} <select> {% for obValue in obPropertyValueList %} <option value="{{ obValue.slug }}">{{ obValue.value }}</option> {% endfor%} </select> {% endif %} {% endfor %} {% endif %} </div>
Extension ProductCollection class
Filter for Shopaholic plugin adds filtration methods to ProductCollection class:
filterByPrice($fStartPrice, $fStopPrice)
Method applies a filter by range of offer price from $fStartPrice to $fStopPrice. If $fStartPrice has empty value, then method applies a filter by range of offer price from 0 to $fStopPrice. If $fStopPrice has empty value, then method applies a filter by range of offer price from $fStartPrice. If $fStopPrice and $fStartPrice has empty value, then method isn't apply a filter by range of offer price.
$obList = ProductCollection::make([1,2,10,15])->filterByPrice(10, 15);
filterByBrandList($arBrandIDList)
- $arBrandIDList - array with brand ID's
Method applies a filter by list of brands.
$obList = ProductCollection::make([1,2,10,15])->filterByBrandList([10, 15]);
filterByDiscount()
Method applies a filter and returns product list with offers that have a discount.
$obList = ProductCollection::make([1,2,10,15])->filterByDiscount();
filterByQuantity()
Method applies a filter and returns product list with offers that have a quantity value > 0.
$obList = ProductCollection::make([1,2,10,15])->filterByQuantity();
filterByProperty($arFilterList, $obPropertyList)
- $arFilterList - array with filter values
- $obPropertyList - object FilterPropertyCollection
Method works only with Properties for Shopaholic plugin. Method applies a filter by product or offer properties.
You needs to prepare array $arFilterList in format:
$arFilterList = [ '12' => [ //Property ID 'green', 'blue' //Array with values of properties for filtration ], 15 => [ 10, 14 //Array with range of values (only for filter with type 'between') ], ];
You needs to get $obPropertyList object from current category item:
//Apply filter by product properties $obCategory = CategoryItem.make(10); $obPropertyList = $obCategory.product_filter_property; $obList = ProductCollection::make([1,2,10,15])->filterByProperty($arFilterList, $obPropertyList); //..... //Apply filter by offer properties $obCategory = CategoryItem.make(10); $obPropertyList = $obCategory.offer_filter_property; $obList = ProductCollection::make([1,2,10,15])->filterByProperty($arFilterList, $obPropertyList);
Extension OfferCollection class
Filter for Shopaholic plugin adds filtration methods to OfferCollection class:
filterByPrice($fStartPrice, $fStopPrice)
Method applies a filter by range of price value from $fStartPrice to $fStopPrice. If $fStartPrice has empty value, then method applies a filter by range of price value from 0 to $fStopPrice. If $fStopPrice has empty value, then method applies a filter by range of price value from $fStartPrice. If $fStopPrice and $fStartPrice has empty value, then method isn't apply a filter by range of price value.
$obList = OfferCollection::make([1,2,10,15])->filterByPrice(10, 15);
filterByProperty($arFilterList, $obPropertyList)
- $arFilterList - array with filter values
- $obPropertyList - object FilterPropertyCollection
Method works only with Properties for Shopaholic plugin. Method applies a filter by offer properties.
You needs to prepare array $arFilterList in format:
$arFilterList = [ '12' => [ //Property ID 'green', 'blue' //Array with values of properties for filtration ], 15 => [ 10, 14 //Array with range of values (only for filter with type 'between') ], ];
You needs to get $obPropertyList object from current category item:
$obCategory = CategoryItem.make(10); $obPropertyList = $obCategory.offer_filter_property; $obList = OfferCollection::make([1,2,10,15])->filterByProperty($arFilterList, $obPropertyList);
Extension PropertyValueItem class
isDisabled($obProductList)
- (ProductCollection) $obProductList - filtered product collection The method returns true, if you apply filter with value == $this->slug, then filtered product collection will not be empty.
-
Biz-Mark
Found the plugin useful on 29 Jul, 2020
Powerful, robust, and easy to use. Best solution to filtering catalog for best ecommerce plugin for OctoberCMS
-
Lovata sp. z o.o. author
Replied on 26 Aug, 2020
Hey!
It's nice to hear you're satisfied with the Filter plugin and the Shopaholic platform in general!
Thx for your review!
-
Tumiso Mare
Found the plugin useful on 9 Jul, 2020
Helpful Plugin ... But hard to get started, no complete examples. So even though it's actually easy to use, it takes longer to try and figure things out. But I can't wait to see it grow.
-
Lovata sp. z o.o. author
Replied on 13 Jul, 2020
-
Shohabbos
Found the plugin useful on 16 Aug, 2019
Very usefull!
-
Lovata sp. z o.o. author
Replied on 16 Aug, 2019
Thank you for using Shopaholic products! We're happy you enjoy this Filter plugin!
-
1.8.1 |
Change lists method to pluck method. Thanks for contribution Nick Khaetsky. Apr 05, 2022 |
---|---|
1.8.0 |
Added composer.json to plugin May 01, 2021 |
1.7.1 |
Fixed dynamic method in CategoryItem class. Requires Toolbox plugin version 1.28.1 and later. Mar 03, 2020 |
1.7.0 |
Added filter type - "radio". Feb 04, 2020 |
1.6.1 |
Removed deleted offers from filtering by price. Jun 21, 2019 |
1.6.0 |
Updated logic of filter by price in ProductCollection, OfferCollection classes, after adding taxes in main plugin. Feb 27, 2019 |
1.5.0 |
Added filterByDiscount(), filterByQuantity() methods to OfferCollection class. Nov 05, 2018 |
1.4.0 |
!!! Changed: only property values of active products and offers are stored in the cache for filtration. Please update "Properties for Shopaholic" plugin before updating "Filter for Shopaholic" plugin. Sep 03, 2018 |
1.3.0 |
Update license file Aug 07, 2018 |
1.2.0 |
Add FilterPanel component for rendering custom filter panel. Improve performance. Added ability to create filter panel with mutually exclusive values of properties. Requires "Properties for Shopaholic" plugin version 1.3.0 and later. Jul 11, 2018 |
1.1.0 |
Add FilterByDiscountStore, FilterByPropertyStore, FilterByQuantityStore classes. Requires Toolbox plugin version 1.10.0 and later. Jun 21, 2018 |
1.0.0 |
Initialize plugin. Dec 06, 2017 |