8

Product support

Visit this product's website for support.

Categories

.

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 Properties for Shopaholic plugin adds functionality to Shopaholic plugin, allowing you to create custom properties for specific types of products on your online store. Whether you’re selling hardware components or food for domestic animals, this plugin will let you create a more flexible interface for your customers.

With this plugin you are able to:

  • Create custom properties for products, assign name, ID and the measurement of the property. You can also assign which components will be used to display the properties in the back-end (text, textarea, checkboxlist, dropdown, datepicker, colorpicker, mediafinder)
  • Assign properties to a category of products. So that individual types of products, like hardware, mobile phones, tablets and other products could have their own specific sets of properties, like technical specifications.
  • Create groups of properties and assign a group name, like general characteristics or a detailed overview of the product.

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:

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
This plugin is also included into the following bundles
The following themes use this plugin
Property list

The full plugin documentation is available here.

Extension ProductItem class

Properties for Shopaholic plugin adds fields to ProductItem class object:

"property" field in ProductItem object returns PropertyCollection object with sorted active properties for this product.:

Example: render of property list for product

[ProductPage]
slug = "{{ :slug }}"
==

{# Get product item #}
{% set obProduct = ProductPage.get() %}
<div data-id="{{ obProduct.id }}">
    <h1>{{ obProduct.name }}</h1>
    {# Get list of proeprties for product #}
    {% set obPropertyList = obProduct.property %}
    {% if obPropertyList.isNotEmpty == true %}
        <ul>
            {% for obProeprty in obPropertyList if obProeprty.hasValue() %}
                <li>{{ obProeprty.name }}: {{ obProeprty.property_value.getValueString() }}</li>
            {% endif %}
        </ul>
    {% endif %}
</div>

Extension OfferItem class

Properties for Shopaholic plugin adds fields to OfferItem class object:

"property" field in OfferItem object returns PropertyCollection object with sorted active properties for this offer.

Example: render of property list for offer

[ProductPage]
slug = "{{ :slug }}"
==

{# Get product item #}
{% set obProduct = ProductPage.get() %}
<div data-id="{{ obProduct.id }}">
    <h1>{{ obProduct.name }}</h1>
    {# Get first offer #}
    {% set obOffer = obProduct.offer.first() %}
    {# Get list of proeprties for offer #}
    {% set obPropertyList = obOffer.property %}
    {% if obPropertyList.isNotEmpty == true %}
        <ul>
            {% for obProeprty in obPropertyList if obProeprty.hasValue() %}
                <li>{{ obProeprty.name }}: {{ obProeprty.property_value.getValueString() }}</li>
            {% endif %}
        </ul>
    {% endif %}
</div>

Extension CategoryItem class

Properties for Shopaholic plugin adds fields to CategoryItem class object:

  • (array) product_property_list - array with relation data
  • (array) offer_property_list - array with relation data
  • (PropertyCollection) product_property
  • (PropertyCollection) offer_property

"product_property" and "offer_property" fields in CategoryItem object returns PropertyCollection object with sorted active properties for this category.

Example: render of property list 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 #}
    {% set obPropertyList = obCategory.product_property %}
    {% if obPropertyList.isNotEmpty == true %}
        <ul>
            {% for obProeprty in obPropertyList if obProeprty.hasValue() %}
                <li>{{ obProeprty.name }}: {{ obProeprty.property_value.getValueString() }}</li>
            {% endfor %}
        </ul>
    {% endif %}
</div>
  • Found the plugin not useful on 11 Dec, 2023

    these properties create an n-square problem, there is a separate request for each property. Author writes about the performance there by the link, so it is achieved only at the expense of the cache

  • Found the plugin useful on 3 Jan, 2021

    Great plugin that pushes Shopaholic much further! And fine documentation.

  • author

    Replied on 5 Jan, 2021

    We're happy you enjoy it! Thx for your feedback!

  • Found the plugin useful on 28 Aug, 2020

    Powerful and extensive plugin, that has top notch code quality and stress resistance.

  • author

    Replied on 5 Jan, 2021

    Thank you so much!

  • Found the plugin useful on 18 Aug, 2019

    Useful

  • author

    Replied on 28 Aug, 2020

    Thx for your opinion!

2.2.7

Fixed logic of getSlugValue() method with error of slug field duplicate.

Dec 10, 2023

2.2.6

Updated composer file.

Jul 07, 2023

2.2.5

Fix integration with Translatable plugin.

Jul 07, 2023

2.2.4

Fix errors for integration with v3.

Jun 14, 2023

2.2.3

Fix errors for integration with v3. Thanks for contribution Nick Khaetsky.

May 30, 2022

2.2.2

Added label field to PropertyValueItem.

Apr 05, 2022

2.2.1

Fixed PropertyCollection and PropertyValueCollection classes. Requires Toolbox plugin version 1.34.0 and later.

May 18, 2021

2.2.0

Reduced count of database queries, if cache is empty. Requires Toolbox plugin version 1.32.0 and later.

May 02, 2021

2.1.0

Added composer.json to plugin

May 01, 2021

2.0.4

Added copy method to PropertySetCollection::code().

May 15, 2020

2.0.3

Fixed saving property values​with type "taglist".

Apr 23, 2020

2.0.2

Fixed dynamic method in CategoryItem, ProductItem, OfferItem classes. Requires Toolbox plugin version 1.28.1 and later.

Mar 03, 2020

2.0.1

Fixed saving property values ​​and translations for fields with type "checkbox list" and "select".

Feb 19, 2020

2.0.0

!!! "Measure" model has been moved to Shopaholic plugin. Table "lovata_properties_shopaholic_measure" renamed to "lovata_shopaholic_measure". Requires Shopaholic plugin version 1.25.0 and later.

Feb 17, 2020

1.10.0

Added ability to partially import product/offer property values when using improt from CSV file.

Feb 05, 2020

1.9.2

Added try/catch section CommonPropertyHelper::getValueObject() method.

Feb 04, 2020

1.9.1

Fixed bug with deactivating items in import from XML files.

Jun 28, 2019

1.9.0

Added customizable import from xml file. Thanks to Rolands Zeltins. His donation made this feature available for everyone.

May 29, 2019

1.8.3

Fixed bug of extending import config in Offers controller.

May 13, 2019

1.8.2

Fixed saving property values, after offer/product was created.

May 10, 2019

1.8.1

Fixed saving property values​with empty value for non-default language. Menu items moved to settings menu.

Mar 29, 2019

1.8.0

Added "global" flag to PropertySet model. Added "Inherit property sets" to Category model. Added setting "Enable for categories inheriting property sets from parent categories".

Mar 29, 2019

1.7.3

Added settings to help fix the problem with saving of multi-byte character values for PropertyValue model. Thanks for contribution pikanji.

Dec 25, 2018

1.7.2

Added primary key to lovata_properties_shopaholic_variant_link table.

Dec 11, 2018

1.7.1

Fixed display of valid property values in backend.

Nov 05, 2018

1.7.0

Added import properties from CSV file. Added import product/offer property values from CSV file. Added supported types of properties: number, rich editor, single checkbox, switch, balloon selector, tag list, radio. Adding ability to use multilanguage for fields with type select/checkbox list. Requires Toolbox plugin version 1.19.0 and later.

Nov 02, 2018

1.6.0

Changed: only property values of active products and offers are stored in the cache.

Sep 03, 2018

1.5.0

Add CodeField trait to Group model.

Aug 17, 2018

1.4.0

Update license file

Aug 07, 2018

1.3.3

Fixed saving of property values that contain special characters.

Jul 25, 2018

1.3.2

Fixed saving of property values whose "slug" have empty value.

Jul 24, 2018

1.3.1

Fix error in PropertyItem object, if product/offer property value is empty.

Jul 17, 2018

1.3.0

!!! Adding PropertySet model. Changed database structure. Logic for storing values of products properties has been changed. Empty property values are not stored in database. Remove propertyHasValue(), notEmpty(), unique() methods from PropertyValueCollection class. Add code(), getByCode() methods to PropertyCollection class. Add PropertySetCollection, PropertySetItem classes.

Jul 11, 2018

1.2.0

Refactoring *Event, *Model, *Item, *Collection classes. Requires Toolbox plugin version 1.10.0 and later.

Jun 21, 2018

1.1.2

Fixed bug in the PropertyCollection::group method, if the property is not attached to any group

Mar 10, 2018

1.1.1

Added check for isNested flag when expanding forms

Feb 23, 2018

1.1.0

Add "settings" field to PropertyItem class object

Feb 05, 2018

1.0.1

!!! Adding additional cache cleaning for the sorted list of properties and groups, after the creation of a new element. Requires Toolbox plugin version 1.3.0 and later.

Jan 08, 2018

1.0.0

Initialize plugin.

Dec 06, 2017