Starting from JBZoo v2.0, it is recommended to use JBPrice Advance element when making product catalogues. You can read about reasons why this new element was created in the official release notes.
In short, new element allows you to:
- Specify a discount for a product
- Create price "variations" (modifications)
- Take into account products in stock
- Take into account "News" flag
- Flexible currencies management
- Item SKU which can be used during the import
- Filter by almost all element attributes
- ... and a lot of other nice stuff
We'll try to tell you about main settings, nuances, small tips etc.
Before you start to use it...
Make sure that "JBPrice Advance" option in the cart settings is enabled. This option is added for a backward compatibility with an old price variant. The new price element has more complicated structure that is not compatible with the old one. That's why we had to add this option. Otherwise, you'll have problems with adding products to a cart or with an order processing.
- Default currency - a currency that is used by default when saving new values (including imported). Price value which is used for the search index is saved in this currency.
- Additional currency - list of currencies which can be used for prices. It is made for your convenience in case you have an international store or you don't want to convert currencies yourself.
- Consider a balance - if this option is disabled, then you can only set the simplest option for the availability of a product (yes/no). Enabled option allows you to specify a positive value, zero or infinity ("-1"). When an order is made, the amount of purchased products will be subtracted from this value and a user will be unable to order more products than there are in the stock.
- Mode - element has two main modes - simple and advanced. Advanced one allows to add price variations and options (more information about variations is below).
- Show all options - If set to "No", it will display only those variations which are set for a current item.
- Show null values - If set to "Yes", it will show variations with an empty prices.
- Edit extra fields - if you use an advanced mode then you can use fields from this product type as additional price parameters. In this case it's not always logically to use these fields both as the price parameters and as an item properties. This option will hide these fields from an item editing form.
- Extra fields - these fields are used only in the advanced mode. Elements with a strict options list (radio, checkbox, select) will be used as additional price parameters.
- Custom description - enables custom text description for a price. This description can also be used as an order parameter like the previous ones.
Attention! After any changes of settings it is recommended to make a manual re-index of your website. Usually indexing is made automatically (incremental) during item saving. But in case of saving settings it's not possible to update the data for the whole website because it will take a lot of time and most likely this process will be beyond your hosting limits. Otherwise, filter may work incorrectly.
Editing JBPrice Advance element
The set of fields that you see when editing price depends on a lot of settings. You can see an example with 2 variants and with a full options list on the screenshot.
Main product information
- Base price - it is a default item price. It is use as a base price, all other price variations are related to it. By default it will use a currency from the element settings. You can also select a different currency from the list.
- Total discount/margin - additional offset for all prices of an item.
Discount - If you set a negative amount in this field, it will be subtracted from the calculated price. You can set a discount in percentages or in a specific currency. "SALE" flag will be added automatically.
Margin - Specified value will be added to the item price. This value should be positive. If you set "0" then this option will not be used.
- Stock - if an option for taking in account stock is enabled, you will see a text field that is used to precisely specify the quantity of products in stock.
"-1" (minus one) - Product is treated like infinite, so it can be ordered endlessly in any quantities.
"0" (zero) - Product can't be ordered because it's not in stock.
"10" (any positive value) - Precise number. When an order is made, an amount of ordered products will be subtracted from this number until it reaches zero. It's not possible to order more than this limit.
- SKU - (serial number, unique item name, alias, identifier etc.) is a value that is usually used in an external database of the store in order to work with products. You can use it as a key for an import/export.
- Description - any text description. It is displayed as a grey line near the price.
- New - a flag indicating that this item is "New". This option allows to search an item by this attribute and adds a "NEW" badge in the template.
attributes for product variations
- SKU - additional SKU for the current item variation. It is the same as a base one by default.
- Price - Allows you to specify custom price for the current item variation. The value can be set using several methods:
50EUR - Precise value in euros.
+50EUR or +50% - will add 50 euros or 50% to the base price. Currencies are converted automatically so you can even add dollars to euros.
-50EUR or - 50% - will subtract 50 euros or 50% from the base price.
0EUR or 0% - a free product.
- Stock - Same rules as in the main settings.
- Parameters for the current variation - a unique set of parameters.
Price variations (same as modifications, prices with parameters)
This attribute needs more explanation in order to scatter some doubts and to suggest a correct course of website development.
Let's assume that our store sells mobile phones.
- Each model has two important attributes - memory size and a case color.
- A color doesn't change a price but it is as important for a customer as a memory size.
- Memory is a discrete value, that is, it has a precise list (2GB, 4GB, 8GB, 16GB, 32GB etc.).
- Color names are usually arbitrary and it will be hard to organize into a precise list.
Let's create a new field in the item configuration. It will hold all memory values.
Then we should accordingly configure the price element.
Prices of our phone will look like this in the control panel:
So the default variant is a white with 1GB. If memory is increased to 2GB, price goes up by 50 euros, or by 200 euros for a 4GB. At the same time, the color doesn't affect prices.
If you looked carefully, you noticed that this phone model has a 20% discount and it is new.
So the final price for a blue phone with 4GB will be calculated like this:
(1000 + 200) - 20% = 960 euros.
But if we'll try to buy it, it will be out of stock.
Every other product variations will be available for a base price.
Important notes regarding price variation system.
You should understand that despite having a lot of settings and their flexibility, the price element is limited in its functionality.
As we can see from the above example, in order to use 5 colors and 6 variants and to specify a different price for each set, 30 variations should be added. It is not convenient, especially if the store is managed manually. On the other hand, such examples are not very common in a real store.
But if you still need to have all variations in a single product then
- Think carefully - are you doing everything right? Maybe it would be better to separate this product into several products. For example, in case of our phones, memory variations could be different products and a colors could be price variation. Or vice versa.
- Maybe it will suit you to combine several products into one using "Related Items" element. You can automatically fill it using an import.
- We recommend using an import.
Ordering by price in a category
Despite there are no native option to sort by price, you can use the ordering from the ZOO. It works well in most of the cases. But you should keep in mind one special thing regarding prices.
Sorting works on the level of SQL queries to the index table of ZOO (not JBZoo). This index table stores data in text format. That's why sometimes numbers are not sorted properly - they are treated as a text.
But still, there is a way to improve this situation. You should try to use an "Alphanumeric sorting" option. It will change sorting for some data types. In many cases it will work as you need.
Configuring price filter
There is no need to describe every option, most of them are self-explanatory. We'll only look through the most interesting ones.
- Consider value of the price - price index stores both values (with and without a discount). You can choose which will be used for a search.
- Price type - Which price should be used for a search. In some cases it's easier to search only by base price because variations could have a huge price range.
- Default currency - chosen price values will be treated considering this currency. If a currency of a filter is different from a currency of an item, it will be converted automatically. But you should keep in mind that the calculations will use the one from the element settings according to the current rate of exchange.
- Automatically set the min / max - Maximum and minimum values of a slider will be set automatically using an index. This option will consider a currency and price types from the filter settings.