Instrucciones para trabajar con la plataforma BooStore.pro

Atrás
You can find tips on working with the system when expanding sections for management, as well as when hovering over the icon

Briefly About the Platform

For Entrepreneurs and Sellers

For Entrepreneurs and Sellers

On the BooStore.pro platform, you can create a website or online store for free, customize its design, and fill it with unique content (full HTML support). You can upload files and use many built-in modules for your convenience. You will have your own sales statistics, order source tracking, A/B testing, your own delivery methods, the ability to create a search filter (like on Yandex Market) for different product groups, create your own categories and manufacturer categories, run your own blog and news feed, build an e-mail subscriber base, import/export products and services, add managers to your site (shared access), create a customer database with individual discounts, use payment systems, export data from the site in XML format, create your own forms (Form), enable automatic data exchange with ERP, trading programs and much, much more...

For Entrepreneurs and Sellers

  • After registering your store, you can add up to 300 products for free, and you can expand the product limit. (The limit can be increased to 1000 products for free)
  • In the product properties, you can specify its price, payment currency, warranty period, warranty responsible party, detailed description, product image, manufacturer, tabs with additional options, individual product characteristics, and more.
    • On BooStore.pro you can independently design your company website or online store
    • You can create your own menus and the required number of pages.
    • You can adjust and change the design of your website.
    • You can embed HTML code on your site
    • You can run blogs and news feeds, and broadcast RSS feeds.
    • You can upload your files, track orders, and communicate with customers directly on the site.

  • The company/user who posted the product is solely responsible for the content of descriptions, prices, product availability, and the accuracy of the information provided.
  • It is forbidden to add products and services that violate the laws of your country.

Site Management

Admin Center / Admin Panel

Site administration is performed in the Admin Center (Open Admin Center) or through the Admin Panel located on the left after logging in to the site.

Administrator Login

Login path for site administrator:
boostore.pro/admin/
If you hide the login menu on the site, the administrator can log in by entering the path above in the address bar.
Example of creating a link for user authentication

Shared Access

To allow another user to manage the site, you need to add a Manager and set permissions.

Main Modules

Data Types / Pages

📄

Pages

System Block

Page — a block located in the center of the site, in the content area, which can contain any HTML data (HTML, XHTML, JAVASCRIPT, CSS or others).



Ajax page content loading

Ajax page content loading



A link with class ajax_load_page will open Ajax content inside the block specified in the data-content-block attribute.
The path to the page being loaded is set in the href parameter.
The page path can be relative or full, with http.
You can also use your own scripts by passing a GET or POST parameter p, with the name
(or full address) of the page, to /ajax.php

In addition, direct requests without using Ajax are also possible.
For example, to load data in an iframe. The path is the same as when using Ajax.

Script for loading data in a popup window:
Popup script with Ajax content loading


📰

Article Catalog

Content Module

Article Catalog — a block similar to pages, which additionally has brief descriptions displayed as a list with a link to view the full text, as well as the ability to split lists by categories.

Article lists can be displayed not only within categories, but you can also generate your own lists.
Ajax article content loading

Ajax article content loading



A link with class ajax_load_blog will open Ajax content inside the block specified in the data-content-block attribute.
The path to the page being loaded is set in the href parameter.
The page path can be relative or full, with http.
You can also use your own scripts by passing a GET or POST parameter blog_cat_p, with the full address
of the article, to /ajax.php

In addition, direct requests without using Ajax are also possible.
For example, to load data in an iframe. The path is the same as when using Ajax.

Script for loading data in a popup window:
Popup script with Ajax content loading

Example Ajax script for loading a custom article list

Example Ajax article loading in JSON format


📐

Block / Menu

Layout Module

Block/Menu — a universal container for any HTML code and system functions (cart, filter, bestsellers). Allows you to form the site structure, place scripts in meta-tags and manage their visibility on different devices.

Use Header and Footer for common design elements (logo, contacts), and side or inner blocks for content modules and scripts.
Placement positions:
  • Site Header (Header): inside the #hotengine-header element, above the content.
  • Site Footer (Footer): inside the #hotengine-footer element, below the content.
  • Left / Right: side panels next to the main content block.
  • Top / Bottom: inside the content area, at the top or bottom.
  • Top > cat_tree: position right below the category tree.
  • Service Tags (Header Meta): under Meta-tags for inserting JavaScript and system data.
All menus automatically get a position CSS class and a unique menu_id.

📋 Basic site block layout

For an advanced mobile menu, use the Mobile Menu Constructor.

Example of using blocks and menus

🛒

Store

E-commerce Module

Store — a module for organizing a product catalog with ordering functionality. Supports segmentation by manufacturers, categories, types and characteristics.

Product Widget

Lists can be embedded into pages, blocks or articles via the Slider Generator. Example of product widget

Category Widgets

Display the section structure anywhere on the site using the Category Widget.



Adding products


Ajax product loading

Ajax product loading



A link with class ajax_load_shop will open Ajax content inside the block specified in the data-content-block attribute.
The path to the page being loaded is set in the href parameter.
The page path can be relative or full, with http.
You can also use your own scripts by passing a GET or POST parameter shop_cat_p, with the full address
of the product, to /ajax.php

In addition, direct requests without using Ajax are also possible.
For example, to load data in an iframe. The path is the same as when using Ajax.
Add-to-cart scripts need to be loaded additionally if you are using an iframe.

Script for loading data in a popup window:
Popup script with Ajax content loading

Ajax loading reviews for products

Example Ajax script for loading product list + «Product List Generator»

Ajax cart loading

Ajax cart loading



A link with class ajax_load_cart will open Ajax content inside the block specified in the data-content-block attribute.
To load the cart, simply make a request to the page «/ajax.php?cart&load_cart_ajax»


Example Ajax script for loading cart on mouse hover

Ajax loading of product card image list

Ajax loading all categories list in JSON format

Ajax loading all categories list in JSON format

To get a list of all store categories, simply make a request to /ajax.php?json&shop_categories&start=0&param=:products

Where
  • &start= - ID of the category to start displaying from.
  • &param= parameters that can be obtained in the Categories Widget (optional parameter)
  • The request only works with your domain specified, e.g. http://example.com/ajax.php?json&shop_categories&start=0

Example result: {"id":"Category ID","parentID":"Parent category ID","child_cat":"Number of nested categories","child_items":"Number of products in category","image":"Category image path","title":"Category name"},

Ajax product loading in JSON format

Ajax product loading in JSON format

To get product card data in JSON format, simply make a request to /ajax.php?json&shop_products&id=0

When exporting products, you can specify sorting and filtering parameters:
  • id - Product card ID (one or more values, comma-separated).
  • pers_shop_cat_page_catid - Store category ID (one or more values, comma-separated)
  • producer – manufacturer (one or more values, comma-separated)
  • collection - collection (one or more values, comma-separated)
  • sort_by – sorting
  • order_by – sorting
  • sort_instock_priority – sort priority
  • price_from – price from
  • price_to – price to
  • stock - stock availability

The request only works with your domain specified, e.g. http://example.com/ajax.php?json&shop_products&id=0


Category and navigation menu setup demo

Form

📝

Forms

Data Capture Module

Form — a document section that allows the user to enter information for subsequent processing by the system. On the BooStore.pro platform, you can create full-featured forms, with binding of names, ids and classes for fields. Form data can be processed on our platform or sent to any other resource.

Flexible configuration

Binding unique names and identifiers for each form field.

Data processing

Ability to process locally in the system or send to external resources.



Example of creating and placing a form

Ajax form loading (popup forms)

3 ways to create a form:
1 Form Builder (Most flexible)

Open the form builder and create a structure by setting the required fields. All instructions are available inside the module.

2 Functional page

Create a page of type feedback. When opened, a standard feedback form will be displayed.

3 Popup form (via code)
HTML
<a class="hotengine-dialog-email" data-site="XXXX" href="javascript://">Write to us</a>
class="hotengine-dialog-email" — opens the window. data-site="XXXX" — your site ID (specified in the admin panel).
Additionally you can use: data-title (title), data-close-button (close text), data-width and data-height.
Example of field styling (CSS)

Changing field labels for different languages via pseudo-elements:

CSS

:lang(ru) .hotengine-form-feedback-text-title:after{ content:"Text:"; } :lang(en) .hotengine-form-feedback-text-title:after{ content:"Text:"; } :lang(uk) .hotengine-form-feedback-text-title:after{ content:"Text:"; } :lang(de) .hotengine-form-feedback-text-title:after{ content:"Text:"; } :lang(es) .hotengine-form-feedback-text-title:after{ content:"Texto:"; } :lang(fr) .hotengine-form-feedback-text-title:after{ content:"Texte:"; } :lang(kk) .hotengine-form-feedback-text-title:after{ content:"Text:"; } :lang(be) .hotengine-form-feedback-text-title:after{ content:"Text:"; } :lang(ro) .hotengine-form-feedback-text-title:after{ content:"Text:"; } :lang(tr) .hotengine-form-feedback-text-title:after{ content:"Metin:"; } :lang(it) .hotengine-form-feedback-text-title:after{ content:"Testo:"; } :lang(sk) .hotengine-form-feedback-text-title:after{ content:"Text:"; } :lang(da) .hotengine-form-feedback-text-title:after{ content:"Tekst:"; } :lang(pl) .hotengine-form-feedback-text-title:after{ content:"Tekst:"; } :lang(zh) .hotengine-form-feedback-text-title:after{ content:"文本:"; } :lang(hi) .hotengine-form-feedback-text-title:after{ content:"पाठ:"; } :lang(ar) .hotengine-form-feedback-text-title:after{ content:"النص:"; } :lang(pt) .hotengine-form-feedback-text-title:after{ content:"Texto:"; } :lang(bn) .hotengine-form-feedback-text-title:after{ content:"টেক্সট:"; }

:lang(ru) .hotengine-form-feedback-yourname-title:after{ content:"Your name:"; } :lang(en) .hotengine-form-feedback-yourname-title:after{ content:"Your name:"; } :lang(uk) .hotengine-form-feedback-yourname-title:after{ content:"Your name:"; } :lang(de) .hotengine-form-feedback-yourname-title:after{ content:"Ihr name:"; } :lang(es) .hotengine-form-feedback-yourname-title:after{ content:"Su nombre:"; } :lang(fr) .hotengine-form-feedback-yourname-title:after{ content:"Votre nom:"; } :lang(kk) .hotengine-form-feedback-yourname-title:after{ content:"Your name:"; } :lang(be) .hotengine-form-feedback-yourname-title:after{ content:"Your name:"; } :lang(ro) .hotengine-form-feedback-yourname-title:after{ content:"Numele dvs.:"; } :lang(tr) .hotengine-form-feedback-yourname-title:after{ content:"Adınız:"; } :lang(it) .hotengine-form-feedback-yourname-title:after{ content:"Il tuo nome:"; } :lang(sk) .hotengine-form-feedback-yourname-title:after{ content:"Vaše meno:"; } :lang(da) .hotengine-form-feedback-yourname-title:after{ content:"Dit navn:"; } :lang(pl) .hotengine-form-feedback-yourname-title:after{ content:"Twoje imię:"; } :lang(zh) .hotengine-form-feedback-yourname-title:after{ content:"你的名称:"; } :lang(hi) .hotengine-form-feedback-yourname-title:after{ content:"आपका नाम:"; } :lang(ar) .hotengine-form-feedback-yourname-title:after{ content:"اسمك:"; } :lang(pt) .hotengine-form-feedback-yourname-title:after{ content:"Seu nome:"; } :lang(bn) .hotengine-form-feedback-yourname-title:after{ content:"আপনার নাম:"; }

:lang(ru) .hotengine-form-feedback-yoursoname-title:after{ content:"Your surname:"; } :lang(en) .hotengine-form-feedback-yoursoname-title:after{ content:"Your name:"; } :lang(uk) .hotengine-form-feedback-yoursoname-title:after{ content:"Your surname:"; } :lang(de) .hotengine-form-feedback-yoursoname-title:after{ content:"Ihr name:"; } :lang(es) .hotengine-form-feedback-yoursoname-title:after{ content:"Su nombre:"; } :lang(fr) .hotengine-form-feedback-yoursoname-title:after{ content:"Votre nom:"; } :lang(kk) .hotengine-form-feedback-yoursoname-title:after{ content:"Your surname:"; } :lang(be) .hotengine-form-feedback-yoursoname-title:after{ content:"Your surname:"; } :lang(ro) .hotengine-form-feedback-yoursoname-title:after{ content:"Numele dumneavoastră:"; } :lang(tr) .hotengine-form-feedback-yoursoname-title:after{ content:"Adınız:"; } :lang(it) .hotengine-form-feedback-yoursoname-title:after{ content:"Il tuo nome:"; } :lang(sk) .hotengine-form-feedback-yoursoname-title:after{ content:"Vaše meno:"; } :lang(da) .hotengine-form-feedback-yoursoname-title:after{ content:"Dit navn:"; } :lang(pl) .hotengine-form-feedback-yoursoname-title:after{ content:"Imię i nazwisko:"; } :lang(zh) .hotengine-form-feedback-yoursoname-title:after{ content:"你的名称:"; } :lang(hi) .hotengine-form-feedback-yoursoname-title:after{ content:"你的名字:"; } :lang(ar) .hotengine-form-feedback-yoursoname-title:after{ content:"你的名字:"; } :lang(pt) .hotengine-form-feedback-yoursoname-title:after{ content:"O seu apelido:"; } :lang(bn) .hotengine-form-feedback-yoursoname-title:after{ content:"আপনার নাম:"; }

:lang(ru) .hotengine-form-feedback-yourphone-title:after{ content:"Your phone:"; } :lang(en) .hotengine-form-feedback-yourphone-title:after{ content:"Your phone:"; } :lang(uk) .hotengine-form-feedback-yourphone-title:after{ content:"Your phone:"; } :lang(de) .hotengine-form-feedback-yourphone-title:after{ content:"Ihr Telefon:"; } :lang(es) .hotengine-form-feedback-yourphone-title:after{ content:"Su teléfono:"; } :lang(fr) .hotengine-form-feedback-yourphone-title:after{ content:"Votre téléphone:"; } :lang(kk) .hotengine-form-feedback-yourphone-title:after{ content:"Phone:"; } :lang(be) .hotengine-form-feedback-yourphone-title:after{ content:"Your phone:"; } :lang(ro) .hotengine-form-feedback-yourphone-title:after{ content:"Telefonul dvs.:"; } :lang(tr) .hotengine-form-feedback-yourphone-title:after{ content:"Telefon:"; } :lang(it) .hotengine-form-feedback-yourphone-title:after{ content:"Il telefono:"; } :lang(sk) .hotengine-form-feedback-yourphone-title:after{ content:"Váš telefón:"; } :lang(da) .hotengine-form-feedback-yourphone-title:after{ content:"Din telefon:"; } :lang(pl) .hotengine-form-feedback-yourphone-title:after{ content:"Telefon:"; } :lang(zh) .hotengine-form-feedback-yourphone-title:after{ content:"你的电话:"; } :lang(hi) .hotengine-form-feedback-yourphone-title:after{ content:"अपने फोन:"; } :lang(ar) .hotengine-form-feedback-yourphone-title:after{ content:"الهاتف:"; } :lang(pt) .hotengine-form-feedback-yourphone-title:after{ content:"Seu telefone:"; } :lang(bn) .hotengine-form-feedback-yourphone-title:after{ content:"আপনার ফোন:"; }

:lang(ru) .hotengine-form-feedback-youremail-title:after{ content:"Your e-mail:"; } :lang(en) .hotengine-form-feedback-youremail-title:after{ content:"Your e-mail:"; } :lang(uk) .hotengine-form-feedback-youremail-title:after{ content:"Your e-mail:"; } :lang(de) .hotengine-form-feedback-youremail-title:after{ content:"Ihre e-mail:"; } :lang(es) .hotengine-form-feedback-youremail-title:after{ content:"Su e-mail:"; } :lang(fr) .hotengine-form-feedback-youremail-title:after{ content:"Votre e-mail:"; } :lang(kk) .hotengine-form-feedback-youremail-title:after{ content:"Your e-mail:"; } :lang(be) .hotengine-form-feedback-youremail-title:after{ content:"Your e-mail:"; } :lang(ro) .hotengine-form-feedback-youremail-title:after{ content:"Adresa de e-mail:"; } :lang(tr) .hotengine-form-feedback-youremail-title:after{ content:"E-mail:"; } :lang(it) .hotengine-form-feedback-youremail-title:after{ content:"Il tuo indirizzo e-mail:"; } :lang(sk) .hotengine-form-feedback-youremail-title:after{ content:"E-mail:"; } :lang(da) .hotengine-form-feedback-youremail-title:after{ content:"Din e-mail:"; } :lang(pl) .hotengine-form-feedback-youremail-title:after{ content:"Twój e-mail:"; } :lang(zh) .hotengine-form-feedback-youremail-title:after{ content:"你的电子邮件:"; } :lang(hi) .hotengine-form-feedback-youremail-title:after{ content:"अपने ई-मेल:"; } :lang(ar) .hotengine-form-feedback-youremail-title:after{ content:"البريد الإلكتروني:"; } :lang(pt) .hotengine-form-feedback-youremail-title:after{ content:"Seu e-mail:"; } :lang(bn) .hotengine-form-feedback-youremail-title:after{ content:"আপনার ই-মেইল:"; }

:lang(ru) .hotengine-form-feedback-youraddress-title:after{ content:"Your address:"; } :lang(en) .hotengine-form-feedback-youraddress-title:after{ content:"Your address:"; } :lang(uk) .hotengine-form-feedback-youraddress-title:after{ content:"Your address:"; } :lang(de) .hotengine-form-feedback-youraddress-title:after{ content:"Ihre Adresse:"; } :lang(es) .hotengine-form-feedback-youraddress-title:after{ content:"Su dirección:"; } :lang(fr) .hotengine-form-feedback-youraddress-title:after{ content:"Votre adresse:"; } :lang(kk) .hotengine-form-feedback-youraddress-title:after{ content:"Your address:"; } :lang(be) .hotengine-form-feedback-youraddress-title:after{ content:"Your address:"; } :lang(ro) .hotengine-form-feedback-youraddress-title:after{ content:"Adresa:"; } :lang(tr) .hotengine-form-feedback-youraddress-title:after{ content:"Adresi:"; } :lang(it) .hotengine-form-feedback-youraddress-title:after{ content:"Indirizzo:"; } :lang(sk) .hotengine-form-feedback-youraddress-title:after{ content:"Adresa:"; } :lang(da) .hotengine-form-feedback-youraddress-title:after{ content:"Din adresse:"; } :lang(pl) .hotengine-form-feedback-youraddress-title:after{ content:"Adres:"; } :lang(zh) .hotengine-form-feedback-youraddress-title:after{ content:"你的地址:"; } :lang(hi) .hotengine-form-feedback-youraddress-title:after{ content:"你的地址:"; } :lang(ar) .hotengine-form-feedback-youraddress-title:after{ content:"你的地址:"; } :lang(pt) .hotengine-form-feedback-youraddress-title:after{ content:"O seu endereço:"; } :lang(bn) .hotengine-form-feedback-youraddress-title:after{ content:"আপনার ঠিকানা:"; }

/*FORM TEXT TITTLES*/

Note! The site provides the ability to create custom forms automatically, as well as use popup windows to send necessary visitor data. To do this, use the Form Builder.

Comments / Reviews

💬

Comments and Reviews

Social & Feedback Module

The system allows leaving comments on all page types. Flexible section binding settings, rating system and Captcha protection are supported. For products, a specialized form — Reviews — is provided.

Ratings

Ability to enable star rating for visual feedback.

🔒 Protection

Built-in verification via security image to prevent spam.



Ajax comment loading

Ajax comment loading



An element with class "ajax_load_comments" will open Ajax content inside the block specified in the data-content-block attribute.
The ID of the page being loaded is set in the data-page-id parameter. Additionally, you can filter comments by rating by passing the starrating_quality variable, e.g. starrating_quality=5.

4 parameters are used for comments:
  • hotengine_comments_hotengine_page_id - Page ID.
  • nc - comment page number.
  • snc_on_page - number of comments per page (from 1 to 50).
  • hotengine_comments_page_type - page type.

Available page types (required parameter):
  • page - pages
  • shop_category - store categories
  • shop_collection - store collections
  • shop_producer - manufacturers
  • blog_category - article catalog category
  • blog_page - article


You can use your own scripts by passing GET or POST parameters hotengine_comments_hotengine_page_id and hotengine_comments_page_type, to /ajax.php. nc - comment page number, snc_on_page - number of comments per page.

To get data in JSON format, simply add the GET/POST variable json.

Ajax product reviews loading

Ajax product reviews loading



A link with class ajax_load_shop_comments will open Ajax content inside the block specified in the data-content-block attribute.
The path to the page being loaded is set in the href parameter.

Three parameters are used for reviews:
hotengine_shop_comments_shop_cat_page_id - Product ID.
nc - review page number.
snc_on_page - number of reviews per page (from 1 to 50).
The page path can be relative or full, with http. The path should be either the path to the product, or you can directly specify the product ID whose reviews you want to load.
You can also use your own scripts by passing a GET or POST parameter hotengine_shop_comments_shop_cat_page_id, with the full address
of the product (or product ID), to /ajax.php. nc - page number, snc_on_page - number of reviews per page. Additionally, you can filter reviews by rating by passing the starrating_quality variable, e.g. starrating_quality=5.

In addition, direct requests without using Ajax are also possible.
For example, to load data in an iframe. The path is the same as when using Ajax.
Add-to-cart scripts need to be loaded additionally if you are using an iframe.

Script for loading data in a popup window:
Popup script with Ajax content loading
To get data in JSON format, simply add the GET/POST variable json.
Comments can be configured for each section individually or in the general site settings. Configuration is available for store categories, manufacturers, collections, as well as for pages, product cards or articles.

Multilanding / Dynamic Pages

🎯

Multilanding / Dynamic Pages

Dynamic Content Module

Multilanding — a technology for automatically changing page content depending on the visitor's search query, advertising variables (UTM) or their location.

🔄 Flexible substitution

When a query matches, the system changes the content of entire blocks on pages, products or menu items.

📊 Data sources

Search phrases or GET variables such as utm_term in advertisements are used.

How to use Multilanding?

You configure substitution rules so that when a keyword partially or completely matches, the visitor sees the most relevant content. For example, if the URL contains utm_term=buy_laptop, the title and banner on the page can automatically change to match this query.

Data retention periods:
• Information about a regular traffic source is stored for 24 hours.
• Data about affiliate program transitions is stored for 120 days.
Individual Multilanding settings can significantly increase advertising traffic conversion by precisely matching user expectations.

Example of working with Block/Menu

📑

Working with Blocks and Menus

Layout & Meta Module

The Blocks/Menus tool allows you to flexibly manage the site structure, from confirming ownership in search engines to creating unique design elements.

Verification

Adding <meta> tags for Google Search Console, Yandex.Webmaster and other services.

Customization

Creating your own Header and Footer of the site using any HTML code.

Example of site verification:

  1. Create a new Block/Menu in the control panel.
  2. Insert the <meta> code provided by the service into the content field.
  3. In the display settings, select the location in service tags (head).
Automatic optimization: You can insert JavaScript and CSS directly into blocks. The system will intelligently process them and convert them into separate files to speed up page loading.

Example of using categories and manufacturers (additional categories) together

📦

Categories and Manufacturers

Store Structure Module

For each product, you can set a main Category (personal category) and a Manufacturer (additional category). This allows one product to be in different lists simultaneously: for example, a Samsung phone will be available both in the "Smartphones" section and in the "Samsung" section.

💡 Name flexibility

The "Manufacturer" category can be renamed to any word that suits you.

📌 Recommendation

It is recommended to name the first parent category "Store".

Creating a main category:

1. Open the store category editor.
2. Click "Add category", select the site and confirm.
3. Enter the system name (URL). For example, for the "Store" group, specify store.

Managing the Manufacturers (additional categories) section works the same way.

URL filtering:
To show products of a specific category and a specific manufacturer, add the GET variable producer (ID or name).
Example: /pers_shop/water/?producer=bonaqua — will display products from the "water" category of the "bonaqua" brand only.

Widgets

🧱

Widgets and ShortCodes

Interactive UI Module

A "Widget" is an interactive data block for placement on a site. A widget can be generated using a special short code ("ShortCode"), which can contain additional parameters. The resulting code can be inserted directly into the page text or into "Blocks/Menus".

Widget configuration is done in a special interactive control block. You can configure the appearance and behavior of the element in detail before getting the ready code for insertion.

Dynamic

Content in widgets updates automatically when data in the database changes (new products, articles).

📋 Versatility

The same ShortCode can be used in different parts of the site, maintaining style consistency.

Widget generators:

📁 Store Categories

Generate a list or grid of your categories.

📦 Store Products

Product sliders or grids with filters.

🏭 Manufacturers

Display brand logos and names.

📝 Articles and News

Widget for displaying recent publications.

How it works: Go to the required generator, configure the appearance and copy the resulting code like [MENU:...]. Insert it anywhere on the site where the block should appear.


Site Search


Search is performed after submitting the form with the "search" variable. The data type for the search is set using the path (page) to which the form is submitted. To search the "Product Catalog", the submission must be made to the "/shop/" page.

How to add a search form to the Site Header?

In the Block/Menu located in the Site Header, you can add the following code:

Code: html
<div align="center" id="hotengine-search_form_block" itemscope itemtype="https://schema.org/WebSite">
<link itemprop="url" href="//{HOTENGINE-SC:site_url}/"/>
<form id="hotengine-search-searchinput" name="hotengine-search-searchinput" method="post" action="/en/shop/" itemprop="potentialAction" itemscope itemtype="https://schema.org/SearchAction">
<meta itemprop="target" content="//{HOTENGINE-SC:site_url}/es/shop/?search={search}"/>
<label>
<input class="input" name="search" type="text" placeholder="Search..." id="hotengine-smart_search_input" value="" itemprop="query-input">
</label>
<label>
<button type="submit" class="search-button">Search</button>
</label></form>
</div>


The code immediately includes Microformats for Google. The form submission path (//{HOTENGINE-SC:site_url}/es/shop/?search={search}) specifies the es language, you can change it.

Example:


CSS style of the block, with replacing the submit button with an image:

Code: Css
#hotengine-search_form_block{
position: relative;
width:300px;
float: right;
z-index:2;
height: 41px;
margin:33px 0px 33px 10px;
}

#hotengine-search_form_block input{   
height: 20px;
vertical-align: middle;
border: 1px solid #e5e5e5;
padding: 0.15em;
width: 20.0em;
color:#9c9b9b;
height: 20px;
background: #fff;
padding: 0 13px;
height: 41px;
}
#hotengine-search_form_block input[type="text"]{
text-indent:4px;height: 39px;
}
#hotengine-search_form_block .search-button{
background:#41474c;
border-radius:0px;
vertical-align:middle;
display:block;
position:absolute;
top:0px;
right:0px;
border:none;
color:#fff;
width:41px; height:41px;
text-align:center;
font-size:12px;
line-height:25px; 
cursor:pointer; overflow:hidden; 
}
#hotengine-search_form_block .search-button:after{
content:""; width:41px; height:41px; display:block; position: absolute; right:0px; top:0px; 
background:none; background-color:#d6d6d6;
-webkit-mask:url("data:image/svg+xml;base64,PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KDTwhLS0gVXBsb2FkZWQgdG86IFNWRyBSZXBvLCB3d3cuc3ZncmVwby5jb20sIFRyYW5zZm9ybWVkIGJ5OiBTVkcgUmVwbyBNaXhlciBUb29scyAtLT4KPHN2ZyB3aWR0aD0iODAwcHgiIGhlaWdodD0iODAwcHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBmaWxsPSJub25lIj4KDTxnIGlkPSJTVkdSZXBvX2JnQ2FycmllciIgc3Ryb2tlLXdpZHRoPSIwIi8+Cg08ZyBpZD0iU1ZHUmVwb190cmFjZXJDYXJyaWVyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KDTxnIGlkPSJTVkdSZXBvX2ljb25DYXJyaWVyIj4KDTxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTcuMjUgMmE1LjI1IDUuMjUgMCAxMDMuMTQ0IDkuNDU1bDIuMzI2IDIuMzI1YS43NS43NSAwIDEwMS4wNi0xLjA2bC0yLjMyNS0yLjMyNkE1LjI1IDUuMjUgMCAwMDcuMjUgMnpNMy41IDcuMjVhMy43NSAzLjc1IDAgMTE3LjUgMCAzLjc1IDMuNzUgMCAwMS03LjUgMHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgoNPC9nPgoNPC9zdmc+") center center no-repeat; 
-webkit-mask-size:20px;
}
#hotengine-search_form_block .search-button:hover:after{
	background-color:#fff;
}
#hotengine-search_form_block .search-button:active:after{transform: translateY(1px);}

If you replace the path /shop/ with /blog/, the search will be performed in the article catalog.
Overwriting the value of the input name="search" field happens automatically.




Search Filter and Product Types (Product Attributes).

In product cards you can specify attributes that will be additionally displayed in the product description, and which will also be used for searching. To do this, first create a "Product Type".

Creating Product Type and Product Attributes

For example:
Create a "Product Type" - "Sneakers".
"Attribute" - specify several fields, "Multiple choice (Checkbox)" with names: "Color", "Purpose", "Manufacturer".
After saving field names, on the right you will be able to fill in possible options.
Create values.
Color: White, Red, Green.
Purpose: Running, Basketball, Football.
Manufacturer: Adidas, Asics, Nike

Now in the product card on the "Parameters and Attributes" tab, specify the "Product Type" and set the appropriate values.


Creating a search filter for categories.


If you need to create a search filter, in the "My blocks/menu" section, create a "Functional menu" - "Search with Product Type Filter".
This block will be displayed everywhere you enable its display.
To automatically expand the required product type in a specific category, specify the ID of the corresponding product type in the "Functional block/menu" text, and also add the text "autopath" so that when performing a search, it is performed on the same page rather than going to the general site search.
For example, if the ID of a previously created product type was 1123, then the Block/Menu text will be "1123autopath".
Now specify the path on which to display the block/menu with the search filter
"Enter characters upon detection of which to display the Block/Menu:"
/category_name/
Where category_name is the category name, the path where it is located.
To hide the Search filter when viewing a product card, in the "Enter characters upon detection of which NOT to display the Block/Menu:" field, enter
.htm


Search filter example:

To hide the search field above the Product Type, in the Design Editor, in CSS styles, add ".menu_position_left .hotengine-smart_search_input_label { display: none;}"

To hide the Product Type selection search field, in the Design Editor, in CSS styles, add ".menu_position_left .shop_catalog_product_types_id_label { display: none;}"

.menu_position_left - means we are hiding fields in the Left block of the site.


To display the number of products with the specified parameter, you can use the parameter ("count") when creating a Functional Block/Menu with a search filter.
To hide undetected attributes - "hideempty" (described in detail on the Functional Block/Menu creation page).
To display the search filter values selected by the visitor at the top of the page, you can use the parameter "checkedlist". This function can also be activated in the "Mobile menu: Application" section on the "Search filter" tab. It will simplify user access to the selected values for search, which is especially convenient when viewing the site on mobile devices or screens with low resolution. It is enough to enable the function once - either using the "checkedlist" parameter in the "My blocks/Menu" - "Search filter" section, or in the "Mobile menu: Application" section, in the "Search filter" tab.
Demo:
Value1 ×
Value2 ×
Demo 2:
Value 3 ×
Value4 ×

Creating automatic descriptions.

When using product types and attributes, you can create articles and use them to add to product cards. Descriptions will be added depending on the attributes or categories set for the product. Management and detailed instructions are available on the "Store" - "Automatic Descriptions" page.

Inserting a search filter on a regular page.

If you need to place a block with a search filter inside the page text (description, article, content page, etc.), use the following shortcode:
{HOTENGINE-SC:smart_search_widget:PARAM}

Instead of PARAM, specify the parameters that control the operation and display of the filter.

Available shortcode parameters


  • autopath — automatic substitution of the search query submission path
  • checkedlist — add the list of selected filter values at the top of the page
  • hide_input — hide the search query text field (can be hidden with a parameter or using CSS styles)
  • all — do not consider category when searching
  • child_cat — perform search across all child subcategories
  • count — display the number of products
  • count_all — display the number of products without considering the category
  • hideempty — hide the parameter if no products are found for it
  • hideempty_all — hide the parameter if no products are found for it (without considering the category)

All search filter widget settings match the parameters of the functional menu "Search filter".

Parameter format


Parameters can be specified using the "|" symbol

Usage example


{HOTENGINE-SC:smart_search_widget:autopath|count_all|hideempty|Product type ID|checkedlist|all|hideempty_all|pathurl=/ua/pers_shop/snakers/|}

Explanation of the example


  • Product type ID — specifies the identifier of the product type for which the filter should work (required)
  • pathurl=/ua/pers_shop/snakers/ — relative path to the category, where a functional menu block with a search filter is additionally placed

The path /ua/pers_shop/snakers/ is a relative path to the category and is used for correct formation of search queries and links.


Example of callback functions after JavaScript execution

The site uses many functions, after which you may need to execute your own scripts. For this purpose, we have added a set of callback functions that are called after script execution, with a preliminary check of their existence.
For example, after adding a product to the cart, the function callback_hotengine_cart_plus_after is called, if it exists

Code: JavaScript
if(typeof(callback_hotengine_cart_plus_after) === "function"){ 
callback_hotengine_cart_plus_after(); 
}


To run your own script of the function callback_hotengine_cart_plus_after, you need to create it.

Code: JavaScript
window.callback_hotengine_cart_plus_after = function(){
  // your script
};



List of some provided Callback functions:

Shop
callback_hotengine_ajax_load_products_list - after loading the product list (universal function in all cases of loading the product list via script)
callback_hotengine_ajax_load_products - after loading the product list, via the "Show more" button.
callback_hotengine_shop_products_list_div_button - after scrolling through the product list in a slider
callback_hotengine_shop_page_boughtwith_loaded($id) - after loading the "bought together" list ($id - ID of loaded products)
callback_hotengine_shop_page_products_synonyms_loading($id) - before loading the "synonym products" list ($id - ID of loaded products)

Shop / Automatic description
callback_hotengine_shop_autodescription($type) - after displaying automatic description ($type - html,ajax)
callback_hotengine_shop_autodescription_readmore($id,$job) - after loading the expanded text of the automatic description ($job - show,hide,load)

Shop / Cart
callback_hotengine_cart_plus - after sending a request to add a product to the cart
callback_hotengine_cart_addresult($result,$item_id) - after adding a product to the cart, various result variants ($result - result value. Values: "added" - added, "removed" - removed, "instock_smaller" - stock less than being added, "instock_smaller_exists" - stock less than already in cart)
callback_hotengine_cart_plus_after($items_in_cart) - after adding a product to the cart ($items_in_cart - number of items in cart after execution)
callback_hotengine_cart_plus_after_boughtwith($ids) - after adding a product to the cart, the "Bought together" list is passed in the $ids variable
callback_hotengine_cart_plus_after_boughtwith_email($ids) - after adding a product to the cart, the "Mailing list" is passed in the $ids variable (E-mail mailing of other products)
callback_hotengine_cart_count_product_num - after selecting a product to change its quantity in the cart
callback_hotengine_cart_error_wrong_num - incorrect product quantity specified when adding to cart
callback_hotengine_shop_update_cart_menu - update the number of items in the cart (for menus with a cart, for example in mobile menu)
callback_hotengine_cart_menu_hover_block - Function executed when hovering over the cart icon after displaying its contents

Shop / Variant
callback_hotengine_shop_product_variaty_select - after selecting a variant
callback_hotengine_variety_change_price($price) - after selecting a variant and changing the price ($price - new price)
callback_hotengine_variety_change_sku($sku) - after selecting a variant and changing the product code ($sku - new sku)
callback_hotengine_variety_change_skuimage($img) - after selecting a variant if a new image is specified ($img - new image path)
callback_hotengine_variety_change_stock_count($stock) - after selecting a variant and changing the stock count ($stock - new stock count). This function is not initialized if not created, since it is not always necessary to change the stock count.
callback_hotengine_variety_require() - if a variant is not selected, before showing the dialog message
callback_hotengine_variety_require_list($href) - if a variant is not selected, before showing the dialog message, when viewing the product list ($href - link to view the product card)

Shop / Favorite / Compare
callback_hotengine_favorite_addresult($result,$count_favorite) - after adding a product to favorites, various result variants ($result - result value. Values: "added" - added, "removed" - removed; $count_favorite - number of items in favorites)
callback_hotengine_compare_plus() - after adding a product to the comparison list

Shop / Search
callback_hotengine_shop_catalog_product_types - after selecting a product type in the search filter

Shop / Stock
callback_hotengine_shop_product_stock_inform- after calling the "Notify when in stock" window
callback_hotengine_shop_product_stock_inform_send - after sending the "Notify when in stock" request

Shop / Delivery
callback_hotengine_loading_delivery_type - after selecting a delivery method
callback_hotengine_loading_delivery_type_finalvalues - after selecting the final delivery method value

Shop / Storehouse
callback_hotengine_shop_cart_change_storehouse - after selecting a pickup point

User
callback_hotengine_authorize_result($result) - function after user authorization ($result - execution result: 2-login or password error, 3-account blocked, 4-activation required, 5-activation successful, 6-Incorrect Captcha code)

Shop / Sell Statistic
callback_hotengine_statisticsell_printorder($a) - after calling the order print window. $a=1 - before displaying the window. $a=2 - after displaying the window.

Blog
callback_hotengine_blog_page_list_div_button - after scrolling through the article list in a slider

Dialog
callback_hotengine_dialog_email - after calling the feedback window (built-in feedback form)
callback_hotengine_form_loaded - after loading the form (Form builder / Popup form)
callback_hotengine_form_submit_result($a) - after submitting the form via dialog window. $a=0 - error. $a=1 - ok.

Mobile
callback_hotengine_mobilemenu_click($a,$href) - clicking links in the mobile menu. $a=0 - item links and top icons. $a=1 - subcategory links. $a=2 - after displaying the ajax window with content.
callback_hotengine_mobilemenu_show - function for displaying mobile menu content (for creating an appearance effect). By default document.getElementById("hotengine-mobile-outer")?.style.setProperty("display", "block");

Example
Example of appearing from right to left.
Code: html
let $element = $("#hotengine-mobile-outer");
let elementWidth = $element.outerWidth();
$element.css({ right: -elementWidth, display: "block" }).animate({ right: 0 }, 500);




Other
callback_hotengine_loadGoogleReviews_after - function when loading the Google Place reviews block
callback_hotengine_booking_form($a) - function for working with booking. $a values: 2 - before getting available slots. 3 - after creating the available slots list. 4 - after clicking the back button. 5 - show available slots starting from the specified date, 6 - start of the booking confirmation process. 7 - before sending the booking confirmation. 8 - before sending the booking confirmation, after forming the data list. 9 - before sending the confirmation of the selected slot for booking. 10 - form submission - booking confirmation. 1 - booking submission, result.

Ready-made scripts


Most solutions can be implemented using scripts (JavaScript). Some of them are described on the instructions page, some on the settings page. Additionally, you can find ready-made solutions on the Scripts for use on websites page.

Hidden data (System markup / Micro-markup)

Special hotengine-marking markup

This markup is present on all pages (pages, shop, article catalog, etc.), as well as in menu items where a data list is used, for example latest articles and news.

This markup contains the following data:
data-hotengine-marking-type= page type
data-hotengine-marking-timestamp= page creation date
data-hotengine-marking-view= number of views

This data is necessary if you want to hide or display additional data on a specific page with a specific page type, or if you need to display the number of views or the date of the material (news, article, product). Additionally, by inspecting this element you can find the record ID (page, article or product) as well as other additional data.

If you need any other data in the markup, let us know.
Code: html
<span class="hotengine-marking" data-hotengine-marking-type="shop_catalog_page" data-hotengine-marking-timestamp="1422368197" data-hotengine-marking-view="6" data-hotengine-marking-name="slug_url_name" data-hotengine-marking-shop_catalog_page_price="1" data-hotengine-marking-shop_catalog_page_price_currency="USD" data-hotengine-marking-shop_catalog_page_complectation="22323" data-hotengine-marking-video="https://youtu.be/tAyVrZ1jzC4">


Additionally, when setting individual delivery parameters, more attributes are added:
data-hotengine-marking-delivery="xxx"
data-hotengine-marking-delivery_price="xxx"
data-hotengine-marking-delivery_note="xxx"


When product dimensions and weight are present, the following attributes are added: data-hotengine-marking-shop_cat_page_deliv_width="XX"
data-hotengine-marking-shop_cat_page_deliv_height="XX"
data-hotengine-marking-shop_cat_page_deliv_length="XX"
data-hotengine-marking-shop_cat_page_deliv_units="XX"
data-hotengine-marking-shop_cat_page_deliv_weight="XX"
data-hotengine-marking-shop_cat_page_deliv_weight_units="XX"
data-hotengine-marking-shop_cat_page_deliv_capacity="XX"



Example script that checks the page for the presence of a markup object and page type «shop_catalog_page» (product card page).
Code: html
let product_marking = $(".hotengine-marking[data-hotengine-marking-type='shop_catalog_page']");
  if(typeof product_marking !== typeof undefined && product_marking !== false && product_marking !='undefined' && product_marking !=''){
 let product_id = product_marking.attr("data-hotengine-marking-shop_catalog_page_id");
  console.log("ID PRODUCT IS "+product_id);
}

If the page is defined as a product card, then extract the product ID - data-hotengine-marking-shop_catalog_page_id.

Available page types:

Shop:
  • shop_catalog_page - product card
  • shop_catalog_page_incategory - product card on a list page *
  • shop_catalog_page_incategory_search - product card on the search result page
  • shop_catalog_page_cart_products_list - product card in cart
  • pers_shop_catalog_category - shop category
  • shop_catalog_category_collection - collection-category, shop
  • shop_catalog_category_producer - manufacturer-category, shop
  • shop_statistic_sale - sales statistics
  • shop_catalog_page_cart_bought_with - bought with the product (when viewing the cart)
Blog:
  • blog_catalog_page - article
  • blog_catalog_page_incategory - article list *

* - these list objects have micro-markup attributes added without using a separate hotengine-marking element.

Example of using markup (Displaying record creation date + timeConverter)
Code: html

<script>
(function(){
  function timeConverter(UNIX_timestamp) {
  const metaLang = document.querySelector(`html`);
  let lang = metaLang ? metaLang.getAttribute(`lang`).toLowerCase() : `en`;
  const a = new Date(UNIX_timestamp * 1000);
  const year = a.getFullYear();
  const monthIndex = a.getMonth();
  const date = a.getDate();
const months = {
  "ru": ["January","February","March","April","May","June","July","August","September","October","November","December"],
  "uk": ["January","February","March","April","May","June","July","August","September","October","November","December"],
  "pl": ["stycznia","lutego","marca","kwietnia","maja","czerwca","lipca","sierpnia","września","października","listopada","grudnia"],
  "en": ["January","February","March","April","May","June","July","August","September","October","November","December"]
};
 if (!months[lang]) lang = "en";
  return { day: date, month: months[lang][monthIndex], year: year };
  }


document.querySelectorAll(`#hotengine-content-page .hotengine-blog-page-list-block, #hotengine-content-blog .hotengine-blog-page-list-block`).forEach(block => {
    const timestamp = block.getAttribute(`data-hotengine-marking-timestamp`);
    if(timestamp){
        const t = timeConverter(timestamp);
        const dateHtml = `
            
${t.day} ${t.month} ${t.year}
`; const contentElem = block.querySelector(`.contenth_i`); if(contentElem){ contentElem.insertAdjacentHTML(`afterbegin`, dateHtml); } } }); })(); </script>

This script finds the markup element, #hotengine-content-blog .hotengine-blog-page-list-block (article from the list) and inserts the date, pre-converted from TIMESTAMP by the timeConverter function, at the beginning of the .contenth_i element.
CSS style
Code: CSS
.hotengine_add_date { font-size:10px; float:right; color:#555;
  display: inline-block;
  width: 60px;
  padding: 8px 5px;
  background-color: #f4f4f4;
  border-radius: 8px;
  text-align: center;

  box-shadow: 0 0 5px rgba(0,0,0,0.1);
  margin: 8px 10px 12px 8px;
  color: #333;
}

.hotengine_add_date span {
  display: block;
  line-height: 1.2;
}

.hotengine_add_date span.day {
  font-size: 20px;
  font-weight: bold;
}

.hotengine_add_date span.month {
  font-size: 13px;
  font-weight: 500;
}

.hotengine_add_date span.year {
  font-size: 11px;
  color: #777;
}

@media screen and (max-width: 600px) {
  .hotengine_add_date {
    width: 48px;
    padding: 6px 4px;
    margin: 6px 8px 10px 0;
  }

  .hotengine_add_date span.day {
    font-size: 16px;
  }

  .hotengine_add_date span.month {
    font-size: 11px;
  }

  .hotengine_add_date span.year {
    font-size: 10px;
  }
}




Additionally, the data-hotengine-marking-userid markup with the user ID is added to the <HTML> tag.
If the user is added as a "Client" with their own discount, the data-hotengine-marking-user-group-discount attribute is also added with their discount amount.

Code: html
<html lang="ru" data-hotengine-marking-userid="USERID" data-hotengine-marking-user-group-discount="-10%">
Where:
ru - site language
USERID - user ID
10% - client discount amount.


If the user is added to a Client Group, the ID of the group they belong to is additionally specified.
Code: html
<html lang="ru" data-hotengine-marking-userid="XXXXX" data-hotengine-marking-user-group-discount="-20%" data-hotengine-marking-user-group-id="XXXXX">



Example of additional markup in product variant
Code: html
<ul class="hotengine-shop-product-variety_select" size="1" data-vpid="XXXXX" >
<li value="0" title="Variant" >Variant</li>
<li value="XXXXXX" data-hotengine-variety-disable-add="1" data-hotengine-variety-pricechange="+10" data-hotengine-variety-stockcount="10" class="">Variant 1</li>
<li value="XXXXX" data-hotengine-variety-disable-add="0" data-hotengine-variety-pricechange="=500" data-hotengine-variety-stockcount="10" class="hotengine-shop-product-variety_hilight">Variant 2</li>
<li value="XXXXX" data-hotengine-variety-disable-add="0" data-hotengine-variety-pricechange="-110" data-hotengine-variety-stockcount="10" class="hotengine-shop-product-variety_hilight-selected">Variant 3</li>
</ul>

data-hotengine-variety-disable-add - enable/disable the ability to add variant to cart (1-prohibit, 0-allow). When clicking on a variant that is disabled for adding, nothing happens and the product price and SKU do not change.

data-hotengine-variety-pricechange - data about price change, you can use it to create highlighting of the changed price data (using javascript).
data-hotengine-variety-stockcount - stock quantity

CSS classes for elements:
.hotengine-shop-product-variety_hilight - highlighted object (on mouse hover).

.hotengine-shop-product-variety_hilight-selected - highlighted object that was clicked (active variant).

Additionally, for all child elements of the block with the disabled add-to-cart function [data-hotengine-variety-disable-add="1"], a desaturation style and normal cursor on hover are applied.

Example of markup with a search query in the shop
Code: html
<span class="hotengine-marking" 
data-hotengine-marking-type="shop_catalog_page_incategory_search"
data-hotengine-marking-search="search query"
data-hotengine-marking-searchparam="?&search=search query full string (+sorting and other data)"
data-hotengine-marking-sortparam="additional sorting data"
data-hotengine-marking-smart_search_price_from="price from"
data-hotengine-marking-smart_search_price_to="price to"
data-hotengine-marking-smart_search="search query when using search filter"
data-hotengine-marking-searchresult-num="55">

data-hotengine-marking-searchparam - search query, can be used to create a link to the search results page.
data-hotengine-marking-searchresult-num - number of found products matching the entered query.

Example of markup in shop categories
Code: html
<span class="hotengine-marking" 
data-hotengine-marking-type="pers_shop_catalog_category"
data-hotengine-marking-view="9999"
data-hotengine-marking-pers_shop_catalog_category_parent_id="222"
data-hotengine-marking-pers_shop_catalog_category_child_count="2"
data-hotengine-marking-pers_shop_catalog_page_count="999"
data-hotengine-marking-pers_shop_catalog_page_child_count="1299"
data-hotengine-marking-pers_shop_catalog_category_name="nameofcategory"
data-hotengine-marking-pers_shop_catalog_category_id="8342">

data-hotengine-marking-pers_shop_catalog_category_parent_id - parent category ID
data-hotengine-marking-pers_shop_catalog_category_child_count - number of subcategories (only for this parent)
data-hotengine-marking-pers_shop_catalog_page_count - number of products in this category
data-hotengine-marking-pers_shop_catalog_page_child_count - number of products in this and child subcategories
data-hotengine-marking-pers_shop_catalog_category_name - category name.
data-hotengine-marking-pers_shop_catalog_category_id - category ID.
Similar markup is used for Manufacturers.

Example of finding markup with a search query in the shop
Code: JavaScript
<script><!--
document.addEventListener("DOMContentLoaded", () => {
    const searchMark = document.querySelector(`.hotengine-marking[data-hotengine-marking-type="shop_catalog_page_incategory_search"]`);
    if (searchMark) {
        const searchQuery = searchMark.getAttribute("data-hotengine-marking-search");
        const input = document.querySelector(`#hotengine-search-searchinput input[name="search"]`);
        if (input && searchQuery) {
            input.value = searchQuery;
        }
    }
});
  //-->
  </script>

data-hotengine-marking-search - search query Attention! This is just an example. When placing the search block in the site header, the field value is set automatically at the moment of page rendering.


Additionally, some site blocks have "data-hotengine-..." markup with additional data added.
For example data-hotengine-product-images-count - number of product images.

In the cart, the markup specifies the number of items, total cost and currency (data-hotengine-cart-count, data-hotengine-cart-total-price, data-hotengine-cart-currency)

Additional markup, «data-» is implemented directly in the markup elements, for example, the class="hotengine-categories-list-block" element (category icon block) may contain markup: data-image="1" - image assigned to category, data-child-cat="7" - number of subcategories, data-child-items="5114" - number of products in all subcategories, as well as number of subcategories, data-cid="44" - category ID. (data-cid - shop categories, data-pcid - manufacturer categories, data-ccid - collection categories, data-bcid - article catalog categories)

In sales statistics, when viewing an individual order, micro-markup is also present.

Example of checking for the presence of a markup element
Code: html
let $catergory = $('.hotengine-marking[data-hotengine-marking-type="pers_shop_catalog_category"]');
if (typeof $catergory !== typeof undefined && $catergory !== false && $catergory !== "undefined" && $catergory.length > 0){
let $nemecat = $catergory.attr("data-hotengine-marking-pers_shop_catalog_category_name");
alert("Category name is "+$nemecat);
}

Instructions for creating product Sorting in the shop with example

Use the link to automatically create a functional menu "Sorting" or fill in the Block/Menu according to the instructions Script for the functional menu "Sorting".

Instructions for changing the unselected variant message

Variant selection error text:
The message about needing to select a product variant is implemented in a dialog window using a CSS element. You can replace the text in CSS styles:
Code: CSS
:lang(ru) .hotengine-shop_cart_add_error_wrong_variety:after{ content:"You did not select a product variant."; }
:lang(en) .hotengine-shop_cart_add_error_wrong_variety:after{ content:"You did not select a complete set of goods."; }
:lang(uk) .hotengine-shop_cart_add_error_wrong_variety:after{ content:"You did not select a product variant."; }
:lang(pl) .hotengine-shop_cart_add_error_wrong_variety:after{ content:"Nie wybrałeś typu produktu."; }

Additionally, before displaying the message, the callback function callback_hotengine_variety_require is called.
When viewing the product list, before displaying the message, the callback function callback_hotengine_variety_require_list($href) is called, where $href is passed the link to the product page.

Example function with a dialog window that is used by default and can be modified:
Code: JavaScript
<script>
 function callback_hotengine_variety_require(){

 $("body").append('<div id="hotengine-shop_cart_add_error_wrong_variety"><a class="hotengine-shop_cart_add_error_wrong_variety-btn-close" data-micromodal-close onclick=\'(function() { $("#hotengine-shop_cart_add_error_wrong_variety,#hotengine-shop_cart_add_error_wrong_variety-data").remove(); return false; })();\'></a></div>');
  
  
  
hotengine_micromodal({
    id: "hotengine-shop-cart-add-error-wrong-variety",
    content: $("#hotengine-shop_cart_add_error_wrong_variety-data").html(),
    defaultWidth: $(window).width() > 410 ? "410px" : "90%",
	defaultHeight: "",
    minWidth: "290px",
    onCloseRemove: false,
	unsetContentHeight: true,
	onCloseEvent: (id) => {
                setTimeout(() => {
                   const m = document.getElementById(id);
                   if (m && m.getAttribute("aria-hidden") === "true") m.remove();
                }, 500);
                }
});
  
  return false; 
  }

 </script>



In the product parameters, you can specify a title above the variant list. The title length is added as a CSS class. For example, if the title is "Select weight", its length is 24 characters. The class hotengine-shop-product-variety-title_24 is specified accordingly. You can use either the text or the length of the title above the variant. For example:
Code: JavaScript
<script>												 
	function callback_hotengine_variety_require(){

if($(".hotengine-shop-product-variety-title_24").length > 0){
  $text = "You did not select weight!";
  } else if($(".hotengine-shop-product-variety-title_38").length > 0){
  $text = "You did not select quantity!";
  } else if($(".hotengine-shop-product-variety-title_26").length > 0){
  $text = "You did not select color!";
  } else {
  $text = "You did not select a variant!";
  }
 
 
 $("body").append('<div id="hotengine-shop_cart_add_error_wrong_variety"><b>'+$text+'</b><a class="hotengine-shop_cart_add_error_wrong_variety-btn-close" data-micromodal-close onclick=\'(function() { $("#hotengine-shop_cart_add_error_wrong_variety,#hotengine-shop_cart_add_error_wrong_variety-data").remove(); return false; })();\'></a></div>');
  
  
  
hotengine_micromodal({
    id: "hotengine-shop-cart-add-error-wrong-variety",
    content: $("#hotengine-shop_cart_add_error_wrong_variety-data").html(),
    defaultWidth: $(window).width() > 410 ? "410px" : "90%",
	defaultHeight: "",
    minWidth: "290px",
    onCloseRemove: false,
	unsetContentHeight: true,
	onCloseEvent: (id) => {
                setTimeout(() => {
                   const m = document.getElementById(id);
                   if (m && m.getAttribute("aria-hidden") === "true") m.remove();
                }, 500);
                }
});
  
  return false; 
  }


</script>
A similar function when viewing the product list, callback_hotengine_variety_require_list($href), is supplemented with a link to the product page, and can accordingly be used in the displayed dialog.

Instructions for adding a link to reviews / rating in products


To create a link for Rating icons in the product list, you need to find all list elements and add a link around the rating elements.
Additionally, after loading the product list in a slider or with the "Show more" button, the link addition must be performed again (callback_hotengine_ajax_load_products and callback_hotengine_shop_products_list_div_button).
Code: JavaScript
<script>
  <!-- 


window.callback_hotengine_shop_products_list_div_button = function(){
    const blocks = document.querySelectorAll(`.hotengine-shop-product-list-block .hotengine-shop-product-rating-block`);
    blocks.forEach(block => {
        if(block.parentElement && block.parentElement.classList.contains(`hotengine-shop-product-rating-block-url`)) return;
        const parent = block.parentElement;
        if(!parent) return;
        const readMore = parent.querySelector(`.hotengine-shop-product-read_more a`);
        if(!readMore) return;
        const url = readMore.getAttribute(`href`);
        if(!url) return;
        const a = document.createElement(`a`);
        a.className = `hotengine-shop-product-rating-block-url`;
        a.href = `${url}#tabs-review`;
        parent.insertBefore(a, block);
        a.appendChild(block);
    });
};

window.callback_hotengine_ajax_load_products = function(){
    const blocks = document.querySelectorAll(`.hotengine-shop-products-list-content-append .hotengine-shop-product-list-block .hotengine-shop-product-rating-block`);
    blocks.forEach(block => {
        if(block.parentElement && block.parentElement.classList.contains(`hotengine-shop-product-rating-block-url`)) return;
        const parent = block.parentElement;
        if(!parent) return;
        const readMore = parent.querySelector(`.hotengine-shop-product-read_more a`);
        if(!readMore) return;
        const url = readMore.getAttribute(`href`);
        if(!url) return;
        const a = document.createElement(`a`);
        a.className = `hotengine-shop-product-rating-block-url`;
        a.href = `${url}#tabs-review`;
        parent.insertBefore(a, block);
        a.appendChild(block);
    });
};

window.callback_hotengine_shop_products_list_div_button = function(){
    const blocks = document.querySelectorAll(`.hotengine-shop-products-list-content .hotengine-shop-product-list-block .hotengine-shop-product-rating-block`);
    blocks.forEach(block => {
        if(block.parentElement && block.parentElement.classList.contains(`hotengine-shop-product-rating-block-url`)) return;
        const parent = block.parentElement;
        if(!parent) return;
        const readMore = parent.querySelector(`.hotengine-shop-product-read_more a`);
        if(!readMore) return;
        const url = readMore.getAttribute(`href`);
        if(!url) return;
        const a = document.createElement(`a`);
        a.className = `hotengine-shop-product-rating-block-url`;
        a.href = `${url}#tabs-review`;
        parent.insertBefore(a, block);
        a.appendChild(block);
    });
};
 
-->
  </script>



For the link object, you need to set the position, for example CSS:
Code: JavaScript
.hotengine-shop-product-list-block .hotengine-shop-product-rating-block{ position:relative; display: block; bottom: 0px;}
	.hotengine-shop-product-list-block .hotengine-shop-product-rating-block-url{ position:relative; display: block; bottom: 1px;}
	


Additional blocks in the cart: If a product has a wholesale price set, a SPAN element .hotengine-shop-product-price_bulk_inform_block is created.
Code: html
<span class="hotengine-shop-product-price_bulk_inform_block"><span class="hotengine-shop-product-price_bulk_inform_block_title"></span><span class="hotengine-shop-product-price_bulk_inform_original_price">100</span><span class="hotengine-shop-product-price_bulk_inform_original_price_bulk">100</span></span>



.hotengine-shop-product-price_bulk_inform_block_title - block with the text «Wholesale price» (can be changed via CSS styles, content).
.hotengine-shop-product-price_bulk_inform_block - block with discount information
.hotengine-shop-product-price_bulk_inform_original_price - price
.hotengine-shop-product-price_bulk_inform_original_price_bulk - wholesale price


If a product has a Sale, a SPAN element .hotengine-shop-product-price_sale_inform_block is created.
Code: html
<span class="hotengine-shop-product-price_sale_inform_block"><span class="hotengine-shop-product-price_sale_inform_block_title"></span><span class="hotengine-shop-product-price_sale_inform_original_price">100</span><span class="hotengine-shop-product-price_sale_inform_original_price_old">120</span></span>



.hotengine-shop-product-price_sale_inform_block_title - block with the text «Sale price» (can be changed via CSS styles, content).
.hotengine-shop-product-price_sale_inform_block - block with discount information
.hotengine-shop-product-price_sale_inform_original_price - price
.hotengine-shop-product-price_sale_inform_original_price_old - old product price (displayed only if the value is specified and not zero)


ShortCode (auto data replacement)

ShortCode (auto data replacement)

On all pages and Blocks/Menus, automatic replacement of Code with Static Data is possible.
Each page has unique data, for example page ID (article, product, page).

Below is a list of the main data for auto-replacement.


{HOTENGINE-SC:current_page_id} - Current page ID (article, page, product, news)
{HOTENGINE-SC:site_url} - Your site URL (address)
{HOTENGINE-SC:lang} - Language of the opened page
{HOTENGINE-SC:site_tagline} - Site tagline
{HOTENGINE-SC:contacts} - Contact block
{HOTENGINE-SC:slide_menu_widget:XX} - Slide Menu widget block
{HOTENGINE-SC:slider_widget:XX} - Slider widget block
{HOTENGINE-SC:smart_search_widget:PARAM} - Search Filter widget block
{HOTENGINE-SC:main_menu_widget} - main menu
{HOTENGINE-SC:langmenu} - language switching

{HOTENGINE-SC:user_nickname} - User name (if logged in)
{HOTENGINE-SC:user_id} - User ID (if logged in)
{HOTENGINE-SC:user_login} - User Login (if logged in)
{HOTENGINE-SC:user_discount} - User discount
{HOTENGINE-SC:user_cashback} - Cashback balance
{HOTENGINE-SC:user_group_id} - User group ID

{HOTENGINE-SC:shop_cart_menu} - cart with products (Block/Menu Cart)
{HOTENGINE-SC:favorites} - link to favorite products
{HOTENGINE-SC:shop_compare_menu} - product comparison
{HOTENGINE-SC:shop_cat_page_image} - Path to product image (if product page is open)
{HOTENGINE-SC:shop_cat_page_id} - Product ID (if product page is open). You can also use {HOTENGINE-SC:current_page_id}
{HOTENGINE-SC:shop_cat_page_name} - «Slug URL» page name for SEO-friendly URL.
{HOTENGINE-SC:shop_cat_page_sku} - Product SKU (if product page is open)
{HOTENGINE-SC:shop_cat_page_currency} - Product currency (abbreviated) (if product page is open)
{HOTENGINE-SC:shop_cat_page_currency_iso} - Product currency (ISO) (if product page is open)
{HOTENGINE-SC:shop_cat_page_price} - Product price (if product page is open)
{HOTENGINE-SC:shop_cat_page_title} - Product name
{HOTENGINE-SC:shop_cat_page_video} - Video URL (link to video)

{HOTENGINE-SC:pers_shop_cat_val_name} - Shop category name (only inside category and button in subcategory list)
{HOTENGINE-SC:pers_shop_cat_val_title} - Shop category title (only inside category and button in subcategory list)
{HOTENGINE-SC:pers_shop_cat_val_id} - Shop category ID (only inside category and button in subcategory list)
{HOTENGINE-SC:shop_cat_producer_val_name} - Producer category name (only inside category and button in subcategory list)
{HOTENGINE-SC:shop_cat_producer_val_id} - Producer category ID (only inside category and button in subcategory list)
{HOTENGINE-SC:shop_cat_collection_val_name} - Collection category name (only inside category and button in subcategory list)
{HOTENGINE-SC:shop_cat_collection_val_id} - Collection category ID (only inside category and button in subcategory list)

{HOTENGINE-SC:blog_cat_val_name} - Article catalog category name (only inside category and button in subcategory list)
{HOTENGINE-SC:blog_cat_page_id} - Article ID (only in article category)
{HOTENGINE-SC:blog_cat_page_name} - «Slug URL» page name for SEO-friendly URL.
{HOTENGINE-SC:blog_cat_page_title} - Article title (only in article category)
{HOTENGINE-SC:blog_cat_val_id} - Article catalog category ID (only inside category and button in subcategory list)




For example, you can use this code to display the name of an authorized user on the site:
Code: html
<span class="user_login_name">Welcome {HOTENGINE-SC:user_login}</span>


Or you can use this code to create Meta data for social networks (e.g. Open Graph markup):
Code: html
<meta property="og:image" content="{HOTENGINE-SC:shop_cat_page_image}"/>
<meta property="og:title" content="{HOTENGINE-SC:shop_cat_page_title}>



Example of creating a link to an authorized user's profile:
Code: html
https://boostore.pro/{HOTENGINE-SC:lang}/users.php?p=user_profile&action=userprofile&userid={HOTENGINE-SC:user_id}



XML/RSS/YML Exports

XML exports available on your site

The system supports automatic feed generation in various formats. You can use both abbreviated versions for fast indexing and maximally extended data including product characteristics, attributes and multilingual descriptions.

Supported formats and platforms:

  • Sitemap.xml – site map for Google and Bing, ensuring fast indexing.
  • Google Merchant Center – XML feeds for Google Shopping and dynamic remarketing.
  • Yandex Market – XML standard (YML) for advertising networks.
  • Hotline.ua – specialized price list with markup support for margin management.
  • Rozetka.ua – XML file adapted to marketplace requirements with price exception support.
  • Prom.ua – feed with intelligent multilingual support: automatic merging of descriptions (UA/RU) in one file according to the portal specification.
  • Epicenter (Epicentrk.ua) – adapted XML feed considering marketplace content standards.
  • JSON / CSV Price – universal formats for integrations and working in Excel.

The generator and current list of links are available in the admin panel: «XML/CSV/XLS/JSON».

Flexible configuration (Filtering and Sorting):

By adding GET parameters to the link, you can dynamically change the export content:

Parameter Description
producer Producer ID (multiple values can be comma-separated).
price_from / price_to Price range filter «from» and «to».
pers_shop_cat_page_catid Store category ID (supports multiple branches).
stock Stock status (in stock only / all products).
sort_instock_priority Priority: in-stock products are moved to the top of the list.
sort_by / order_by Sort direction and field for data sorting.

Example link: https://your-site.com/export.xml?producer=10&price_from=500&stock=1

All available value options and the link builder are on the «XML/CSV/XLS/JSON Exports» page.


Formula Markups

The system implements automatic price calculation using formulas. Margin management is available at three levels:

  • Globally for export: The «Additional markup» parameter allows you to set a general percentage on top of the base product price directly when creating a feed link.
  • For each category: In the settings of a specific store category, you can specify an individual markup that will apply only to products of that group. The settings allow you to flexibly set different percentages for each platform separately (separate markup for Rozetka, Prom.ua, Epicentrk.ua, etc.).
  • Individually per product: Each product card has a «Markup in exports» parameter that allows you to forcefully disable calculations for a specific item:

Exception options:

  • On – all active markups (export + category) are applied to the product.
  • Off: No markups – complete ignoring of markups. The file receives the original site price without surcharges.
  • Without Rozetka / Prom / Epicentr markup – targeted disabling of markups for a specific marketplace only.
  • Without formula markup – disabling automatic recalculation rules for this item.

This is extremely useful for price control on products with a fixed retail price (RRP), where automatic price increases are unacceptable.

Domains/Domain

Domain parking

You can connect your personal top-level domain for free (e.g.: example.com). To do this, specify our NS servers in your domain settings:

Primary NS servers recommended
FRIDA.NS.CLOUDFLARE.COM
JAIME.NS.CLOUDFLARE.COM
FOR .UA DOMAINS (.PP.UA, .IN.UA, .OD.UA, .COM.UA, etc.):
JULISSA.NS.CLOUDFLARE.COM
FATTOUCHE.NS.CLOUDFLARE.COM
Or use
NS1.BOOSTORE.PRO
NS2.BOOSTORE.PRO
IP for A-record
88.218.28.193

After configuration, contact us via the feedback form. Specify your site and the new domain address.

* — We do not sell domains. To connect your domain, you need to purchase it from a registrar.
Domains in the .RU zone are currently not supported.

SSL/HTTPS

SSL

SSL stands for Secure Socket Layer — it is a standard internet security technology used to provide an encrypted connection between a web server (website) and a browser. An SSL certificate allows us to use the HTTPS protocol (after connecting an SSL certificate, your site will be accessed via HTTPS instead of HTTP).


What is HTTPS?

HTTPS (Hypertext Transport Protocol Secure) is a protocol that ensures security and confidentiality when exchanging information between a website and a user's device. Site visitors expect that the data they provide will not fall into the hands of fraudsters. To protect the data that visitors leave on your site, start using the HTTPS protocol.



How to connect an SSL certificate


You can connect our SSL certificate when paying for hosting by checking the «SSL certificate» box.

Also, you can connect an SSL certificate for your domain by first purchasing it from any registrar. The cost of connecting and using your certificate is $1 per month (minimum payment term - 12 months).

For an online store, a Comodo Positive SSL certificate is sufficient.

Pay for SSL connection.


Mail/E-mail

Creating mailboxes on a parked domain

After connecting a domain, you can use email with your site's address, for example mail@example.com.
You can connect Google.com, Zoho.com and other email services to your domain.


Connecting corporate email on Zoho.eu

1

Sign up at zoho.eu/mail

2

Choose a pricing plan (for example, 5GB — FREE, free).

3

Add your domain. To verify, create a CNAME or TXT record in DNS. You can send this data to us for configuration, or specify it yourself (preferably send both options).

4

Add MX records (host name: @ or blank). The values are listed below:

Host / Domain Value / Address Priority
@ / Blank mx.zoho.eu. 10
@ / Blank mx2.zoho.eu. 20
@ / Blank mx3.zoho.eu. 50
5

In DNS records, create a TXT record (SPF):
v=spf1 ip4:88.218.28.193 include:zoho.eu ~all

6

It is recommended to configure DKIM Signature.

7

Create email addresses and users in the Zoho panel.

8

Configure sending via SMTP in the site admin panel:

Option 1 (SSL)
  • Server: smtp.zoho.eu
  • Port: 465
  • Security: SSL
Option 2 (TLS)
  • Server: smtp.zoho.eu
  • Port: 587
  • Security: TLS

SMTP Settings

You can use your own SMTP server (RECOMMENDED) to send email from your site. To do this, go to Settings, to the "Mail" tab and specify the SMTP server parameters.

Notifications

Viber Bot

Viber Notifications

You can enable alerts about new messages and orders from the site. Please note that Viber supports receiving notifications only (order status management via this channel is not supported).

To connect: send boostore_viber_key (where key is your key) to the public account: viber.com/hotlistbiz.

You can share this key and use it from various devices with Viber.
📍 Site Settings You can set the key in «Settings», in the «Notifications» tab.
📝 Form Editor You can use a key for Forms, which is specified in the «Form Editor».
To disable notifications, either remove a specific recipient, change keys, or send DISABLE hotlist_key (where key is your site or form key) in Viber.

Telegram Bot

Notifications and Management in Telegram

You can enable alerts about new messages and orders from the site. The Telegram bot allows you not only to receive information but also to manage order statuses, delivery and payment statuses directly from the messenger.

To connect: send boostore_telegram_key (where key is your key) to the bot: @BooStorePro_bot.

You can share this key and use it from various devices with Telegram.
📍 Site Settings You can set the key in «Settings», in the «Notifications» tab.
📝 Form Editor You can use a key for Forms, which is specified in the «Form Editor».
To disable notifications, either remove a specific recipient, change keys, or send DISABLE hotlist_key (where key is your site or form key) in Telegram.

Push Notifications

Push Notifications in Browser

Push notifications are short messages that appear on your screen (computer or phone), even when the boostore.pro site is closed. They help you instantly learn about critical events without checking email.

Push Notification Features:
  • Instant messages about new orders and customer inquiries.
  • Import Control: notifications about completion of product import from Excel, Google Sheets or clipboard.
  • System Alerts: information about technical maintenance, SSL expiration or balance expiry.
To connect, go to «Settings», to the «Notifications» tab and follow the step-by-step instructions to activate the subscription in your browser.

Languages

Multilingualism and search engines

If you have several versions of a page in different languages or for different regions, help Google identify them. Then the search results will display the versions of your pages that best suit the user's language and region.
One way to implement multilingual sites is using the tag with the hreflang attribute. Example of such a tag:
<link rel="alternate" hreflang="lang_code" href="url_of_page" />

Multilingual functionality is implemented on different site pages (categories, pages, articles, product cards, and others). For example, if you have a product card added in English, Belarusian, Russian, and Ukrainian, it is enough to specify the same value in all product cards in the "Product in other languages" field, for example - "1". In this case, when opening a page in one of the languages, hreflang tags with links to pages in other languages will be added. It is recommended to use the ID of the first product card to avoid duplicate values and subsequent errors. For example, if you added a product "Sneakers" with ID "12345", then when adding a similar product in English, specify "12345" in the "Product in other languages" field.

The selected main language of the site will be additionally marked with the hreflang="x-default" tag.

How to create a multilingual site?

Create a page in one language, then the same page in another language, and fill the "Page in other languages" field with the same value, for example, the ID of the first created page. Fill in articles and product cards in the same way. The site will automatically inform the search engine about the page in other languages, as well as about the main page (the main page will correspond to the main language of the site, which you can specify in the "Settings", "Start page" section).

For creating catalog categories for articles or the store, we recommend using a language prefix. For example, the "dress" category can be created in other languages using the prefixes "dress_ua", "dress_de", "dress_fr"...
Using the same category path in other languages is possible, but during data import, for example, of a product, errors may occur because the platform will not be able to recognize the language of the category into which it is being added. Therefore, we recommend using prefixes in sections with categories, the article catalog, and the online store. When using language prefixes as described above, the "Category in other languages" variable will be set automatically.

When creating product cards, the "Product Code" must be unique, so in another language you can use, for example, custom endings "SKU/CODE_EN". If "Product in another language" is specified, then when changing basic data (price, availability, new, bestseller, discount, status), all product cards specified as an alternative version of the main product will also be updated.
"Search filter" and "Blocks/menus" can be used simultaneously for all languages, and separately specify the language in which to display them. For example, create a "Blocks/menus", Site header, and place it on all pages, specifying the language "Russian (ru)". Such a block will be displayed everywhere only if the Russian version of the site is open. In the same way, you can create a header for other languages. If you need to place some code, you don't have to create such a "Blocks/menus" for each language, just specify the language "All", and the block will be displayed regardless of the language chosen by the visitor.
The language prefix on the BooStore.pro platform is specified at the beginning, for example, "/en/page.htm".

Quick translation of the product catalog on the site

For quick store translation, you can use import/export via CSV/XLS, as well as the Google Translate service for documents.

Store categories


Export "Store categories". Replace the value of the "PREVIOUS" language in the language cell with the value of the "NEW" language, and also translate the names and descriptions (for example, using the Google Translate service for documents, after saving the file in XLSX format). In this case, the "Language" of all child categories will be the same as the language of the main category into which they are added. Therefore, for the main category (whose parent is "main"), it is important to replace the value of the "Language" cell with "NEW LANGUAGE". To eliminate possible errors during subsequent product import, we recommend using unique names, or adding "_NEWLANGUAGE" to the name of new categories. For example, "category_en", where "en" is the new language being added.

Before performing the import, you need to save the file in "XLS" or "CSV" format. After completing the import, check that the language of the new categories is correct. If for some reason the wrong language is specified, then replace the language of the main category of your catalog, into which they are added, in the "Store" - "Store categories" section. The language for all child subcategories will also be changed. If there are not many categories, you can copy the categories, replacing their language and name in the "Store" - "Store categories" section.


Adding products

Perform product export in the "Store" - "Product export" section. Check the "Upload all" box. Uncheck "Do not export products that are out of stock", and also check the "Export categories without transliteration" box - to simplify the selection of categories for translated products. Translate the file using the Google Translate service for documents, after saving the file in XLSX format. Using formulas, add "_language" to categories, or replace their names with newly created categories. Move the values of the "ID" column to the "Products in other languages" column. Be sure to delete the values for the "ID" column to avoid overwriting existing products. Also replace the "Product Code", for example, similarly adding "_language" using formulas, since products with the same "ID" or "Product Code" will be overwritten.
Perform the import in the "Store" - "Product import" section. You can quickly fill the cell correspondence by clicking "Fields from file, specify correspondence" - "Fill field correspondence selection according to the export file (fields "Upload all")".

In addition, to create correct markup for search engines, as well as redirect between products in different languages, in the products of the main language, perform an export and re-import, copying the value of the "ID" cell to the "Products in other languages" column. (In this case, you can import only one cell "Product in other languages" and specify the ID or "Product Code" by which products will be found for overwriting). Thus, both new and previously created products will have identical values in "Product in other languages".

Multilingualism and language selection menu

You can place the short code {HOTENGINE-SC:langmenu} and specify the list of available languages in the site settings, or place the code from the example below.
The code from the example below creates a button to switch to alternative languages, and if an alternative language version is specified for the page/article/product card, it will be used.


1) Insert the CSS code into the Design Editor, in the CSS tab.
2) Add JavaScript to a block/menu displayed on all pages.
3) Insert the language dropdown code into the block/menu where you want to place it, for example, in the site header.
4) Remove unnecessary languages from the block (class hotengine-shop-select-language-val)



Language selection menu code:
Code: html
<nav class="hotengine-shop-select-language-box">
  <span class="hotengine-shop-select-language" data-lang="es"></span>
  <span class="hotengine-shop-select-language-values">
  <li><a class="hotengine-shop-select-language-val" data-lang="be"></a></li>
  <li><a class="hotengine-shop-select-language-val" data-lang="de"></a></li>
  <li><a class="hotengine-shop-select-language-val" data-lang="en"></a></li>
  <li><a class="hotengine-shop-select-language-val" data-lang="es"></a></li>
  <li><a class="hotengine-shop-select-language-val" data-lang="fr"></a></li>
  <li><a class="hotengine-shop-select-language-val" data-lang="kk"></a></li>
  <li><a class="hotengine-shop-select-language-val" data-lang="pl"></a></li>
  <li><a class="hotengine-shop-select-language-val" data-lang="ru"></a></li>
  <li><a class="hotengine-shop-select-language-val" data-lang="uk"></a></li>
  </span>
  </nav>

CSS styles:
Code: CSS
/*LANGUAGE BLOCK*/
.hotengine-shop-select-language-box { display:inline-block; width:71px; height:auto; overflow:hidden; border:1px solid transparent;  line-height:30px; position:relative; z-index:1000; }
.hotengine-shop-select-language { display:block; width:100%; text-align:center; cursor:pointer; }
.hotengine-shop-select-language-values { display:block; width:100%; vertical-align: top; position:absolute; background:rgba(255, 255, 255, 0.80); }
.hotengine-shop-select-language-box:hover{ overflow:visible;}
.hotengine-shop-select-language-values:hover li{ position:relative; }
.hotengine-shop-select-language-val { width:auto; display:block; margin:0px; vertical-align:top; cursor:pointer; text-align:center; color:inherit; text-decoration:none; }
.hotengine-shop-select-language-val:hover {background:inherit;color:inherit;}


.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="ru"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="ru"]:after { content: "RU"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="en"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="en"]:after { content: "EN"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="uk"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="uk"]:after { content: "UA"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="de"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="de"]:after { content: "DE"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="es"]:after,

.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="es"]:after { content: "ES"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="fr"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="fr"]:after { content: "FR"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="kk"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="kk"]:after { content: "KK"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="be"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="be"]:after { content: "BE"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="ro"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="ro"]:after { content: "RO"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="tr"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="tr"]:after { content: "TR"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="it"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="it"]:after { content: "IT"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="sk"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="sk"]:after { content: "SK"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="da"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="da"]:after { content: "DA"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="pl"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="pl"]:after { content: "PL"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="zh"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="zh"]:after { content: "ZH"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="hi"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="hi"]:after { content: "HI"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="ar"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="ar"]:after { content: "AR"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="pt"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="pt"]:after { content: "PT"; }

.hotengine-shop-select-language-box .hotengine-shop-select-language[lang="bn"]:after,
.hotengine-shop-select-language-box .hotengine-shop-select-language-val[lang="bn"]:after { content: "BN"; }

/*LANGUAGE BLOCK*/

File that substitutes paths in links (from link[rel="alternate"]):
Code: JavaScript
<script src="/templates/scripts/hotengine-script-language.js"></script>

File contents

Changing text elements on the site

Multilingualism and replacing standard labels

Most labels and elements on the site are displayed using CSS pseudo-elements. For example, the element with class .hotengine-form-feedback-yourname-title has a pseudo-element with text.
The text is separated using the parent lang attribute on the html element.

Example:
Code: CSS

:lang(ru) .hotengine-form-feedback-yourname-title:after{ content:"Your name:"; }
:lang(en) .hotengine-form-feedback-yourname-title:after{ content:"Your name:"; }
:lang(uk) .hotengine-form-feedback-yourname-title:after{ content:"Your name:"; }
:lang(de) .hotengine-form-feedback-yourname-title:after{ content:"Ihr name:"; }
:lang(es) .hotengine-form-feedback-yourname-title:after{ content:"Su nombre:"; }
:lang(fr) .hotengine-form-feedback-yourname-title:after{ content:"Votre nom:"; }
:lang(kk) .hotengine-form-feedback-yourname-title:after{ content:"Your name:"; }
:lang(be) .hotengine-form-feedback-yourname-title:after{ content:"Your name:"; }
:lang(ro) .hotengine-form-feedback-yourname-title:after{ content:"Numele dvs.:"; }
:lang(tr) .hotengine-form-feedback-yourname-title:after{ content:"Adınız:"; }
:lang(it) .hotengine-form-feedback-yourname-title:after{ content:"Il tuo nome:"; }
:lang(sk) .hotengine-form-feedback-yourname-title:after{ content:"Vaše meno:"; }
:lang(da) .hotengine-form-feedback-yourname-title:after{ content:"Dit navn:"; }
:lang(pl) .hotengine-form-feedback-yourname-title:after{ content:"Twoje imię:"; }
:lang(zh) .hotengine-form-feedback-yourname-title:after{ content:"Your name:"; }
:lang(hi) .hotengine-form-feedback-yourname-title:after{ content:"Your name:"; }
:lang(ar) .hotengine-form-feedback-yourname-title:after{ content:"Your name:"; }
:lang(pt) .hotengine-form-feedback-yourname-title:after{ content:"Seu nome:"; }
:lang(bn) .hotengine-form-feedback-yourname-title:after{ content:"Your name:"; }



Files with translation of standard values


How can you translate the entire site?

When creating a multilingual site, specify the language in the created content (page, menu, category...).

Use paths with the language specified at the beginning:

/ua/ /ru/ /en/ /pl/ /kk/ /be/ ...

Main language: specified during registration (changed in "Settings" → "Languages and start page").

Products: language is determined automatically by the category into which the product is added.

Most elements on the site can be replaced using CSS styles and pseudo-elements.

Product quantity labels

:lang(ru).hotengine-shop-product-price_for-lang-1::after { content: "per 1 piece"; }

Replace lang-1 (where 1 is the selected unit of measurement) and (ru) — language code.

List of unit of measurement values:

  • 1 1 pc
  • 2 100 pcs
  • 3 1000 pcs
  • 4 per 1 package
  • 5 1 kg
  • 6 1000 kg
  • 7 1 m²
  • 8 per 1 meter
  • 9 per 1 km
  • 10 per set
  • 11 per 1 hour
  • 12 per 1 day
  • 13 per 1 month
  • 14 per 1 year
  • 15 per 100 sq m
  • 16 per Acre
  • 17 per Hectare
  • 18 per plot
  • 19 per object
  • 30 per 1 ml
  • 31 per 1 l
  • 32 per 1 km³
  • 33 per 1 m³
  • 34 per 1 dm³
  • 35 per 1 cm³
  • 36 per 1 mm³
  • 37 per 1 hl
  • 38 per 100 grams
  • 39 1 pound
  • 40 per 1 gram
  • 41 per 10 kg
  • 42 per 1 centner
  • 43 per 1 ton
  • 44 per 1 are
  • 45 per 1 pair
  • 46 per 1 dozen
  • 47 per 1 gallon
  • 48 per 1 barrel
  • 49 per 1 minute
  • 50 per 1 week
  • 51 per 1 service
  • 52 per 1 trip
  • 53 per 1 person
  • 54 per 1 car
  • 55 per 1 linear meter

Translating buttons using JavaScript

Some elements are implemented without pseudo-classes and CSS elements. For example, an element like the "Send" button in the cart. To translate such an element, you can use Javascript.
Code: JavaScript
<script>
(function() {
    const init = () => {
        const submitBtn = document.querySelector(`#hotengine-shop-cart-form .hotengine-form-submit input[type="submit"]`);
        if (submitBtn) {
            submitBtn.value = `Submit order`;
        }
    };

    if (document.readyState === `loading`) {
        document.addEventListener(`DOMContentLoaded`, init);
    } else {
        init();
    }
})();
</script>

More details ...
For example, in this case we are changing the text of the form submit button. The code must be placed on the page where the button is located. To do this, you need to create a functional page - the Cart. And insert the code given in the example into the page text.

Search filter translation

You can use one search filter for multiple languages. This will simplify the process of importing/exporting products and filling the site.
Translation is carried out using the tool Translation of characteristic values.

Additionally, you can perform translation using JavaScript. However, with such a translation, the XML export of characteristics to Marketplaces will be in one language.
For example, let's look at translation from English to Russian.
Show

Create a "Block/Menu" and place it on pages where the search filter is enabled.
For example, in the item "Enter characters upon detection of which to display Block/Menu:" specify:
/en/shop/
/en/pers_shop/

Example of translating lines, as well as the "Apply" button.
Code: JavaScript
<script>
(function() {
  const $dict = {
    "Color": "Color",
    "Blue": "Blue",
    "Green": "Green",
    "Black": "Black"
  };

  /*
  Example translations:
  RU: "Color": "Color", "Blue": "Blue", "Green": "Green", "Black": "Black"
  UA: "Color": "Color", "Blue": "Blue", "Green": "Green", "Black": "Black"
  PL: "Color": "Kolor", "Blue": "Niebieski", "Green": "Zielony", "Black": "Czarny"
  */

  const applyTranslations = () => {
    Object.entries($dict).forEach(([txtorig, txtnew]) => {
      const selectors = [
        `#shop_catalog_product_types_id_ajax .product_types_valuebox_checkbox span`,
        `#shop_catalog_product_types_id_ajax .shop_catalog_product_types_block_title`,
        `.shop_catalog_product_properties_block .shop_catalog_product_types_block_title`,
        `.shop_catalog_product_properties_block .product_types_valuebox_checkbox`
      ];

      selectors.forEach(selector => {
        document.querySelectorAll(selector).forEach(el => {
          if (el.textContent.includes(txtorig)) {
            el.innerHTML = txtnew;
          }
        });
      });
    });
  };

  applyTranslations();

  const target = document.getElementById(`shop_catalog_product_types_id_ajax`);
  if (target) {
    const observer = new MutationObserver(() => {
      observer.disconnect();
      applyTranslations();
      observer.observe(target, { childList: true, subtree: true });
    });
    observer.observe(target, { childList: true, subtree: true });
  }

  setTimeout(() => {
    const smartSearchInput = document.querySelector(`.hotengine-smart_search_submit_button input`);
    if (smartSearchInput) smartSearchInput.value = "Apply";

    const searchInpButton = document.querySelector(`#searchinp_smart_search .button`);
    if (searchInpButton) searchInpButton.value = "Apply";
  }, 100);
})();
  </script>


Example of translation with word overwriting:
Code: JavaScript
<script>
 (function() {
  const $dict = {
    "Colour": "Farbe",
    "Blue": "Blau",
    "Green": "Grün",
    "Black": "Schwarz"
  };

  /*
  Example translations:
  RU: "Colour": "Color", "Blue": "Blue", "Green": "Green", "Black": "Black"
  UA: "Colour": "Color", "Blue": "Blue", "Green": "Green", "Black": "Black"
  PL: "Colour": "Kolor", "Blue": "Niebieski", "Green": "Zielony", "Black": "Czarny"
  */

  const applyTranslations = (container) => {
    Object.entries($dict).forEach(([txtorig, txtnew]) => {
      const regex = new RegExp(txtorig, "g");
      if (container.innerHTML.includes(txtorig)) {
        container.innerHTML = container.innerHTML.replace(regex, txtnew);
      }
    });
  };

  const target = document.getElementById(`shop_catalog_product_types_id_ajax`);
  if (target) {
    applyTranslations(target);

    const observer = new MutationObserver(() => {
      observer.disconnect();
      applyTranslations(target);
      observer.observe(target, { childList: true, subtree: true });
    });
    observer.observe(target, { childList: true, subtree: true });
  }

  setTimeout(() => {
    const smartSearchInput = document.querySelector(`.hotengine-smart_search_submit_button input`);
    if (smartSearchInput) smartSearchInput.value = "Apply";

    const searchInpButton = document.querySelector(`#searchinp_smart_search .button`);
    if (searchInpButton) searchInpButton.value = "Apply";
  }, 100);
})();
  </script>

Similarly, you can add other languages and new words by placing the code on the corresponding language versions of the site.

Promotions (countdown timer in the store)

Translation using the timer as an example. Products have the ability to automatically create a countdown timer. When adding a product, check the "Promotional product" box, and in the appearing block click "Enable timer". Set the timer expiration date. After the specified period expires, you can set an action, for example, remove the promotion, or change the price...

How to change the labels in the timer?

Using CSS styles, you can replace the words in the timer. To do this, for example, in the product, insert the CSS html code:
Code: CSS
<style type="text/css">
<!--

/*label time left*/

:lang(ru) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-day:after{
   content:"days";
}
:lang(ru) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-hourse:after{
   content:"hours";
}
:lang(ru) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-minute:after{
   content:"minutes";
}
:lang(ru) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-seconds:after{
   content:"seconds";
}
:lang(ru) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-left:after{
   content:"left before the end of the promotion!";
}
:lang(ru) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-done:after{
   content:"Promotion ended!";
}


:lang(en) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-day:after{
   content:"days";
}
:lang(en) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-hourse:after{
   content:"hours";
}
:lang(en) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-minute:after{
   content:"minute";
}
:lang(en) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-seconds:after{
   content:"seconds";
}
:lang(en) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-left:after{
   content:"left before the end of the campaign!";
}
:lang(en) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-done:after{
   content:"Campaign complete!";
}


:lang(pl) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-day:after{
    content:"dni";
}
:lang(pl) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-hourse:after{
    content:"godziny";
}
:lang(pl) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-minute:after{
    content:"minuty";
}
:lang(pl) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-seconds:after{
    content:"sekundy";
}
:lang(pl) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-left:after{
    content:"pozostało do końca promocji!";
}
:lang(pl) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-description-akciya-countdown-l-done:after{
    content:"Ackia ukończona!";
}






:lang(ru) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-akciya-countdown-numbers-days:after{
   content:"days";
}
:lang(ru) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-akciya-countdown-numbers-hours:after{
   content:"hours";
}
:lang(ru) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-akciya-countdown-numbers-minutes:after{
   content:"minutes";
}
:lang(ru) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-akciya-countdown-numbers-seconds:after{
   content:"seconds";
}




:lang(en) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-akciya-countdown-numbers-days:after{
   content:"days";
}
:lang(en) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-akciya-countdown-numbers-hours:after{
   content:"hours";
}
:lang(en) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-akciya-countdown-numbers-minutes:after{
   content:"minute";
}
:lang(en) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-akciya-countdown-numbers-seconds:after{
   content:"seconds";
}



:lang(uk) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-akciya-countdown-numbers-days:after{
   content:"days";
}
:lang(uk) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-akciya-countdown-numbers-hours:after{
   content:"hours";
}
:lang(uk) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-akciya-countdown-numbers-minutes:after{
   content:"minutes";
}
:lang(uk) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-akciya-countdown-numbers-seconds:after{
   content:"seconds";
}


:lang(pl) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-akciya-countdown-numbers-days:after{
   content:"dni";
}
:lang(pl) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-akciya-countdown-numbers-hours:after{
   content:"godziny";
}
:lang(pl) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-akciya-countdown-numbers-minutes:after{
   content:"minuty";
}
:lang(pl) #hotengine-shop-product-description-akciya-countdown-block .hotengine-shop-product-akciya-countdown-numbers-seconds:after{
   content:"sekundy";
}


-->
</style>


lang(en) or lang(ru) is the language for which the corresponding label will be, and then the block itself is specified for which to change the label.


How to use the Timer on other pages?
Insert the following code to use our countdown timer:
Code: JavaScript
<div id="hotengine-shop-product-description-akciya-countdown-block"><div id="hotengine-shop-product-description-akciya-countdown"></div><div class="hotengine-shop-product-akciya-countdown-numbers"><span class="hotengine-shop-product-akciya-countdown-numbers-days"><i></i></span><span class="hotengine-shop-product-akciya-countdown-numbers-hours"><i></i></span><span class="hotengine-shop-product-akciya-countdown-numbers-minutes"><i></i></span><span class="hotengine-shop-product-akciya-countdown-numbers-seconds"><i></i></span></div><span class="hotengine-shop-product-description-akciya-countdown-l-left"></span></div>  

<link rel="stylesheet" type="text/css" href="/templates/javascript_timer_countdown/hotengine_timer_countdown.css" />
<script src="/templates/javascript_timer_countdown/hotengine_timer_countdown.js"></script>
<script>
document.addEventListener("DOMContentLoaded", () => {
    let timerperiod = 5 * 12 * 60 * 60 * 1000; // timer period, in the example 5 days 12 hours ( 5*12 ...) (for example, here the date is constantly shifting, i.e. current date + XX days.)

    // cookies last visit (subtract last visit time)
    let cookieName = `cookie_lastvisit_countdown_timer`;
    let cookieValue = document.cookie.split(`;`).find(c => c.trim().startsWith(`${cookieName}=`))?.split(`=`)[1];
    
    let cookie_lastvisit_minus = 0;
    if (cookieValue && cookieValue !== "null") {
        cookie_lastvisit_minus = new Date().getTime() - parseInt(cookieValue);
    } else {
        cookie_lastvisit_minus = 0;
    }

    let checkdate = timerperiod - cookie_lastvisit_minus; // to check the date of the last visit and the end of the promotion
    let counterdisable = false;

    if (checkdate > 0) {
        counterdisable = false;
    } else {
        cookie_lastvisit_minus = 0;
        counterdisable = true;
    }

    let cookie_lastvisit_countdown_timerv = new Date().getTime() - cookie_lastvisit_minus;
    document.cookie = `${cookieName}=${cookie_lastvisit_countdown_timerv}; path=/;`;
    // cookies last visit (subtract last visit time)

    let ts = new Date().getTime() + timerperiod - cookie_lastvisit_minus; // set the promotion end date
    hotengine_inittimer("hotengine-shop-product-description-akciya-countdown-block", new Date(ts));
});
</script>

To change the counter labels, open the style file /templates/javascript_timer_countdown/hotengine_timer_countdown.css, copy its code, and paste it on the page to modify the labels.

Changing site blocks and the design editor

Main site blocks and ways to change the design

Main site blocks

ID and Classes of the main site blocks.





#hotengine-wrapper

#hotengine-header

GRID *
#hotengine-content-container
.hotengine-wrap-container-side-left .menu_position_top .hotengine-wrap-container-side-right
#hotengine-content
.hotengine-wrap-container-side-center
«page type»


.menu_position_buttom


#hotengine-footer


* - The main inner content block is implemented using CSS Grid:
CSS Grid
Code: CSS
/*CONTENT GRID*/

#hotengine-content-container { display: grid;
  grid-template-areas:"container-left container-center container-right";
  grid-template-columns:0% 1fr 0%;
  margin:0 auto; width:100%;
}

#hotengine-content-container[data-hasside="both"]{
  grid-template-areas:"container-left container-center container-right";
  grid-template-columns: auto 1fr auto;
}
#hotengine-content-container[data-hasside="left"]{
  grid-template-areas:"container-left container-center";
  grid-template-columns: auto 1fr;
}
#hotengine-content-container[data-hasside="right"]{
  grid-template-areas:"container-center container-right";
  grid-template-columns: 1fr auto;
}

.hotengine-wrap-container-side-center { grid-area: container-center; vertical-align:top; margin:0 auto; width:100%;}
.hotengine-wrap-container-side-left   { grid-area: container-left; vertical-align:top; margin:0 auto; width:auto; max-width:270px;  }
.hotengine-wrap-container-side-right  { grid-area: container-right; vertical-align:top; margin:0 auto; width:auto; max-width:270px; }

.menu_position_top { display:block;    width:100%;  }
.menu_position_buttom { display:block; width:100%; }

@media (max-width:767px){
#hotengine-content-container[data-hasside="both"]{
  grid-template-areas:"container-center container-left container-right";
  grid-template-columns: 1fr auto auto;
}
#hotengine-content-container[data-hasside="left"]{
  grid-template-areas:"container-center container-left";
  grid-template-columns: 1fr auto ;
}
#hotengine-content-container[data-hasside="right"]{
  grid-template-areas:"container-center container-right";
  grid-template-columns: 1fr auto ;
}
}
/*CONTENT GRID*/

data-hasside - an additional attribute of the #hotengine-content-container element, which indicates the presence of left and right blocks.
  • [data-hasside="left"] - left block/menu is present
  • [data-hasside="right"] - right block/menu is present
  • [data-hasside="both"] - both left and right blocks/menus are present


Inside these blocks will be the content you created, or menus.
Each «page type» is marked with a corresponding block, with a specific ID assigned.
For example:
  • Pages - #hotengine-content-page
  • Article catalog - #hotengine-content-blog
  • Product catalog - #hotengine-content-shop
  • Product catalog (manufacturers) - #hotengine-content-shop
  • Product catalog (collections) - #hotengine-content-shop

This block is created inside the #hotengine-content element

Additionally, on category pages where there is a child list of pages, a class is added:
  • Product catalog - .hotengine-content-shop-category
  • Product catalog (collections) - .hotengine-content-shop-collection
  • Product catalog (manufacturers) - .hotengine-content-shop-producer
  • Article catalog - .hotengine-content-blog-category

For Blocks/Menus of the article list, an additional block is created (can be disabled in settings):
Recent articles menu - #hotengine-content-menu-lastblogpost

How to change the site design

You can change the site design in the Design editor. With it, you can set the main colors of elements, sizes and positions of some elements, change the site header, and more.
Using the mouse pointer, you can change the height of the site header, logo size, position of the main menu and slogan.


How to create your own site header design?


Create a Block/Menu with placement in the Header and place the necessary elements in it. For example, a Div with a phone number, and a Div with information about the company (do not forget to assign them the appropriate class or id for subsequent reference by the given values).
Open the design editor, set the position and design properties for the created elements in CSS styles.
In the same way, you can create any graphic elements on the site and place them in the places you need.
Using built-in elements and short codes for layout.
In addition to creating your own elements, the BooStore.pro platform has a number of predefined classes and IDs that allow you to quickly and conveniently use basic store elements without having to write them from scratch.

Which elements already have built-in classes or IDs:
  • "Add to cart" button
  • Shopping cart
  • "Add to favorites" icon
  • "Add to comparison" icon
  • All basic product card elements: price, availability, characteristics, description block, tabs in the product card
  • Page titles
  • Product widgets
  • Mobile menu
  • Product variant titles
  • Each page has a unique class or ID, and the parent element id="hotengine-wrapper" contains the identifier of the currently open page.
Most functional elements on the site already have unique identifiers (IDs) or classes that will not be changed during platform updates, and they can be used when creating your own layout or page design.

How to use built-in elements in your own design:
To insert some elements into your own layout or template, you can use short codes.
For example:
  • Shopping cart icon with its contents
  • "Add to cart" icon
  • "Add to favorites" icon
  • "Product comparison" icon with its contents
  • Widgets
Using short codes allows you to quickly and correctly integrate standard store elements into your own layout without errors.

CSS recommendations:
  • Write CSS styles in the platform design editor.
  • The file is automatically minified, which speeds up the site and improves SEO.
  • You can create custom styles for any elements, including built-in IDs and classes, as well as for your own blocks, to fully control the appearance of the site.
With built-in classes, IDs and short codes, you can create professional and unique layouts, combining your own blocks with ready-made platform elements. This reduces development time and guarantees correct display of all store functions.

How to reset the design?

To return the default value, open the Design editor and delete the current value for the desired element or click the "Restore default value" button.

CSS styles

You can use CSS to style any elements on the site. To select an element, right-click on the element and "Inspect element". Copy the ID or Class of the object and paste it into the "CSS styles" tab in the design editor.

If you are using a pluggable template, its styles have lower priority than some of the values specified above. Before using a pluggable template, we recommend restoring the default design values first.

Default CSS styles: CSS file Main site blocks
CSS text value styles:

Templating

Currently, we use special markup for elements marked with "hotengine-" classes, an ordered structure for displaying elements, as well as hidden data. Almost all labels on the site are implemented using CSS after elements.
If shifting and positioning of elements cannot be done using CSS, you can use Javascript and move objects on the page.
Changing the position of some elements using Javascript.
Code: html
<script>
document.addEventListener("DOMContentLoaded", () => {
    const el = document.querySelector(`.hotengine-shop-product-desc-block .hotengine-shop-product-producer`);
    const newproducer = el ? el.innerHTML : null;

    if (newproducer && newproducer !== "" && newproducer !== "undefined") {
        el.style.display = "none";
        const skuBox = document.querySelector(`.hotengine-shop-product-sku-box`);
        if (skuBox) {
            skuBox.insertAdjacentHTML("afterend", `${newproducer}`);
        }
    }
});
</script>


In this example, we check if a manufacturer is specified. If a manufacturer is specified, hide it and place it after the "Product code" field.

"Wrapping" elements using Javascript.
Code: html
<script>
  document.addEventListener("DOMContentLoaded", () => {
    document.querySelectorAll(`.element`).forEach(el => {
        const wrapper = document.createElement("div");
        wrapper.className = "new";
        el.parentNode.insertBefore(wrapper, el);
        wrapper.appendChild(el);
    });
});
</script>

As a result, the object with the class element will be "wrapped" in a div with the class new (<div class="new"><span class="element"></span></div>)

Templates

In addition to basic styles in the design editor, you can install ready-made templates.
Template catalog - https://templates.boostore.pro/

Editor

The platform includes the TynyMce HTML editor, through which you can design pages, product cards, articles, and blocks/menus. The editor supports image insertion and ready-made «Codes» for displaying store categories, product lists, article lists, on any pages. Built-in codes allow you to insert, for example, on the main page, a list of specific products with specified parameters (product list generator separate instructions) or a list of categories, including in Blocks/Menus (Widget with store categories).

Editor demonstration

Text formatting on BooStore.pro using AI

Page and style design using AI

This guide will teach you how to create a professional design for your products using Artificial Intelligence (Gemini, ChatGPT) and the built-in tools of the platform.

1. Theory: Basic Concepts (CSS, Classes, ID)

Before giving a task to AI, you need to understand how a browser interprets design.

CSS (Cascading Style Sheets) The "language of beauty." If HTML is the skeleton, CSS is the clothing, makeup, and hair. It tells the browser: "Make this text red and this button round."
ID (#) — Identifier A unique name for an element. Like a passport number. No two identical IDs can exist on one page. In CSS, marked with a hash.
Example: #tabs-1
Class (.) — Class A group name. Like school uniforms. You can apply one class to dozens of elements. In CSS, marked with a dot.
Example: .my-price-style

How to Find Elements (Browser Inspector)

To let AI know what to style, find the block ID in Hotlist:

  1. Open a product page on your site.
  2. Right-click on a tab name or text.
  3. Select "Inspect".
  4. The panel will open. Look for the line highlighting the block. Example:
    <div id="tabs-1">...</div>

Important (Nesting Principle): On BooStore.pro, it is best to use styles in combination with a "parent" block. This ensures your design applies only to the specific section and won't break other parts of the site.

In the inspector, you will see a hierarchy (element tree): every block is inside another, larger container. For product tabs, the parent is #hotengine-shop-content-tabs.

Therefore, to style the first tab, your CSS path should be: #hotengine-shop-content-tabs #tabs-1.

This tells the browser: "Find the block with ID tabs-1, but only if it's inside hotengine-shop-content-tabs."

STEP 1: Request to AI

Give the text to AI and ask for styling by specifying the ID found.

"I have a product description. Style it nicely. Separate CSS and HTML. Use a light theme. Output two blocks: CSS inside <style> for #hotengine-shop-content-tabs #tabs-1 and separate HTML for the text."
STEP 2: Test and Transfer

Paste both blocks (Style and HTML) into the product to check the result.

Once the design is approved:

  1. Copy everything between the <style> tags (do NOT copy the tags themselves).
  2. Go to Hotlist Admin > Site Design > Design Editor > CSS tab.
  3. Scroll to the bottom and paste your code. Add a comment: /* Product tab text style */
STEP 3: Cleaning Up (Crucial!)

After saving the style in the Design Editor, delete it from the product text. Otherwise, the code will duplicate, slowing down your site.

// BEFORE (In product):
<style> #tabs-1 { background: #000; } </style>
<div class="content"> Your text... </div>

// AFTER (In product):
<div class="content"> Your text... </div>
(Style now lives in the Design Editor)

This allows you to update all product pages at once simply by editing the CSS in the Design Editor.

Cheat Sheet: BooStore.pro Selectors

All content is created inside #hotengine-content. Use these for AI prompts:

Product Tabs
Parent + ID path:
• Tab 1: #hotengine-shop-content-tabs #tabs-1
• Tab 2: #hotengine-shop-content-tabs #tabs-2
Full Product Description .hotengine-shop-product-desc-block .hotengine-shop-product-description-text
Blog & Articles
• List description: #hotengine-content-blog #page_content .hotengine-blog-page-list-block .contenth .contenth_i
• Full article: #hotengine-content-blog #page_content .contenth .contenth_i

Pro Tip: Use this method to style specs, shipping info, or video tabs. One central CSS file lets you manage thousands of products effortlessly.




Statistics

Google Analytics:


You can enable visitor tracking using Google Analytics on the Settings page, in the Statistics/Google Analytics tab.

When using tracking tags, standard e-commerce events will be transmitted for Google Analytics 4 or Google Tag Manager. Additionally, on the order checkout page or form submission page, you can additionally install custom conversion codes.
Event descriptions:
Google Analytics 4: https://developers.google.com/analytics/devguides/collection/ga4/events
Google Tag Manager: https://developers.google.com/tag-platform/tag-manager/datalayer
Additionally, you can implement custom tag transmission using JavaScript, Short codes and hotengine-markers Microdata, which allow replacing dynamic data.

  • add_to_cart – adding a product to the cart
  • add_to_wishlist – adding a product to favorites
  • begin_checkout – beginning the checkout process
  • purchase – successful order placement
  • remove_from_cart – removing a product from the cart
  • search – site search
  • select_item – selecting a product variant
  • generate_lead – sending data through a form
  • sign_up – registration
  • view_cart – viewing the cart
  • view_item – viewing a product card
  • view_item_list – viewing a product list (category, selection, recommendations, etc.)

Facebook Pixel:


 The Facebook Pixel tracking ID can be specified in the general site settings, in the «Statistics» tab. The pixel will transmit data about page visits (PageView), add to cart events (AddToCart), product view (ViewContent), checkout initiation (InitiateCheckout) and order completion (Purchase). The product price is formed in USD at your site's exchange rate.

Additionally, you can create a menu block to generate the pixel with product data yourself.
Instructions

Attention! When creating pixel code not through the site settings, you must first add the main pixel code beforehand. To do this, create a block/menu with the main pixel code and place it in service tags, displayed on all pages. In this case, you do not need to specify the pixel code in the general site settings. If the pixel code is specified in the main settings, then the Facebook Products Merchant code is already installed on the site.

Menu block for generating pixel with product data


Create a block/menu with the following code:
Code: JavaScript
<script>
fbq('track', 'ViewContent', {
content_name: '{HOTENGINE-SC:shop_cat_page_title}',
content_ids: ['{HOTENGINE-SC:shop_cat_page_id}'],
content_type: 'product',
value: {HOTENGINE-SC:shop_cat_page_price},
currency: '{HOTENGINE-SC:shop_cat_page_currency_iso}'
});
</script>


Show Block/Menu on pages: Only on Store pages
Enter characters upon detection of which to display Block/Menu: htm
Enter characters upon detection of which NOT to display Block/Menu: cart



If you need to add an event after submitting a request through a Form, then after the successful data submission text, add the following code:
Code: html
<script>
fbq('track', 'Purchase');
</script>

Referral tails:

    The site supports the use of Referral tails. When ordering products or sending an email through the feedback form, data about the source of transition to your site will be added to the email. Also when using UTM parameters (URL Builder), this data will be added to the email.
    In addition to standard URL builder data, source separation by groups is available, which are used in sales statistics to separate sources and make conversion counting more convenient. The group value can be set using the GET variable "hotengine_referral_group". If the value is not specified, and utm_source is specified, it will be used to specify the hotengine_referral_group.
    Data about the transition source may be hidden by the visitor's browser settings or by the source site's secure protocol. Additionally, you can group orders using the "shop_cart_statistic_group" variable in the link, or manually after order placement.

    You can enable Referral tails on the Settings page, in the Statistics tab.

    Example link with UTM markup:
    https://boostore.pro/?utm_source=google&utm_medium=cpc&utm_term=slova&utm_content=soderjimoe&utm_campaign=nazvnie

    Example link with Yandex Direct auto-markup and UTM markup:
    https://boostore.pro/?utm_source=yandex_{source_type}&utm_medium=cpc&utm_term={keyword}&utm_campaign=id:{campaign_id}&utm_content=ad:{ad_id}|gbid:{gbid}|phrase:{phrase_id}|param1:{param1}|position_type:{position_type}|position:{position}|source:{source}|source_type:{source_type}|param2:{param2}
    Full instructions

    Example link with Google Adwords auto-markup and UTM markup:
    https://boostore.pro/?utm_source=google_adwords_{network}&utm_medium=cpc&utm_term={keyword}&utm_campaign={campaignid}&utm_content=creative:{creative}|from:{ifsearch:search}{ifcontent:content}|matchtype:{matchtype}|adgroupid:{adgroupid}|feeditemid:{feeditemid}|targetid:{targetid}|device:{device}|adposition:{adposition}|placement:{placement}|network:{network}|param1:{param1}|param2:{param2}
    Full instructions

Integration with «1C», «ERP», CRM systems and CommerceAPI

Automatic order export / Sending POST order data in JSON format

You can enable automatic order export in the site settings, in the «Shop» tab, by specifying the path for data submission.
A POST request will be sent to the specified address with all order data, including customer contact information and the list of products. Contact details and order information will be transmitted in JSON format via POST request.
For example, in 1C you can implement order reception via «HTTP Service»->«SiteExchange» -> «POSTData»

After placing an order, a POST request will be sent to the above address with the following data:
 Code: JSON
{
  "ORDER": {
    "buyer_name": "NAME",
    "buyer_soname": "SONAME",
    "buyer_phone": "PHONENUMBER123",
    "buyer_email": "email@email.com",
    "buyer_address": "ADDRESS",
    "delivery_storehouse_title": "Extend PICKUP POINT (Selected)",
    "buyer_address_eform0": "Extend ADDRESS (Selected)",
    "buyer_address_eform1": "Extend ADDRESS (Region)",
    "buyer_address_eform2": "Extend ADDRESS (City)",
    "buyer_address_eform3": "Extend ADDRESS (Street)",
    "buyer_address_eform4": "Extend ADDRESS (Home number)",
    "buyer_address_eform5": "FLAT",
    "buyer_address_eform6": "Extend ADDRESS (Branch number)",
    "buyer_sendedtext": "ADD TEXT",
    "post": "1596538754",
    "lang": "en",
    "form_delivery": "",
    "form_delivery_country_code": "",
    "order_id": "XXXXX",
    "customer_id": "XXXX",
    "order_discount": "",
    "order_hash": "55d4ed2ed42b2c116d9927c2b2ce7fef",
    "time": "2025-06-28T12:31:49+00:00",
    "delivery": "",
    "delivery_id": 0,
    "abtesting": 0,
    "referral_group": "",
    "group": "",
    "referral_url": "https://boostore.pro/....",
    "referral_utm": "",
    "site_id": "10954",
    "site_url": "boostore.pro",
    "transaction_id": "XXXXX",
    "total": 2264,
    "currency": "UAH",
    "shipping": "0",
    "items": [
      {
        "id": "284430",
        "name": "Adidas Originals Streetball Trainers FX9701 (42)",
        "sku": "200976_42",
        "sku_parent": "200976",
        "variant": "42",
        "category": "sport_shoes",
        "quantity": "1",
        "price": "686",
        "currency": "UAH",
        "variations_id": "409151"
      },
      {
        "id": "284436",
        "name": "Shoe bag with pocket Kite Education College",
        "sku": "200982",
        "sku_parent": "200982",
        "variant": "",
        "category": "bags_for_shoes",
        "quantity": "1",
        "price": "736",
        "currency": "UAH",
        "variations_id": 0
      },
      {
        "id": "284438",
        "name": "ASICS Gel-Venture 8 Gs Trainers (43)",
        "sku": "200984_43",
        "sku_parent": "200984",
        "variant": "43",
        "category": "sport_shoes",
        "quantity": "1",
        "price": "842",
        "currency": "UAH",
        "variations_id": "409154"
      }
    ]
  }
}


If after sending the request your service returns JSON data containing «Number» or «crm_order_id», an external order number will be added to the order.

Automatic sales statistics export / Sending POST order data in JSON format

You can enable automatic sales statistics export in the site settings, in the «Shop» tab, by specifying the path for data submission.
A POST request will be sent to the specified address with all order data that changes in Sales Statistics. Information will be transmitted via POST request in JSON format.
For example, in 1C you can implement order reception via «HTTP Service»->«SiteExchange» -> «POSTData»
You can also enable external access to your statistics by specifying a «Sales statistics access key».

After changing the order status (except for quick status editing), a POST request in JSON format will be sent to the above address with the following data:
 Code: JSON
{
  "ORDER": {
    "crm_order_id": "123",
    "total": "2264",
    "currency": "UAH",
    "discount": "",
    "discount_before": "",
    "total_before": "2264",
    "currency_before": "UAH",
    "shop_cart_statistic_selldone_datestump_unsted": "0",
    "status": "0",
    "status_pay": "0",
    "allow_online_pay": "0",
    "status_for_customer": "0",
    "delivery_status": "0",
    "products_preview": "",
    "admin_note": "",
    "delivery_selected_id_before": "3482",
    "delivery_selected_id": "3482",
    "delivery_track_id": "",
    "delivery_track_id_link": "",
    "buyer_name": "NAME SONAME",
    "buyer_phone": "PHONENUMBER123",
    "buyer_address": "ADDRESS",
    "buyer_address_eform0": "Extend ADDRESS (Selected)",
    "buyer_address_eform1": "Extend ADDRESS (Region)",
    "buyer_address_eform2": "Extend ADDRESS (City)",
    "buyer_address_eform3": "Extend ADDRESS (Street)",
    "buyer_address_eform4": "Extend ADDRESS (Home number)",
    "buyer_address_eform5": "Extend ADDRESS (Flat)",
    "buyer_address_eform6": "Extend ADDRESS (Branch number)",
    "buyer_email": "email@email.com",
    "payment_method": "PaymentMethod (Selected)",
    "group": "",
    "referral_group": "",
    "referral_url": "http://boostore.pro",
    "referral_utm": "",
    "site_manager_id_operator": "1",
    "buyer_id": "16532",
    "manager_id_operator": "0",
    "order_products": "284430|284436|284438",
    "order_products_sku": "200976_42|200982|200984_43",
    "order_products_num": "1|1|1",
    "order_products_variations_id": "409151|407678|409154",
    "order_products_prices": "686|736|842",
    "order_products_currency": "UAH|UAH|UAH",
    "order_products_titles": "Adidas Originals Streetball Trainers FX9701|Shoe bag with pocket Kite Education College|ASICS Gel-Venture 8 Gs Trainers",
    "order_products_variations_titles": "42||43",
    "order_products_prices_without_discount": "||",
    "post": "1596578917",

    "Save": "Save",
    "order_id": 63738,
    "order_discount": "",
    "time": "2025-06-28T12:31:49+00:00",
    "delivery": null,
    "delivery_id": "3482",
    "referral_group": "",
    "group": "",
    "referral_url": "http://boostore.pro/ru/pers_shop/sport_shoes/284438.htm",
    "referral_utm": "",
    "site_url": "boostore.pro",
    "transaction_id": 63738,
    "crm_oder_id": "123",
    "total": "2264",
    "currency": "UAH",
    "items": [
      {
        "id": "284430",
        "name": "Adidas Originals Streetball Trainers FX9701",
        "sku": "200976_42",
        "variant": "42",
        "quantity": "1",
        "price": "686",
        "currency": "UAH",
        "variations_id": "409151",
        "price_without_discount": ""
      },
      {
        "id": "284436",
        "name": "Shoe bag with pocket Kite Education College",
        "sku": "200982",
        "variant": "",
        "quantity": "1",
        "price": "736",
        "currency": "UAH",
        "variations_id": "407678",
        "price_without_discount": ""
      },
      {
        "id": "284438",
        "name": "ASICS Gel-Venture 8 Gs Trainers",
        "sku": "200984_43",
        "variant": "43",
        "quantity": "1",
        "price": "842",
        "currency": "UAH",
        "variations_id": "409154",
        "price_without_discount": ""
      }
    ]
  }
}
'status' - '3', deal status // 0 - Not processed, 1 - Order in processing, 3 - Processed, 2 - Canceled, 5 - Canceled (Out of stock), 6 - Canceled (Refusal), delete - Delete order

'status_pay' - '0', Order status // 0-Not specified, 1 - Paid online, not verified, 4 - Paid online and verified, 2 - Paid, 3 - Prepaid, 5 - Awaiting payment

'status_for_customer' - '1', Status for customer // 0 - Not processed, 1 - Processing, 3 - Shipped / Processed, 2 - Canceled

'admin_note' - 'Note to administrator'

'delivery_status' - '0', 0 - Not specified, 1 - Delivered, 2 - Not delivered, 3 - Awaiting shipment, 4 - Handed to courier, 5 - In transit, 6 - Sent to post office, 7 - Sent to recipient address, 8 - Delivered to post office, 9 - Delivered to recipient address

'crm_order_id' - 'XXX', External order code (for use in third-party CRM)

You can learn more about the fields in sales statistics when editing an order.


When changing products in an order, a JSON request is sent with the list of items and the order number:
 Code: JSON
{
  "ORDER": {
    "crm_order_id": "123",
    "order_id": 63738,
    "total": "2264",
    "currency": "UAH",
    "discount": "",
    "discount_before": "",
    "total_before": "2264",
    "currency_before": "UAH",
    "shop_cart_statistic_selldone_datestump_unsted": "0",
    "status": "0",
    "status_pay": "0",
    "allow_online_pay": "0",
    "status_for_customer": "0",
    "delivery_status": "0",
    "products_preview": "",
    "admin_note": "",
    "delivery_selected_id_before": "3482",
    "delivery_selected_id": "3482",
    "delivery_track_id": "",
    "delivery_track_id_link": "",
    "buyer_name": "NAME SONAME",
    "buyer_phone": "PHONENUMBER123",
    "buyer_address": "ADDRESS",
    "buyer_address_eform0": "Extend ADDRESS (Selected)",
    "buyer_address_eform1": "Extend ADDRESS (Region)",
    "buyer_address_eform2": "Extend ADDRESS (City)",
    "buyer_address_eform3": "Extend ADDRESS (Street)",
    "buyer_address_eform4": "Extend ADDRESS (Home number)",
    "buyer_address_eform5": "Extend ADDRESS (Flat)",
    "buyer_address_eform6": "Extend ADDRESS (Branch number)",
    "buyer_email": "email@email.com",
    "payment_method": "PaymentMethod (Selected)",
    "group": "",
    "referral_group": "",
    "referral_url": "http://boostore.pro",
    "referral_utm": "",
    "site_manager_id_operator": "1",
    "buyer_id": "16532",
    "manager_id_operator": "0",
    "order_products": "284430|284436|284438",
    "order_products_sku": "200976_42|200982|200984_43",
    "order_products_num": "1|1|1",
    "order_products_variations_id": "409151|407678|409154",
    "order_products_prices": "686|736|842",
    "order_products_currency": "UAH|UAH|UAH",
    "order_products_titles": "Adidas Originals Streetball Trainers FX9701|Shoe bag with pocket Kite Education College|ASICS Gel-Venture 8 Gs Trainers",
    "order_products_variations_titles": "42||43",
    "order_products_prices_without_discount": "||",
    "post": "1596578917",

    "Save": "Save",
    
    "order_discount": "",
    "time": "2025-06-28T12:31:49+00:00",
    "delivery": null,
    "delivery_id": "3482",
    "referral_group": "",
    "group": "",
    "referral_url": "http://boostore.pro/ru/pers_shop/sport_shoes/284438.htm",
    "referral_utm": "",
    "site_url": "boostore.pro",
    "transaction_id": 63738,
    

    "items": [
      {
        "id": "284430",
        "name": "Adidas Originals Streetball Trainers FX9701",
        "sku": "200976_42",
        "variant": "42",
        "quantity": "1",
        "price": "686",
        "currency": "UAH",
        "variations_id": "409151",
        "price_without_discount": ""
      },
      {
        "id": "284436",
        "name": "Shoe bag with pocket Kite Education College",
        "sku": "200982",
        "variant": "",
        "quantity": "1",
        "price": "736",
        "currency": "UAH",
        "variations_id": "407678",
        "price_without_discount": ""
      },
      {
        "id": "284438",
        "name": "ASICS Gel-Venture 8 Gs Trainers",
        "sku": "200984_43",
        "variant": "43",
        "quantity": "1",
        "price": "842",
        "currency": "UAH",
        "variations_id": "409154",
        "price_without_discount": ""
      }
    ]
  }
}

Access to sales statistics / JSON


Specify the sales statistics access key in the settings, in the «Shop» tab. If you need to access sales statistics from an external application, you can make a (POST/GET or AJAX) request to «/ajax.php?statistic_sell»

You must specify the key in the request, with MD5 encryption. For example, if your key is «123», in the request it will be «202cb962ac59075b964b07152d234b70».

In this case the request will look like: «/ajax.php?statistic_sell&key=202cb962ac59075b964b07152d234b70»
In the request you can specify sorting or search data (GET/POST parameters), which can be taken from your sales statistics page in the admin center (/page.php?p=statistic_sell&mystat). Sorting and parameter selection is done via GET/POST request, for example, «&sort_dateperiod=1week» means that sales statistics for the week will be displayed.

Data is displayed in JSON format.

Please note that if you use visitor-accessible page requests, they will be able to access your sales statistics using your key.

Access to store price list / Full CSV price list export


Specify the store price list access key in the settings, in the «Shop» tab. The full price list export is available at «/csv_export_products.csv»

You must specify the key in the request, with MD5 encryption. For example, if your key is «123», in the request it will be «202cb962ac59075b964b07152d234b70».

In this case the request will look like: «/csv_export_products.csv?key=202cb962ac59075b964b07152d234b70»
In the request you can specify sorting data and field selection, which can be taken from your export page in the admin center (/page.php?p=submit_catalog_page&subpage&export_from_shop). Sorting and parameter selection is done via GET/POST request, for example, «&export_product_access=export_product_access» means that the field with product access data will be exported.

Data is displayed in CSV format.

The export file is cached to reduce load and is updated once a day. You can delete the cache using the «Clear XML/CSV export cache» button.

Example: https://templatedemo437544.boostore.pro/csv_export_products.csv?key=202cb962ac59075b964b07152d234b70

Additionally, a data exchange mechanism via API, similar to WooCommerce API, is implemented. The API allows you to receive and update information about orders, products, and categories. Instructions and settings are in the «Shop» section - «JSON Commerce API Data Exchange».

Commerce API (Products/Categories/Sales Statistics)

Commerce API — Quick Manual on Methods

Access Key

To work with the API, you need an access key (Consumer Secret), which you create in the section "Settings", "Shop", "Sales Statistics Access". The key is generated based on the Sales Statistics Access Key.

API Methods (HTTP)

All requests go to the base URL of your site, for example: https://site.com/api/commerce/

1. Sales Statistics

MethodURLDescription
GET/ordersGet order statistics
GET/orders/{id}Get statistics of a single order by ID
GET/crm_orders/{id}Get statistics of a single order by external CRM ID
DELETE/orders/{id}Delete order by ID
DELETE/crm_orders/{id}Delete order by external CRM ID
POST/ordersAdd a new order
UPDATE/orders/{id}Update order by ID (PATCH/PUT/UPDATE)
UPDATE/crm_orders/{id}Update order by external CRM ID (PATCH/PUT/UPDATE)

2. Products

MethodURLDescription
GET/productsGet product list
GET/products/{id}View single product by ID
GET/products/sku/{sku}View single product by SKU (product code)
POST/productsMass adding of new products
UPDATE/products/{id}Update product by ID (PATCH/PUT/UPDATE)
UPDATE/products/sku/{sku}Update product by SKU (product code) (PATCH/PUT/UPDATE)
UPDATE/productsMass update of multiple products (PATCH/PUT/UPDATE)
DELETE/products/{id}Delete product by ID
DELETE/products/sku/{sku}Delete product by SKU (product code)

3. Product Categories

MethodURLDescription
POST/products/categoriesBulk add and update categories
GET/products/categoriesGet a list of product categories
GET/products/categories/{id}Get a category by ID
GET/products/categories/id/{id}Get a category by ID (alternative option)
GET/products/categories/name/{name}Get a category by name
UPDATE/products/categoriesBulk update multiple categories (PATCH/PUT/UPDATE)
UPDATE/products/categories/{id}Update a category by ID (PATCH/PUT/UPDATE)
UPDATE/products/categories/id/{id}Update a category by ID (alternative option)
UPDATE/products/categories/name/{name}Update a category by name

Parent category parameters

ParameterTypeDescription
category_parent_id int Parent category ID. Used with the highest priority if provided.
category_parent_name string Latin name (alias / slug, URL for opening the category) of the parent category. Used if category_parent_id is not provided. In case of duplicates, you can specify category_lang.
category_lang string Category language. Used to resolve conflicts of identical category_parent_name in different languages.

How it works:

  1. category_parent_id is checked first.
  2. If not provided – category_parent_name is used.
  3. If names match – an additional check by category_lang is performed.

Special rule:
To add a category to the root (main) category, you must specify category_parent_name = "main" and also set category_lang – the language of the parent category.

Update and Deletion:
update_exists (bool) – if true, updates the category if it already exists (default false).
delete (bool) – if true, the category will be deleted.

4. Producers

MethodURLDescription
POST/products/producersBulk add and update producers
GET/products/producersGet a list of producers
GET/products/producers/{id}Get a producer by ID
GET/products/producers/id/{id}Get a producer by ID (alternative option)
GET/products/producers/name/{name}Get a producer by name
UPDATE/products/producersBulk update multiple producers (PATCH/PUT/UPDATE)
UPDATE/products/producers/{id}Update a producer by ID (PATCH/PUT/UPDATE)
UPDATE/products/producers/id/{id}Update a producer by ID (alternative option)
UPDATE/products/producers/name/{name}Update a producer by name

Producer binding parameters

ParameterTypeDescription
producer_parent_id int Parent producer (group) ID. Used with the highest priority if provided.
producer_parent_name string Latin name (alias / slug, URL for opening the producer). Used if producer_parent_id is not provided. In case of duplicates, you can specify producer_lang.
producer_lang string Producer language. Used to resolve conflicts of identical producer_parent_name in different languages.

How it works:

  1. producer_parent_id is checked first.
  2. If not provided – producer_parent_name is used.
  3. If names match – an additional check by producer_lang is performed.

Special rule:
To add a producer to the root (main) producer group, you must specify producer_parent_name = "main" and also set producer_lang – the language of the parent group.

Update and Deletion:
update_exists (bool) – if true, updates the producer if it already exists (default false).
delete (bool) – if true, the producer will be deleted.

5. Collections

MethodURLDescription
POST/products/collectionsBulk add and update collections
GET/products/collectionsGet a list of collections
GET/products/collections/{id}Get a collection by ID
GET/products/collections/id/{id}Get a collection by ID (alternative option)
GET/products/collections/name/{name}Get a collection by name
UPDATE/products/collectionsBulk update multiple collections (PATCH/PUT/UPDATE)
UPDATE/products/collections/{id}Update a collection by ID (PATCH/PUT/UPDATE)
UPDATE/products/collections/id/{id}Update a collection by ID (alternative option)
UPDATE/products/collections/name/{name}Update a collection by name

Collection binding parameters

ParameterTypeDescription
collection_parent_id int Parent collection ID. Used with the highest priority if provided.
collection_parent_name string Latin name (alias / slug, URL for opening the collection). Used if collection_parent_id is not provided. In case of duplicates, you can specify collection_lang.
collection_lang string Collection language. Used to resolve conflicts of identical collection_parent_name in different languages.

How it works:

  1. collection_parent_id is checked first.
  2. If not provided – collection_parent_name is used.
  3. If names match – an additional check by collection_lang is performed.

Special rule:
To add a collection to the root (main) collection, you must specify collection_parent_name = "main" and also set collection_lang – the language of the parent collection.

Update and Deletion:
update_exists (bool) – if true, updates the collection if it already exists (default false).
delete (bool) – if true, the collection will be deleted.

6. Sorting and Pagination

For the methods /orders and /products, parameters for pagination and sorting are available:

Pagination Parameters

ParameterTypeDescription
pageintPage number (default 1)
per_pageintNumber of items per page (default 90, maximum 2000)

Sorting Parameters

ParameterTypeAllowed valuesDescription
orderbystringid, title, price, date, viewsField to sort by
orderstringasc, descSort direction

Language options

ParameterТипAllowed valuesDescription
lstringru, ua, en, de, fr, es, it, plLanguage for displaying values

Additional for Orders

You can filter orders by date and status:

  • ?after=YYYY-MM-DD — Start date (ISO format)
  • ?before=YYYY-MM-DD — End date
  • ?status=pending|processing|on-hold|completed|cancelled|0|1|2|3|5|6|7|8 — Order status (can specify WooCommerce textual status or numeric code)
    • 0 — Pending
    • 1 — Processing
    • 7 — Processing, awaiting shipment (on-hold)
    • 3 — Completed
    • 8 — Completed and closed
    • 2 — Cancelled
    • 5 — Cancelled: out of stock
    • 6 — Cancelled: refusal
  • ?show_deleted=1 — Show hidden orders

Examples

GET /orders?page=2&per_page=100&after=2024-06-01&before=2024-06-30
GET /products?orderby=price&order=asc&per_page=50

Example of Authorization in Request

The request includes keys:

 Code: PHP
?consumer_secret=YOUR_SECRET (warning: do not publish the key publicly!)

Or via Authorization header with OAuth 1.0a.



Add New Order (POST /orders)

To create a new order via API, you need to send a POST request to /orders with a JSON body.
At minimum, you must specify:

  • email — Customer's email (required!)
  • line_items — List of items to add

Order Parameters

When creating an order, you can specify additional fields, for example:

{
  "first_name": "Name",
  "last_name": "Surname",
  "email": "alex@example.com",
  "phone": "+380671112233",
  "address": "Full address if address eform is not used",
  "buyer_address_eform1": "State",
  "buyer_address_eform2": "City",
  "buyer_address_eform3": "Street",
  "buyer_address_eform4": "House number",
  "buyer_address_eform5": "Flat",
  "postcode": "01001",
  "total": "999",
  "status": "processing",
  "status_for_customer": "processing",
  "line_items": [ ... ]
}

About the total field:

  • total — Final order amount (string or number). If specified, this value will be used as the final order price.
  • If total is not specified, the order amount will be automatically calculated based on the sum of the added line_items.
  • The total field is optional and can be used for orders without products.

line_items Format

The line_items parameter is an array of items. Each item is an object with the following fields:

"line_items": [
  {
    "product_id": 478734,
    "quantity": 1,
    "price": 100,
    "currency": "USD"
  },
  {
    "product_id": 478268,
    "quantity": 10,
    "variation": "51"
  },
  {
    "product_id": 478266,
    "quantity": 1,
    "variation_id": 735302
  }
]
  • product_id — Product ID (required!).
  • quantity — Quantity of units (required!).
  • price — (optional) If specified, this price will be used instead of the site's calculated price.
  • currency — (optional) Currency for this specific product (e.g., USD or UAH). If specified and different from the order's main currency, the price will be automatically converted.
  • variation_id — ID of the product variation — use this to specify a variation if available.
  • variation — Name or code of the variation — used if variation_id is not specified. If both are provided, variation_id takes priority.

Important: If the main order currency is not specified, the site's default currency will be used.

If an item's currency differs from the main currency — the price will be converted automatically.


Updating Products

Product updates are done using the HTTP UPDATE method (or PATCH/PUT) by URL with the product ID or SKU, or multiple products in one request:

  • /products/{id} — update product by ID
  • /products/sku/{sku} — update product by SKU
  • /products — bulk update multiple products (up to 5000 in one request)

When using bulk update, the path /products does not contain an ID or SKU. In this case, you must send an array of product objects in the products parameter. Each element must contain at least id or sku. If id is specified, it has priority and can replace sku. If id is not specified, the search is done by sku.

The update request must contain the full product data in JSON format. All sent data replaces the existing values, including:

  • Main product properties (title, description, prices, status, etc.)
  • Attributes
  • Variations
  • Images
  • Categories and tags
  • Additional settings and meta fields

Variations are updated using the following logic for each variation in the variations array:

  1. If id is specified, the update is done by it.
  2. If id is missing but sku is specified, the update is done by SKU.
  3. If both id and sku are missing but title is specified, the update is done by title.
  4. If no match is found by these, a new variation is created with the given parameters.

Updating by SKU is convenient when the variation ID is unknown but a unique code is available.

During an update, all fields included in the JSON will overwrite the current product values; to leave a field unchanged, simply omit it from the request.

  • Duplicate variations: If the variations array contains duplicates by SKU or title, they will be skipped — the same variation will not be added twice.
  • Main image: In the images array, the image at index 0 is considered the main one. If images[0] is missing or not uploaded, the first successfully uploaded image will be used as the main one.
  • Maximum images: You can upload up to 10 images for a single product. If you try to upload more, extra files will be ignored.
  • Image handling:
    • Delete images: To delete an image by index, set the images array element to "delete". For example, images[2] = "delete" will remove the file at index 2. You can delete and upload at the same time by setting multiple keys: images[3] = "delete", images[1] = "https://...".
    • Skipping image indexes: If you specify an empty string or false, that index will be skipped without an error.
    • Overwrite images: The images_replace parameter: If true, the system will overwrite existing image files for the given indexes (removes old file and cache). If false or not set — overwriting is disabled.
    • Skip occupied indexes: The images_skip_index parameter: If true and the index is occupied but overwriting is disabled, the system will find the next free index and save the file there. If false or not set — the file will be saved strictly to the given index.
    • Save to new index on conflict: The images_replace_new_index parameter: If true, then if the index is occupied and both overwriting and auto-skip are disabled, the file will be saved under the next free index. If all three parameters are false or not set and the index is occupied — the file will not be uploaded.

Product Parameters


You can see the available values in the example code below. There is also additional explanation of some values that may be useful.
  • Available values for price_for

    For each product, you can specify the price_for parameter that defines the unit for pricing. You can use a numeric code or text (for example, “Per 1 kg”). Here is the complete list of values:

    Show / Hide
    • 0 — Not specified
    • 1 — Per 1 pc
    • 2 — Per 100 pcs
    • 3 — Per 1000 pcs
    • 4 — Per 1 package
    • 5 — Per 1 kg
    • 6 — Per 1000 kg
    • 7 — Per 1 m² (square meter)
    • 8 — Per 1 meter
    • 9 — Per 1 km
    • 10 — Per set
    • 11 — Per 1 hour
    • 12 — Per 1 day
    • 13 — Per 1 month
    • 14 — Per 1 year
    • 15 — Per hundred square meters
    • 16 — Per acre
    • 17 — Per hectare
    • 18 — Per plot
    • 19 — Per object
    • 30 — Per 1 ml (milliliter)
    • 31 — Per 1 l (liter)
    • 32 — Per 1 km³ (cubic kilometer)
    • 33 — Per 1 m³ (cubic meter)
    • 34 — Per 1 dm³ (cubic decimeter)
    • 35 — Per 1 cm³ (cubic centimeter)
    • 36 — Per 1 mm³ (cubic millimeter)
    • 37 — Per 1 hl (hectoliter)
    • 38 — Per 100 grams
    • 39 — Per 1 pound
    • 40 — Per 1 gram
    • 41 — Per 10 kg
    • 42 — Per 1 quintal (100 kg)
    • 43 — Per 1 ton
    • 44 — Per 1 are
    • 45 — Per 1 pair
    • 46 — Per 1 dozen
    • 47 — Per 1 gallon
    • 48 — Per 1 barrel
    • 49 — Per 1 minute
    • 50 — Per 1 week
    • 51 — Per 1 service
    • 52 — Per 1 trip
    • 53 — Per 1 person
    • 54 — Per 1 vehicle
    • 55 — Per 1 linear meter

    You can use either a numeric value or text — the system will automatically recognize and map it to the correct code.

  • Available values for stock_status

    For each product, you can set the stock_status parameter, which defines the product’s availability status and how it behaves on the site. You can use either a numeric code or a keyword — the system will recognize both.

    Show / Hide
    • 0 — In stock
    • 1 — Out of stock
    • 2 — On order
    • 3 — Out of stock + Hide product from listing
    • 4 — Out of stock + Disable adding to cart
    • 5 — Availability to be confirmed

    You can use either a number or text — the system will automatically detect it and convert it to the correct code.

    If a product is set to 3, it will be hidden from product listings on the site. If it’s set to 4, the product will be visible but cannot be added to the cart. Option 5 shows the buyer that availability needs to be confirmed.

  • Promotion and available values for promotion_expires_job

    For each product, you can set the promotion_expires_job parameter, which controls what happens to a promotion after its end date.
    You can use either a numeric code or a keyword — the system will recognize both.

    Show / Hide
    • 0 — Do nothing (hide the timer)
    • 1 — Move the “Old price” to the main price and remove the old price
    • 2 — Remove the “Promotion” label
    • 3 — Move the “Old price” to the main price and remove the “Promotion” label
    • 5 — Restart the timer for 1 day
    • 6 — Restart the timer for 10 days
    • 7 — Restart the timer with the previous duration (timer date minus last edit date)
    • 8 — Remove the “Promotion” label and delete the “Old price”

    You can use either a number or text — the system will automatically detect it and convert it to the correct code.

    Important: To activate the promotion timer, be sure to set promotion to 1 — this means the promotion is active.

    Also, you must specify the promotion end date in the promotion_expires parameter — this can be given as a UNIX timestamp (for example, time()) or in the format YYYY-MM-DDTHH:MM:SS+00:00 (for example, 2025-06-28T00:00:00+00:00).

  • More values

    Available values for title

    Text (maximum 255 characters) — product name


    Available values for sku

    Text (maximum 100 characters) — product code


    Available values for status
    • 1 — Access open
    • 0 — Access closed (403)

    Available values for xml

    Enable/Disable product export to XML (Google Merchant and others)

    • 1 — Export enabled
    • 0 — Export disabled

    Available values xml_markup

    This parameter controls the application of markups when exporting products to XML (Google Merchant and other advertising catalogs).

    • 0 — On: Markup applied by default
    • 1 — Off: No markups (original price)
    • 2 — Without Rozetka markup
    • 3 — Without Prom.ua markup
    • 4 — Without Epricentrk.ua markup
    • 5 — Off: Rozetka, Prom, Epicentrk
    • 6 — Without formula-based markup

    Available values for noimport

    Enable/Disable product update during import (Store → Import Products)

    • 1 — Update during import
    • 0 — Do not update during import

    Available values for delete
    • 0 — Do not delete
    • 1 — Delete product

    Available values for show_period

    Product display period. Allows hiding the product after the specified time.

    • 0 — Forever
    • 1 — 1 day
    • 2 — 1 week
    • 3 — 1 month
    • 4 — 6 months
    • 5 — 1 year

    Available values for priority

    Number from 0 to 100. The higher the number — the higher the product appears in the list.


    Available values for custom_label_4

    Text (maximum 95 characters)


    Available values for meta_title

    Text (maximum 255 characters)


    Available values for meta_description

    Text (maximum 500 characters)


    Available values for meta_keywords

    Text (maximum 2000 characters)


    Available values for multilangid

    Text (maximum 50 characters)


    Available values for categories

    Array of values

    • id — Category ID
    • name — Category name
    • lang — Category language

    Available values for producer

    Array of values

    • id — Producer ID
    • name — Producer name
    • lang — Producer language

    Available values for producer_country

    Text (maximum 100 characters)


    Available values for collection

    Array of values

    • id — Collection ID
    • name — Collection name
    • lang — Collection language

    Available values for short_description

    Text (maximum 2000 characters) — short product description (if enabled in the site design, it appears in product lists)


    Available values for description

    Long text — full product description, displayed on the product detail page


    Available values for description_tab_1

    Long text — tab 1 with description (tab title is set in store settings)


    Available values for description_tab_2

    Long text — tab 2


    Available values for description_tab_3

    Long text — tab 3


    Available values for description_tab_4

    Long text — tab 4


    Available values for description_tab_5

    Long text — tab 5


    Available values for bought_with

    Text (maximum 255 characters) — list of products frequently bought together, comma-separated (product IDs or SKUs)


    Available values for bought_with_email

    Text (maximum 255 characters) — list of products frequently bought together, sent to the customer by email with the order, comma-separated (product IDs or SKUs)


    Available values for discount

    Text (maximum 20 characters) — discount amount (informational field, shown in lists and on the product page)


    Available values for new

    Mark product as New

    • 0 — Not set
    • 1 — Set

    Available values for featured

    Mark product as Bestseller

    • 0 — Not set
    • 1 — Set

    Available values for promotion

    Mark product as Promotion

    • 0 — Not set
    • 1 — Set

    Available values for reducedprice

    Mark product as Price Reduced

    • 0 — Not set
    • 1 — Set

    Available values for shipping
    • 0 — Not specified
    • 1 — Enabled

    Available values for shipping_settings (related to shipping)
    • 2 — Use general settings
    • 0 — No shipping
    • 1 — Shipping available
    • 3 — Only add a shipping note

    Available values for shipping_price (related to shipping_settings)

    Text (maximum 40 characters)


    Available values for shipping_note (related to shipping_settings)

    Long text


    Available values for shipping_days (related to shipping_settings)

    Text (maximum 10 characters)


    Available values for shipping_sum (related to shipping_settings)
    • 0 — Do not count product quantity
    • 1 — Count product quantity
    • 2 — Do not add shipping to order total

    Available values for attributes

    Array of attributes — displayed on the product page, used for product comparison and filters

    • id — Attribute ID (if present)
    • name — Attribute name (search can be by name or by value_parent_id / value_ints)
    • options — Array of attribute option values
    • value_ints — Array of numeric IDs for options (if present)
    • value_parent_id — Parent ID of the attribute (if present)

    Example:
    [
      {
        "id": 1298,
        "name": "Product type",
        "options": ["Sneakers"]
      },
      {
        "name": "Brand",
        "options": ["Adidas"],
        "value_ints": [10081],
        "value_parent_id": 1762
      },
      {
        "name": "Size",
        "options": ["43", "43.5"],
        "value_ints": [10107, 10108],
        "value_parent_id": 1763
      }
    ]

    Other values

    You can get other values using the GET method /products or in the examples below


Adding Products

This method allows you to add one or multiple products in a single request (up to 3000 at once). The request format is exactly the same as for updating: you can send an array of products or a single product.

  • ID check: When adding a new product, the id field must be empty or not specified. If id is given and a product with that ID already exists, the system will update that product instead of creating a new one.
  • SKU check: Before adding, the system checks if a product with the given SKU exists. If found, it will be updated instead of creating a duplicate.

You can add new products and update existing ones in a single request.

This is a basic overview of the main methods for working with the Commerce API / WooCommerce API v3 for orders, products, and categories.
Below are example scripts to help you properly use the API methods in practice.


  • Script: Api: ORDER DETAILS

     Code: PHP
    ORDER DETAILS
      $url = "https://boostore.pro/api/commerce/orders/ORDERID"; // Set the endpoint URL (replace with your actual API endpoint)
      $authKey = "your_authorization_token_here"; // Authorization token (use your real key)
      $ch = curl_init($url); // Initialize cURL session
      // Set cURL options
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Return response as string
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
      "Authorization: Bearer " . $authKey, // Set Authorization header
      "Content-Type: application/json" // Optional: declare expected response type
      ]);
      // Execute request
      $response = curl_exec($ch);
      // Check for cURL error
      if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
      } else {
      // Parse and print the JSON response
      $data = json_decode($response, true);
      print_r($data); // Output server response
      }
      // Close cURL session
      curl_close($ch);
      
  • Script: Api: UPDATE ORDER

     Code: PHP
    UPDATE ORDER
      $url = "https://boostore.pro/api/commerce/orders/ORDERID"; // Order API endpoint
      $authKey = "your_authorization_token_here"; // Authorization token
      // Data to update (use API keys, not raw DB field names)
      $updateData = [
      "first_name"  => "Alex",
      "last_name"   => "Las",
      "email"       => "alex@example.com",
      "phone"       => "+380671112233",
      // Full address in plain text (if needed)
      "address"   => "Full address not tied to structured eform fields",
      // Structured address fields (eform system)
      "buyer_address_eform1" => "Region / State",         
      "buyer_address_eform2" => "City",                   
      "buyer_address_eform3" => "Street",                 
      "buyer_address_eform4" => "House number",           
      "buyer_address_eform5" => "Apartment",              
      "buyer_address_eform6"             => "01001",       // Zip/Postal code/Department
      // Order details
      "total" => "999",                        // Total price
      "status" => "processing",                // Internal status or number
      "status_for_customer" => "completed",    // Customer-facing status or number
      ];
      $ch = curl_init($url); 
      // cURL options
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($updateData, JSON_UNESCAPED_UNICODE));
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
      "Authorization: Bearer " . $authKey,
      "Content-Type: application/json"
      ]);
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
      } else {
      $data = json_decode($response, true);
      print_r($data); 
      }
      curl_close($ch);
  • Script: Api: CREATE ORDER

     Code: PHP
    CREATE ORDER
      $url = "https://boostore.pro/api/commerce/orders"; // Order API endpoint
      $authKey = "your_authorization_token_here"; // Authorization token (use your real key)
      // Order data + products
      $orderData = [
      // Buyer info
      "first_name"  => "Name",                // Buyer's first name
      "last_name"   => "Soname",              // Buyer's last name
      "email"       => "alex@example.com",    // Buyer's email (required)
      "phone"       => "+380671112233",       // Buyer's phone number
      "address"     => "Full address of not used address eform", // General address
      "buyer_address_eform1" => "State",      // State / Region
      "buyer_address_eform2" => "City",       // City
      "buyer_address_eform3" => "Street",     // Street
      "buyer_address_eform4" => "house number", // House number
      "buyer_address_eform5" => "flat",       // Apartment / Flat
      "postcode"    => "01001",               // Postcode / ZIP
      // Total order amount (optional)
      // If you set "total", it will be used as the final order total.
      // If you skip "total", the system will calculate the total automatically
      // based on the products in "line_items".
      //"total"       => "999",
      "status"      => "processing",          // Internal status
      "status_for_customer" => "processing",  // Status shown to the customer
      "currency"   => "USD",                  // Order currency
      // Products in the order
      "line_items" => [
        [
         "product_id" => 478734,         // Product ID (required)
         "quantity"   => 0,               // Quantity (required) / default - 1
         "price"      => 100,            // Custom price (optional, overrides site price)
        ],
        [
         "product_id" => 478268,
         "quantity"   => 10,
         "variation" => "51"             // Variation name or code
        ],
        [
         "product_id" => 478266,
         "quantity"   => 1,
         "variation_id" => 735302        // Variation ID (priority over "variation")
        ]
       ]
      ];
      
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($orderData, JSON_UNESCAPED_UNICODE));
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
      "Authorization: Bearer " . $authKey,
      "Content-Type: application/json"
      ]);
    
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
      } else {
      $data = json_decode($response, true);
      print_r($data);
      }
      curl_close($ch);
      
  • Script: Api: UPDATE PRODUCT

     Code: PHP
    UPDATE PRODUCT
     $url = "https://boostore.pro/api/commerce/products/PRODUCT_ID"; // Product API update endpoint
      $authKey = "your_authorization_token_here"; // Authorization token (use your real key)
    // Product data
    $productData = [
      "id" => 479077, // Product ID is ignored here because it's specified in the URL
      "name" => "Basketballshoes_Demo", // SEO URL link
      "title" => "Basketball shoes Converse All Star BB Prototype CX", // Product title (required for new)
      "type" => 1298, // Product type for filtering and attributes
      "access" => true, // Product availability (true = active)
      "description" => "<p>Sneakers Converse All Star BB Prototype CX — Basketball shoes...</p>", // Full product description (HTML allowed)
      "short_description" => "", // Short description of product 
      "sku" => "AO2515C", // Product SKU code
      "sku_show" => 0, // Whether to show SKU publicly (0 = no)
      "price" => "3000", // Current price
      "currency" => "UAH", // Currency code
      "regular_price" => "5760", // Old (regular) price 
      "price_for" => "0", // Unit for pricing (see documentation for accepted values  https://boostore.pro/en/docs/import-products/#faq_import_products)
      "stock_quantity" => 0, // Quantity in stock (0 - unlimited)
      "stock_status" => 0, // Stock status (0 = in stock, 1 = out of stock, others see docs)
      "weight" => 0, // Weight value
      "weight_units" => 0, // Weight units: 0 = grams, 1 = kilograms
      "dimensions" => [
        "length" => 0, // Length
        "width"  => 0, // Width
        "height" => 0, // Height
        "units"  => "0", // Dimension units: 0 = centimeters, 1 = meters
     ],
     "categories" => [
        ["id" => 30519, "name" => null], // Product category (by ID, name, or both)
      ],
      "tags" => "tag1, tag2", // Tags, comma separated, max 8 tags
     "images" => [
        "0" => "-uploadshopcat-s16572/479077/479077_1.webp", // Local image path (won`t be uploaded)
        "1" => "https://boostore.pro/upload/shop_catalog/s16572/479077/479077_2.webp", // Remote image URL (will be downloaded and attached)
      ],
     "images_replace" => false, // By default: do NOT replace images with the same index. If true, replace existing images by index.
     "images_skip_index" => false, // If true, find next free index if the given index is occupied and save image there.
     "images_replace_new_index" => false, // If true, even if replace and skip are false, save under new free index if original index is occupied.
     "variations_only_update" => false, // If true, new variations will be added without deleting old ones; otherwise all old variations are removed before adding new
     "variations" => [
      [
        "priority" => 0, // Display priority of the variation
        "id" => 736413, // Variation ID for updating existing variation; if not provided, search by SKU or title
        "sku" => "SKU1234", // Variation SKU (recommended)
        "title" => "42", // Variation name (required)
        "status" => "true", // access ( true / false / forbidden)
        "description" => "",
        "stock_status" => 0, // Stock status, same logic as main product
        "show_stock" => 0, // Whether to show stock count
        "instock" => 10, // Quantity in stock for this variation
        "image_num" => 0, // Image index linked to this variation
        "price" => "+100", // Price adjustment: absolute, or relative (+/-)
        "price_old" => "120", // Old price
        "price_cost" => "80", // Cost price
        "bulk_prices" => [ // Bulk pricing rules
          [
          "moq" => 10, 
           "price" => 5000
          ], // Price if order >= 10 units
          [
          "moq" => 15, 
          "price" => 4500
          ], // Price if order >= 15 units
      ],
      "dimensions" => [ // Variation dimensions, same units as product
        "length" => 0, // Length
        "width" => 0,  // Width
        "height" => 0, // Height
        "units" => 0,  // Dimension units: 0 = centimeters, 1 = meters
      ],
      ],
      [
        "priority" => 0,
        "title" => "43",
        "description" => "",
        "stock_status" => 0,
        "show_stock" => 1,
        "instock" => 1,
        "image_num" => 2,
        "price" => "+100",
        "price_old" => "120",
        "price_cost" => "80",
        "bulk_prices" => [
      ["moq" => 10, "price" => 5000],
      ["moq" => 15, "price" => 4500],
      ],
      "dimensions" => [
        "length" => 0,
        "width" => 0,
        "height" => 0,
        "units" => 0,
      ],
    
      ],
      ],
     "products_synonyms" => "", // Comma-separated list of grouped or similar product IDs or SKUs
     "priority" => 12, // Sorting priority (higher number = higher position, max 99)
     "producer" => ["id" => 4713, "name" => null], // Producer category by ID and/or name
     "producer_show" => 0, // Show producer on product page
     "producer_country" => "", // Producer country (text)
     "collection" => ["id" => null, "name" => null], // Collection category (ID and/or name)
     "collection_show" => 0, // Show collection flag
     "supplier" => ["id" => null, "name" => null], // Supplier info
     "bulk_prices" => [ // Bulk prices for main product
        ["moq" => 10, "price" => 5000],
        ["moq" => 15, "price" => 4500],
      ],
     "price_cost" => "", // Cost price for the main product
     "settings_comments" => "e_shop_page_hoteng_com|e_shop_page_hoteng_rating_com|e_shop_page_hoteng_show_rating_com|e_shop_page_hoteng_com_captcha|e_shop_page_hoteng_vis_com|e_shop_page_hoteng_num30",
     "password" => "", // Password protection (if any)
     "show_tree" => 0, // Category tree display setting
     "show_stock" => 0, // Show stock on product page
     "moq" => 0, // Minimum order quantity
     "shipping" => 0, // Shipping enabled flag
     "shipping_settings" => 0, // Shipping configuration
     "shipping_price" => 0, // Shipping cost
     "shipping_note" => "", // Notes about shipping
     "shipping_days" => 0, // Delivery time in days
     "shipping_sum" => 0, // Combine shipping for same products flag
     "show_period" => 0, // Product display period
     "bought_with" => "", // Comma-separated list of products often bought together
     "bought_with_email" => "", // Email to send bought-together product lists
     "new" => 1, // Is product new (1 = yes, 0 = no)
     "reduced_price" => 0, // Price reduced flag
     "discount" => "-20%", // Discount text (informational)
     "featured" => 1, // Featured product flag
     "promotion" => 1, // Has promotion flag
     "promotion_text" => "", // Promotion text
     "promotion_expires" => 1751113909, // Promotion end timestamp
     "promotion_expires_job" => 0, // Job to execute after promotion ends
     "variations_title" => "", // Title above variation selectors
     "variations_type" => 0, // Variation type (Google Merchant Size Type): 0=default from category settings, 1=color, 2=pattern, 3=material, 4=age_group, 5=gender, 6=size
     "variations_require" => 0, // Require variation selection before purchase
     "variations_cartexplode" => 0, // Variation display method settings
     "yml" => 0, // Export to YML/XML flag
     "noimport" => "0", // Disable import via admin panel flag
     "custom_label_4" => "", // Custom label for Google Merchant
     "description_tab_1" => "", // Description tab 1 content
     "description_tab_2" => "", // Description tab 2 content
     "description_tab_3" => "", // Description tab 3 content
     "description_tab_4" => "", // Description tab 4 content
     "description_tab_5" => "", // Description tab 5 content
     "video" => "", // Video URL
     "video_duration" => "", // Video duration in HH:MM:SS format
     "delete" => "delete", // delete product ( true or delete )
     // Product attributes for filtering and characteristics
     "attributes" => [
       [
      // "id"      => 1298,  // Attribute name You can use or NAME or ID
        "name" => "Product type", // Attribute name
        "options" => ["Sneakers"] // Attribute values (multiple allowed)
       ],
       [
        "name" => "Producer", //  Attribute name
        "options" => ["Converse"] //Attribute values (multiple allowed)
       ],
       [
        "name" => "Size", //Attribute name
        "options" => ["37,5", "40"] //Attribute values (multiple allowed)
         // "value_ints"      => [10096, 10101], //You can use or NAME or ID
         // "value_parent_id" => 1763 You can use or NAME or ID
       ],
      ]
     ];
    
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "UPDATE"); // Use UPDATE method for update operation (UPDATE / PUT / PATCH)
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($productData, JSON_UNESCAPED_UNICODE));
      curl_setopt($ch, CURLOPT_HTTPHEADER, [
      "Authorization: Bearer " . $authKey,
      "Content-Type: application/json"
      ]);
    
      $response = curl_exec($ch);
      if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
      } else {
      $data = json_decode($response, true);
      print_r($data);
      }
    curl_close($ch);
    
  • Script: Api: UPDATE MULTIPLE PRODUCT

     Code: PHP
    UPDATE MULTIPLE PRODUCT (up to 5000 same time)
    $url = "https://boostore.pro/api/commerce/products"; // Product API update endpoint
    $authKey = "your_authorization_token_here"; // Authorization token (use your real key)
    // Product data
      $productsData = [
      "products" => [
       [
        "id" => 479077,
        "title" => "New Product Title 1"
        ...
       ],
       [
        "sku" => "SKU123456",
        "title" => "New Product Title 2"
        ...
       ],
       [
        "id" => 479078,
        "title" => "New Product Title 3"
        ...
       ]
      ]
     ];
     
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "UPDATE"); // UPDATE / PUT / PATCH
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($productsData, JSON_UNESCAPED_UNICODE));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer " . $authKey,
    "Content-Type: application/json"
    ]);
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
    } else {
      $data = json_decode($response, true);
      print_r($data);
    }
    curl_close($ch);
  • Script: Api: UPDATE PRODUCT CATEGORIES

     Code: PHP
    UPDATE MULTIPLE CATEGORIES (up to 3000 same time)
    $url = "https://boostore.pro/api/commerce/products/categories"; // Categories API update endpoint
    $authKey = "your_authorization_token_here"; // Authorization token (use your real key)
    // Categories data
     $categoriesData = [
      "categories" => [
        [
          "category_id" => 30518, // Category ID
          "category_name" => "sneakers", // System category name (slug) REQUIRED
          "category_title" => "Sneakers", // Category title
          "category_parent_id" => 1, // Parent category ID
          "category_parent_name" => "ParentCategory", // Parent category Name
          "category_position" => 0, // Position in the list
          
          "category_visible" => 0, // Visibility (0 = hidden, 1 = visible)
          "category_lang" => "ru", // Category language
          
          "category_show_tree" => 0, // Show tree (0/1)
          "category_multilangid" => 0, // Multilanguage binding ID
    
          "category_image" => [
            "0" => "https://boostore.pro/upload/catalog/16572/files/style/categories/30518.webp", // Image URL
          ],
          "images_replace" => 1, // Image replace if exists
          "category_image_settings" => 7, // Image display settings
          "category_button" => "", // Custom button (without href)
          "category_access" => 0, // Access level
          "category_title_seo_append" => "", // SEO: title suffix
          "category_description_seo_append" => "", // SEO: description suffix
          "category_meta_d" => "", // Meta description
          "category_meta_k" => "", // Meta keywords
          "category_title_inpage" => "Sneakers", // Title shown inside the category page
          "category_text" => "", // Category description text
          "category_text_position" => 0, // Description position
          "category_settings_comments" => "", // Comment settings
          
          "category_settings_rating" => 0, // Enable rating (0/1)
          "category_datestamp" => "2025-09-16T12:41:07+00:00", // Datetime of creation/update
         
          "category_googlegoods_catid" => 0, // Google Goods category ID
          "category_promua_catid" => 0, // Prom.ua category ID
          "category_rozetkaua_title" => "", // Rozetka.ua category title
          "category_merchant_product_category" => "", // Merchant product category
          "category_gm_product_type" => 0, // Google Merchant product type
          "category_gm_sizetype" => 0, // Google Merchant size type
          
          "category_priceappend_rozetka" => "", // Extra price settings for Rozetka
          "category_priceappend_promua" => "", // Extra price settings for Prom.ua
          "category_settings_childproductshow" => 0, // Show products from subcategories (0/1)
          "category_settings_style" => 0, // Style settings
          "category_settings_sibling" => 0, // Show sibling categories (0/1)
          "update_exists" => 1, // Update exists category (0/1)
          "delete" => 0, // For delete category (0/1)
        ]
      ]
    ];
    
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "UPDATE"); // UPDATE / PUT / PATCH
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($categoriesData, JSON_UNESCAPED_UNICODE));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer " . $authKey,
    "Content-Type: application/json"
    ]);
    
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
    } else {
      $data = json_decode($response, true);
      print_r($data);
    }
    curl_close($ch);
  • Script: Api: UPDATE PRODUCT PRODUCERS

     Code: PHP
    UPDATE MULTIPLE PRODUCERS (up to 3000 same time)
    $url = "https://boostore.pro/api/commerce/products/producers"; // Producers API update endpoint
    $authKey = "your_authorization_token_here"; // Authorization token (use your real key)
    // Producers data
     $producersData = [
      "producers" => [
        [
          "producer_id" => 30518, // Producer ID
          "producer_name" => "sneakers", // System producer name (slug) REQUIRED
          "producer_title" => "Sneakers", // Producer title
          "producer_parent_id" => 1, // Parent producer ID
          "producer_parent_name" => "ParentCategory", // Parent producer Name
          "producer_position" => 0, // Position in the list
          
          "producer_visible" => 0, // Visibility (0 = hidden, 1 = visible)
          "producer_lang" => "ru", // Producer language
          
          "producer_show_tree" => 0, // Show tree (0/1)
          "producer_multilangid" => 0, // Multilanguage binding ID
    
          "producer_image" => [
            "0" => "https://boostore.pro/upload/catalog/16572/files/style/categories/30518.webp", // Image URL
          ],
          "images_replace" => 1, // Image replace if exists
          "producer_image_settings" => 7, // Image display settings
          "producer_button" => "", // Custom button (without href)
          "producer_access" => 0, // Access level
    
          "producer_meta_d" => "", // Meta description
          "producer_meta_k" => "", // Meta keywords
          "producer_title_inpage" => "Sneakers", // Title shown inside the producer page
          "producer_text" => "", // Producer description text
          "producer_text_position" => 0, // Description position
          "producer_settings_comments" => "", // Comment settings
          
          "producer_settings_rating" => 0, // Enable rating (0/1)
          "producer_datestamp" => "2025-09-16T12:41:07+00:00", // Datetime of creation/update
         
          "update_exists" => 1, // Update exists producer (0/1)
          "delete" => 0, // For delete producer (0/1)
        ]
      ]
    ];
    
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "UPDATE"); // UPDATE / PUT / PATCH
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($producersData, JSON_UNESCAPED_UNICODE));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer " . $authKey,
    "Content-Type: application/json"
    ]);
    
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
    } else {
      $data = json_decode($response, true);
      print_r($data);
    }
    curl_close($ch);
  • Script: Api: UPDATE PRODUCT COLLECTIONS

     Code: PHP
    UPDATE MULTIPLE COLLECTIONS (up to 3000 same time)
    $url = "https://boostore.pro/api/commerce/products/collections"; // Collections API update endpoint
    $authKey = "your_authorization_token_here"; // Authorization token (use your real key)
    // Collections data
     $collectionsData = [
      "collections" => [
        [
          "collection_id" => 30518, // Collection ID
          "collection_name" => "sneakers", // System collection name (slug) REQUIRED
          "collection_title" => "Sneakers", // Collection title
          "collection_parent_id" => 1, // Parent collection ID
          "collection_parent_name" => "ParentCategory", // Parent collection Name
          "collection_position" => 0, // Position in the list
          
          "collection_visible" => 0, // Visibility (0 = hidden, 1 = visible)
          "collection_lang" => "ru", // Collection language
          
          "collection_show_tree" => 0, // Show tree (0/1)
          "collection_multilangid" => 0, // Multilanguage binding ID
    
          "collection_image" => [
            "0" => "https://boostore.pro/upload/catalog/16572/files/style/categories/30518.webp", // Image URL
          ],
          "images_replace" => 1, // Image replace if exists
          "collection_image_settings" => 7, // Image display settings
          "collection_button" => "", // Custom button (without href)
          "collection_access" => 0, // Access level
    
          "collection_meta_d" => "", // Meta description
          "collection_meta_k" => "", // Meta keywords
          "collection_title_inpage" => "Sneakers", // Title shown inside the collection page
          "collection_text" => "", // Collection description text
          "collection_text_position" => 0, // Description position
          "collection_settings_comments" => "", // Comment settings
          
          "collection_settings_rating" => 0, // Enable rating (0/1)
          "collection_datestamp" => "2025-09-16T12:41:07+00:00", // Datetime of creation/update
         
          "update_exists" => 1, // Update exists collection (0/1)
          "delete" => 0, // For delete collection (0/1)
        ]
      ]
    ];
    
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "UPDATE"); // UPDATE / PUT / PATCH
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($collectionsData, JSON_UNESCAPED_UNICODE));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer " . $authKey,
    "Content-Type: application/json"
    ]);
    
    $response = curl_exec($ch);
    if (curl_errno($ch)) {
      echo "Request error: " . curl_error($ch);
    } else {
      $data = json_decode($response, true);
      print_r($data);
    }
    curl_close($ch);

Product Import

Product Import / Parameters / File Types


Video instruction:

Video instruction - importing goods.

Update:

You can update stock, price, stock quantities, and more by creating an Excel/XLS file or CSV (semicolon delimiter). To update, it is enough to indicate the SKU/SKU or product ID. In addition, if SKU are indicated in the «Variety» of the product, then they can also be updated by checking the "Update variety by SKU" checkbox. If you need to add new varieties, then also indicate the field «SKU or product ID to update or add a variety."

Feature:

To add new product cards, uncheck the «Update only» checkbox. When adding, you can specify the path to the images, as well as other parameters of the product. If it finds a product with the same SKU/SKU, it will be updated. Some fields, for example, such as «Image», «Category», are taken into account only if the «Update only» checkbox is unchecked.

Field matching:

After uploading the file, you need to specify the field matching, for example, in which cell the SKU/SKU is indicated, in which Price, and so on.
You can use automatic filling of fields if you download Export of goods from your site as a template for the file (Select main, Select all (no variety), Select all). Otherwise, you can specify the correspondence of the fields yourself. In addition, you can save three sets of field correspondences and fill them in by clicking «Fill in correspondence fields selection …».

Instructions / Examples

Note
If the page is not fully loaded during the import process, do not close it, this means that the import is still being processed.
If the page does not update as a result of the import, or a message is displayed about a server error, then divide the imported file into several parts.


If, during import, the size of the «Title», «Short» and «Full Description» exceed the allowed number of characters, they will be truncated and the import will proceed.

If you specify in the value - «ignore», then it is not taken into account. This is useful when you want to import overwritten data, but not all of the data from the lines in the file. Also, if «Update Only» occurs, and the name of the product is not specified, then the value is not taken into account.
Limits
Maximum upload file size: 100mb.
In one import, you can add up to 500 items or update up to 2000 items.
On a parked domain, the limit is 5000 items for import, and 20000 for updates per request!
To increase the limits on an individual basis, please contact technical support. support through feedback form (free).
File types to import
The following file types are supported: CSV, XLS, XLSX, XML/YML and ZIP.

Sample files

Example XLS Google Table
Example CSV file, comma delimiters - open with excel.
Example XML file
To get all fields available for import - perform the export of goods.
An example of a ZIP file, with attached images, matching «Upload everything» - open with any archiver.
Convert to individual CSV files from YML/XML

How to create a CSV file for import:

Fill in the data in XLS, clean the file from unnecessary headers and unnecessary lines, and save as CSV (Comma Separated)
You can save the file to CSV using Excel, using «File» - «Save as»

You can split the CSV file into several, using the program csvsplitter.zip

Uploading images and price list in ZIP archive

You can use third-party links to images or upload them to a ZIP archive when importing.

How to create a ZIP archive for import:

Create a CSV/XLS/XLSX file to import, named «export_products.*» (* - is the extension of csv, xls or xlsx). In the file, specify the relative paths to the image (if the images are placed in the archive) or the full path to the images (if the images are located on a web resource). Upload all files to one archive - ZIP. In the archive, you can use many folders to place images.
Example
For example, there may be several folders in the archive, 1, 2, 3, and so on. Images can be placed in each folder. When importing to each product, it remains to specify the appropriate path to each image. When importing, you can combine relative paths, or links to images from external sources. In the names of files and folders, try not to use special characters and Cyrillic.

The file «export_products.*» must be located in the root of the archive.
An example of a ZIP file with attached images - open with any archiver.

Attention! If the import file contains formulas, then they must be deleted.
Multilanguage
Use only unique non-repeating product codes, and for multilingual sites, specify the cell «Goods in other languages» and another product code. If the «Update products in other languages» field is activated, both the main products with the specified article and similar products in other languages specified in the «Goods in other languages» cell will be updated during import. When updating Products in another language, the main fields are taken into account, such as: Price, Availability, Wholesale price, Novelty, Hit sales, Promotion, Access and Removal of goods.

The language of the product will correspond to the category into which it is imported.
To add products in other languages, specify the category in another language, as well as the value of the «Product in another language». «The product code» must be unique, because in another language you can use, for example, your own endings «ARTICUL_EN». If the product is specified in a different language, then when the basic data changes (`Cost`, `Availability`, `Novelty`, `Bestseller`, `Sales`, `Access`, `Delete`), all the product rolls specified as an alternative version of the main product will also be updated. Variations can use the same Code for different languages.
Instructions for creating a multilingual site.
Field and Data Matching
When importing, you can specify the following fields:

    - Product Code / SKU
    A product with the same Product Code from the uploaded price list will be overwritten.
    If the product code is not specified and it is necessary to overwrite product information, you can use the product ID. Attention! If the product ID is specified, it is used with higher priority than the product code and also allows overwriting the PRODUCT CODE.

    - Product ID (update existing product)
    To update a product or variant by ID, you can specify the value in this field. If the product ID is found, the product will be designated for updating its information. Attention! If the product ID is specified, it has higher priority than the product code and allows overwriting the PRODUCT CODE in the product card.

    - Price
    Currency during import can be replaced if the price contains respective currency symbols, namely:
    • $ USD doll &amp;#36; dollar - ()
    • € EUR euro &amp;#8364 euro - ()
    • Br BYN BYR br rub. р. - ()
    • ₽ rub RUR RUB р. руб. ruble &amp;#8381; - ()
    • ₴ UAH hryvnia grn hrn &amp;#8372; - ()
    • tenge KZT teng tng tg tenge teng &amp;#8376; - ()
    • zł PLN zlot zł Zł Z&#322; - ()

    - Markup
    Markup is defined by a mathematical expression relative to the previously specified Price.
    The following values are allowed:
    • +XX plus
    • -XX minus
    • /XX divide
    • *XX multiply
    • XX% percentage of the amount
    • +XX% plus percentage of the amount
    • -XX% minus percentage of the amount
    • /XX% divide by percentage of the amount
    • *XX% multiply by percentage of the amount
    • If the price or markup contains a non-integer number, the result will be rounded to two decimal places.


    - Wholesale Price
    Wholesale price is specified using semicolon separators. To activate wholesale pricing, the "Minimum wholesale order" must be specified. For example, if the "Minimum wholesale order" field contains 5;10 and the "Wholesale price" contains 20;10, then when adding more than 5 items to the cart, the price will be 20, and when adding more than 10 items, the price will be 10.

    - Product Availability (Yes/In Stock/No/On Order/Check/Hide/Lock)
    • 0 In stock
    • 1 No
    • 2 On order
    • 3 Hide
    • 4 Prohibit adding to cart
    • 5 Check availability


    The following values are also automatically recognized: Yes, In stock, No, available, +, - and On order.
    To hide a product from the list, you can specify: Hide, Нет в наличии (No stock + Hide product from list), or Hide.
    To prohibit adding a product to the cart, use: Lock, Запретить, or Нет в наличии (No stock + Prohibit adding to cart).
    For the "Check" option, you can specify: Check availability, Уточняйте, or Наличие уточняйте.

    - Quantity Available

    The following values are allowed:
    • XX Numerical value
    • +XX plus (to previous stock quantity)
    • -XX minus (from previous stock quantity)


    - Price per

    Available options:
    • 1 pcs or 1 — for 1 piece
    • 100 pcs or 2 — for 100 pieces
    • 1000 pcs or 3 — for 1000 pieces
    • 1 package or 4 — for 1 package
    • 1 pair or 45 — for 1 pair
    • 1 dozen or 46 — for 1 dozen
    • Set or 10 — for set
    • 1 kg or 5 — for 1 kilogram
    • 1000 kg or 6 — for 1000 kilograms
    • 100 g or 38 — for 100 grams
    • 1 lb or 39 — for 1 pound
    • 1 g or 40 — for 1 gram
    • 10 kg or 41 — for 10 kilograms
    • 1 centner (100 kg) or 42 — for 100 kg
    • 1 ton or 43 — for 1 ton
    • 1 ml or 30 — for 1 milliliter
    • 1 l or 31 — for 1 liter
    • 1 km³ or 32 — for 1 cubic kilometer
    • 1 m³ or 33 — for 1 cubic meter
    • 1 dm³ or 34 — for 1 cubic decimeter
    • 1 cm³ or 35 — for 1 cubic centimeter
    • 1 mm³ or 36 — for 1 cubic millimeter
    • 1 hl or 37 — for 1 hectoliter
    • 1 gallon or 47 — for 1 gallon
    • 1 barrel or 48 — for 1 barrel
    • 1 m² or 7 — for 1 square meter
    • 1 are or 44 — for 1 are
    • 1 hundred sq.m. or 15 — for 100 sq.m.
    • 1 acre or 16 — for 1 acre
    • 1 hectare or 17 — for 1 hectare
    • Plot or 18 — for 1 plot
    • Object or 19 — for 1 object
    • 1 meter or 8 — for 1 meter
    • 1 km or 9 — for 1 kilometer
    • 1 linear meter or 55 — for 1 linear meter
    • 1 hour or 11 — for 1 hour
    • 1 day or 12 — for 1 day
    • 1 month or 13 — for 1 month
    • 1 year or 14 — for 1 year
    • 1 minute or 49 — for 1 minute
    • 1 week or 50 — for 1 week
    • 1 service or 51 — for 1 service
    • 1 trip or 52 — for 1 trip
    • 1 person or 53 — for 1 person
    • 1 car or 54 — for 1 car


    - Short description
    Displayed as text in product listings (categories, search, new items blocks) if it is not hidden in style settings.

    - Meta title
    Title tag. Displayed in the browser tab and serves as the page title.

    - Meta description
    Description tag. A short text under the link in search results. Helps search engines understand the page content and affects the click-through rate (CTR).

    - Meta keywords
    Keywords tag. A set of keywords or phrases separated by commas by which users can find this product. Entered words are used in internal site search.

    - Product name / Product title
    The main product name on the site. Used to generate the H1 heading and names in cart/orders.

    - Full description
    The main product text. Displayed in the block specified in the site design settings (block position may vary). Can include HTML (lists, tables, text, video).

    - Description tabs
    Allows creating additional information sections (e.g.: «Full product description», «Specifications», «Delivery», «Video reviews»). You can import both plain text and complex HTML with tables, YouTube iframes, or specifications. Tab names are configured in the admin panel.

    - Category ID (Your category ID)
    Specify your personal Store category IDs. If such category is not found on your site, the value will be ignored. When using personal categories, existence is checked. If the specified category does not exist on this site, the value will be ignored.

    - Category Title (Your category title)
    The data from this field is compared with the internal category title. If the category matches, this category ID is set. If a personal category ID is specified beforehand, it has priority over the category title. When using personal categories, existence is checked. If the specified category does not exist on this site, the value will be ignored.

    - Manufacturer ID (Your manufacturer ID)
    Specify your manufacturer category IDs. If such manufacturer is not found on your site, the value will be ignored. Manufacturer existence is checked. If the specified manufacturer does not exist on this site, the value will be ignored.

    - Manufacturer Title (Manufacturer title)
    The data from this field is compared with the internal manufacturer category title. If matched, the ID is set. If manufacturer ID is specified beforehand, it has priority over the manufacturer title. Manufacturer existence is checked. If the specified manufacturer does not exist on this site, the value will be ignored.

    - Collection ID (Your collection ID)
    Specify your collection category IDs. If such collection is not found on your site, the value will be ignored. Collection existence is checked. If the specified collection does not exist on this site, the value will be ignored.

    - Collection Title (Collection title)
    The data from this field is compared with the internal collection category title. If matched, the ID is set. If collection ID is specified beforehand, it has priority over the collection title. Collection existence is checked. If the specified collection does not exist on this site, the value will be ignored.

    - Synonym Products
    This option allows you to display a group of products similar by characteristics, for example, the same product in different colors. Products will be displayed in the description as links and images.

    For example, this product list can be used if you have the same product in many sizes and colors, with size specified in "Variants" and grouped in the "Synonym Products" field. Add "Sizes" to "Variants", and other colors to this field. This way, the customer can select both "Color" and "Size" of the product.

    - Shipping: Specify shipping parameters
    • 1 — specify
    • 0 — do not specify

    Also, the following values are automatically replaced:
    • да, yes, true, есть, указать — replaced with 1
    • нет, no, -, delete, скрыть, hide — replaced with 0
    • notes only, text only, indicate only a note about delivery, text — are replaced by 3


    - Shipping: Available/Not Available/From general settings/Note only
    • 1 — available
    • 0 — not available
    • 2 — use from general settings
    • 3 — specify only note about shipping

    Also, the following values are automatically replaced:
    • yes, +, есть, да — replaced with 1
    • none, -, нет, no — replaced with 0
    • из общих настроек, =, общие настройки, default — replaced with 2


    - Shipping: Shipping cost
    Shipping cost

    - Shipping: Shipping notes
    You can specify shipping terms. HTML is allowed in this field.

    - Shipping: Delivery time
    Delivery time. Displayed in shipping information. The following values are automatically replaced:
    • 0 — delivery on order day (today)
    • 1 — delivery the next day (tomorrow)
    • You can also specify a period from — to days, e.g., 2–4.


    - Delivery: Product Dimensions and Weight
    The following unit values are automatically converted:
    • Size:
      • 0 — centimeters
      • 1 — meters
    • Weight:
      • 0 — grams
      • 1 — kilograms


    - Supplier (Supplier Header)
    The data from this field is matched against the list of Suppliers. If the category matches, the ID of that category is set. If the specified supplier does not exist on the site, the value will be ignored. If the Supplier ID is provided, it will have priority.

    - Image URL (Main) (It is mandatory to specify the main image before uploading additional ones)
    You can specify a URL to an image file, which will be downloaded. The upload occurs only if the "Update only" checkbox is not set. If the file already exists in the product's image folder, it may be overwritten. To enable this, set "Overwrite images if found". Additional images ("Image URL (additional...)") are uploaded similarly.

    - Image URL (Additional 1-16)
    - Overwrite images if found
    If the product already exists and has images, you can specify the action to perform. Whether to delete the old images or not. Do not overwrite — 0, Overwrite — 1; also text values Yes, true and No are automatically converted.

    - Related Products
    You can create a list of related products for each product, which will be additionally displayed on the main product page. Specify IDs or codes/SKUs separated by commas.

    - Tags
    You can create a list of tags for each product, which will be additionally shown on the main product page and will help with SEO promotion and site navigation. Enter tags separated by commas. TO REMOVE TAGS enter 0 (zero), a space, or delete.

    - Configuration Header / Variant Header
    The header displayed above the list of variant options. For example, Select color.

    - Variant Update
    You can create your own list of variants/options for each product, which will be additionally shown on the product page. Below is the description of how to format and update variants during import:

    • You can upload an import file where data is divided into main Products and their Variants/Configurations.
      To have the system recognize a row as a variant, set the value 1 in the "Variant Update" cell.
      Only the following fields will be considered: Product code, Availability, Access, Name, Price, Wholesale price, Purchase price, Dimensions, Weight.
      These correspond to the main columns of the import price list (except the "Access" field, which manages variant visibility, e.g., allows hiding it).

      If a "Variant ID" is specified, that variant will be updated (if it exists). You can also update variants by Product Code or Name*. If no matches are found, a new variant will be created.

      To delete a variant, enter any non-empty value in the "Delete" column, for example 1 or delete.
      If the "Variant Update" field is empty or equals 0, the row will be treated as a separate product, not a variant.

      If needed, you can export variants separately — check "Split variants" on export, and you will get a file with variants only.


      For example, you can export products to see how variant parameters are indicated and updated.
      To delete a variant, enter any value delete or 1 in the "Delete" column.


      *You can update an existing variant by Product Code.
      To do this, after uploading the import file, enable the option "Update variant by product code".

      How variant update works via Excel cells:
      If a product has variants and the product code in the import row matches, fields such as Price, Availability, Stock quantity, Sort order (priority), Wholesale price, Minimum wholesale order, Old price, Dimensions, and also variant deletion will be updated.
      Variant fields correspond to the main import fields for the product. To manage visibility (show, hide, or show inactive button), use the "Access" column. Value off — hides the variant.

      If you need to fully update a variant (including name and styles) — use the "Variant" column and enable "Consider variant" during import. This allows bulk updating of all variant data by product code.

      Important! If both "Update variant by product code" and "Consider variant" are enabled simultaneously, the variant will be overwritten twice, which may cause data conflicts. Therefore, it is recommended to use only one method at a time: either update by product code or update via the "Variant" column.

    You can import a file with separated fields for Products or Configurations/Variants.
    The import function for these data is available only for sites with paid hosting and parked domains.

    - Variants (compressed format)
    Variants in compressed format is an additional way to check variants. The field contains variants in compressed form: {VARIANT ID|Price|SKU|Priority / Position sorting|TITLE|Access|Stock|Show stock - param|Stock quantity|Image number|bulk price (split ;)|bulk price quantity (split ;)|Old Price|Cost Price|Width|HEIGHT|Length|centimeters -0 / meters -1|Weight|gram -0 / kilogram -1|Delete|Description / Text}
    The import function for these data is available only for sites with paid hosting and parked domains.

    - Product Type and Characteristics
    You can assign values for search filters (Product Type and characteristics) to each product.

    To import characteristics, first export products to get the list of cells with characteristics.

    The data is validated during import, and if a matching value is found, it is applied.

    This import function is available only for sites with paid hosting and parked domains.

    - Delete
    If the product already exists and needs to be deleted, set the value in the Delete field to: 1, Yes, or delete

    - New, Bestseller, Discount, Price Reduced, Promotion
    To activate these fields, use the following values: 1, Yes, or true, or the corresponding field values like New, Bestseller, etc.
    Any text value can be used for the Discount field (this is an information-only field and does not perform any calculations)

    - Do not export to YML & RSS & XML
    Do not export in YML, RSS, XML formats. Allowed values: 1, Yes, or true — do not export; or 0, empty — export.

    - Promotion: Promotional Offer (text)
    Text of the promotional offer. Up to 5000 characters, supports HTML. To display the promotional offer, the "Promotion" field must be activated.

    - Promotion Timer: End Date and Time
    Date and time in the format 08.07.2015 12:59:33

    - Promotion Timer: After Expiry
    Actions after the promotion expires:

    • 0 - Do nothing (hide timer)
    • 1 - Move "Old price" to main price and delete old price
    • 2 - Remove "Promotion" label
    • 3 - Move "Old price" to main price and remove "Promotion" label
    • 5 - Restart timer for 1 day
    • 6 - Restart timer for 10 days
    • 7 - Restart timer with previous duration (timer date minus last edit date)
    • 8 - Remove "Promotion" label and delete "Old price"


    - Priority (Display order)
    This option affects the order number when viewing the product list in your store. By default, products on the shop page are sorted by id. The higher the number, the higher the product will be positioned. You can change the default sort order in the settings, under the Shop tab.

    - Minimum quantity for purchase
    The minimum required quantity for purchase. By default, the specified minimum quantity will be added to the cart. When placing an order, the buyer will be informed to add more items if the quantity in the cart is less than specified.

    - Watermark protective image
    Set a protective image watermark, which is preconfigured in the site's general settings. Allowed values: 1, Yes, or true — export; or 0 and empty — do not export.

    - Variant Type for Google Merchant XML
    Allowed values:
    • 0 - size
    • 1 - color
    • 2 - pattern
    • 3 - material
    • 4 - age_group
    • 5 - gender


    - Access
    If necessary, you can hide a product from visitors and search engines.

    Available values:
    • 0, No, Off, false — Off;
    • true, 1, On, empty — On.


    - And other fields



If an import finds a product with the same SKU/Product Code or ID, data will be updated. Images are only considered if the "Update only" checkbox is unchecked.
Asynchronous Import

You can enable the “Asynchronous Import” option to upload large volumes of data in the background.

Benefits:

  • Import runs in the background — you can continue using the site while processing takes place.
  • Your browser won’t overload, and you’ll see the real-time progress.

Important:

  • If you don’t use asynchronous mode, the site will be temporarily unavailable for you during the import. However, it will remain available for other users.
  • During asynchronous import, detailed logs for each product are not available — you won’t see which exact fields were updated for each item in real time.
  • After the import is completed, a summary report will be available with a list of updated, skipped, deleted, and problematic products and variants.
    You can find the history in the “Show previous import result” or “Previous import process” sections.

Website promotion and SEO

Website promotion

The BooStore.pro platform provides additional functions for SEO website promotion, for example, you can automatically add the words you need to all products in a specific category.

SEO promotion recommendations
Recommendations for launching advertising campaigns


We recommend enabling "language-bound redirect". This feature helps avoid duplicate start pages (duplicates negatively affect SEO). Since the start page domain.com and the language-bound page domain.com/en/ are the same page, we recommend enabling 301 redirect to the language-bound page. This can be done in the Admin center, Settings, Start page.

Site access

Site access

You can restrict access to the site in «Settings», in the "About site" tab.

If you plan to use a custom domain, we recommend restricting access to the site during temporary access, and opening it after purchasing the domain.

If you need to Delete the site / Company information, open the page for editing Site / Company information, and at the bottom check the box "Delete site and all data" or "Delete site". After some time, the company / site information will disappear from search engine results.

Cache

Cache

Thanks to caching, users who revisit your site spend less time loading pages. Caching headers should be applied to all cached static resources, not just some of them (e.g., images). Cached resources include JavaScript and CSS files, graphics and other files (multimedia content).

Multimedia file cache

According to recommendations from Search engines, as well as for visitor convenience, we have enabled «Data Compression» and caching of graphic files and JavaScripts on your site. The caching period for these files is one week.  

If you upload a new image over an old one, you will see the old image until the browser cache is cleared. Each browser has its own method of clearing the cache. For example, in Chrome, to force clear press «CTRL+F5» in the browser window on your site.

Server cache

Additionally, to speed up site performance, we have also implemented caching of some text data, which is cleared automatically when changed. However, if you have changed the content of a page/product/article/menu, but the changes are not displayed on the page, you need to force clear the cache using the «Clear cache» link in the admin panel on the page where changes are not reflected.

Site maintenance and cache clearing

The following data is cached on the site: «Product variation», «Promotions» (including timer), «RSS/XML/CSV» exports, number of products in a category. To clear the RSS/XML/CSV cache, select in the Admin Panel «XML/CSV/XLS/JSON» - «Clear XML/CSV export cache».

To recalculate variations, product quantities in categories and clear the Promotions cache, go to «Settings», «Shop» and at the bottom of the list in the «Recalculate products and categories» item select the necessary parameters for recalculation and maintenance.
This procedure is recommended after a large data update in the store, category changes, adding and changing or deleting a large number of variations, adding and changing categories, moving product cards to other categories, or when the promotion timer is about to expire.

Architecture and acceleration of e-commerce sites

Frequently Asked Questions

Frequently Asked Questions

Getting Started

    Is there a simple management system (admin panel) on the site?

    Yes. The platform is equipped with a full-featured admin panel designed for maximum speed. Most settings and elements are added through intuitive pop-up windows with clarifying questions, eliminating errors when filling.

    The processes of inserting blocks, generating widgets and uploading files happen instantly, without page reloads. This significantly saves time when filling the store and makes site management easy and convenient even for beginners.

    How deeply can you customize the system through the admin panel?

    The platform provides a complete administration ecosystem with end-to-end access to all site nodes. The system is divided into logical control centers, allowing you to flexibly configure every aspect of your business:

    • Global Localization: full management of Languages and multi-currency with automatic exchange rate updates.
    • Logistics and Sales: detailed configuration of Delivery zones, payment methods and Store structure.
    • Interface and Content: visual Design editor, management of Catalog, articles and information pages.
    • Interactive and Automation: powerful Order Form builder and flexible Events configuration (e.g., site behavior scenarios when adding a product to cart).

    This architecture makes the system extremely adaptable: you can configure everything — from SEO parameters of each page to specific business processes of order processing.

Design

    Can I completely change the site design?

    Yes. The platform allows you to fully control the site design. You can edit HTML, add your own CSS styles, include JavaScript, create custom blocks and configure page structure. This provides complete site customization.

    How to edit pages?

    You have full access to the HTML code, as well as a convenient built-in editor and an extensive library of ready-made blocks. You can quickly add headings, slides, contact blocks, social networks and use the built-in SVG icon library. See the tools in action here: Editor Demo and Block Library.

    How to create a custom header?

    To do this, create a menu block, select its position — «Site Header» — and insert the HTML code of the desired elements. It is recommended to add all styling through the design editor (CSS styles tab): this approach guarantees that the code will be automatically minified and will ensure the fastest possible site loading.

    How to change the font on the site?

    It is recommended to use the Google Fonts library. The obtained code (e.g.: <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Philosopher:wght@400;700&display=swap" rel="stylesheet">) should be inserted into a menu block, selecting the «Service Tags» position. Then in the design editor, in the CSS styles tab, specify the elements to apply the font to:

    html, body, * { font-family: "Philosopher", sans-serif; font-optical-sizing: auto; }
    How to add HTML code to a site page?

    HTML code can be inserted without restrictions: both in special blocks placed anywhere on the site, and directly into the content of pages, articles, categories or product cards.

    In addition, ready-made widgets are available for standard tasks. With their help, you can quickly add functionality of any complexity: mobile menu, cart, category lists, classic or mega menu, as well as other controls without having to write code manually.

    How to change the online store design?

    The design can be changed through the design editor using templates, block settings and CSS styles. Full customization of site layout and ready-made design presets (contact blocks, headings, page content) are also available.

    Can I change the site design without programming experience?

    Yes. You can select a ready-made template, set the main colors and block positions in the visual editor. Footer, mobile menu and header customization is done using flexible widgets that do not require coding but give professional results. A library of ready-made blocks with professional responsive design is also available.

    Can I connect custom scripts or third-party widgets?

    Yes. The platform does not limit you to built-in functionality. You can insert any third-party JavaScript code (chatbots, call tracking systems, custom counters) through block management or directly into site templates. Special fields «Before </head>» and «Before </body>» are provided for this purpose.

    Can I use shortcodes and dynamic data in texts?

    Yes. The platform supports a system of replaceable short codes (shortcodes). You can automatically insert the product name, current price, name of the authorized user or page path into text. This allows you to create personalized content and dynamic SEO templates.

    Are sites adapted for mobile devices?

    Yes. All sites on the platform use responsive layout. The interface automatically adapts to smartphone and tablet screens, ensuring high loading speed and ease of use on any mobile devices.

    An important advantage is the absence of restrictions for implementing your own ideas: you can fully customize the design and style of the site for mobile versions, creating a unique user experience (UX) without being tied to rigid template constraints.

    How to change the style of buttons and elements individually?

    For individual style editing, simply click «inspect element» in the browser, find the desired class and specify its properties in the design editor (CSS tab). BooStore.pro structure eliminates style clutter because each block has a unique ID and is tied to a content type.

    What is the hierarchy of main site blocks for working with CSS?

    The site has a clear container structure: a common wrapper block #hotengine-wrapper, header #hotengine-header, main content container #hotengine-content-container and footer #hotengine-footer. Inside the content part, styles are separated by page types (ID): pages — #hotengine-content-page, articles — #hotengine-content-blog, products — #hotengine-content-shop.
    Main Blocks

    How to differentiate styles for categories, collections and manufacturers?

    For list pages (categories), clarifying classes are automatically added: .hotengine-content-shop-category for products, .hotengine-content-shop-collection for collections and .hotengine-content-shop-producer for manufacturers. This allows you to set a unique design for each catalog type. You can find a detailed table of ID and class correspondence in the instructions: Block IDs and Classes.

    Is there a simple design editing mechanism?

    Yes. The platform offers a flexible design editor, a catalog of ready-made templates and presets that allow you to quickly build both a multi-section landing page and shape the overall style of the entire site.

    You can easily customize the header, footer and other parts of the site. To speed up work, ready-made widgets are built in, allowing you to create a mobile menu, cart, navigation lists or complex mega-menus in a few clicks without programming.

How to Add and Edit Products

    How to add products to the online store catalog?

    Products can be added manually through the control panel or imported from XLS, CSV, XML files, Google Sheets or via API. This allows you to quickly fill the catalog with a large number of products.

    Where and how to manage the product list?

    The main management is in the Store — My Products section. This is the central hub of your catalog, where you can:

    • Search and filter: You can instantly find a product by SKU, name or filter the list by categories, manufacturers and stock status.
    • Quick actions: Directly from the list you can change publication status, stock and prices without entering the product card.
    • Adding products: The «Add Product» button opens a full-featured editor for creating a new item from scratch.
    How to quickly make changes to a large number of products?

    For this, use the professional tool Store — Bulk Editing. It allows you to:

    • Mass change prices: Increase or decrease the cost of an entire category by a certain percentage or fixed amount.
    • Manage statuses: With one click, enable or disable display of hundreds of products, set «Bestseller» or «New» labels.
    • Data transfer: Quickly move products from one category to another or mass assign a new Product Type with corresponding characteristics.
    How to combine several cards of the same product in different colors or sizes?

    Use the «Variations» functionality. You can create each card separately for better SEO, then combine them using the «Synonym Products» parameter. You can also configure parameter selection (color, size, material) within one card through variation groups.

    Can I set wholesale prices for products?

    Yes. The platform allows you to set wholesale prices both for main products and their variations. You can configure automatic price recalculation depending on the quantity of goods in the cart, making the system ideal for B2B and wholesale sales.

    Is there a limit on the number of products in the online store?

    The platform does not limit the maximum number of products. The SaaS system architecture allows you to scale from a small landing page to large ecommerce catalogs with hundreds of thousands of items. Thanks to server optimization, high performance is maintained at any data volume.

Categories / Manufacturers / Collections

    How is the catalog structure organized: categories, manufacturers and collections?

    The platform offers a three-level content organization system. You can create not only a category tree, but also separate sections for Manufacturers (brands) and Collections. Each such unit has its own optimized page with a product list, unique URL, SEO text and meta tags, allowing effective promotion for brand and thematic queries.

    Can I quickly fill category and brand directories?

    Yes, there are tools for instant filling. You can import lists of categories, manufacturers and collections via Excel (XLS), CSV or Google Sheets. The quick import from clipboard function is also implemented: just copy a list of names from any text editor and paste them into a special field, and the system will automatically create the corresponding entries.

    Is import of articles and content supported?

    The system allows bulk import of not only products, but also articles and blog categories. This significantly speeds up content transfer from other platforms or launching large information sections. All imported content retains its structure and is ready for publication immediately after upload.

Delivery

    How to configure shipping cost calculation depending on country or region?

    For global settings, go to Store — Delivery — «Delivery with country separation». Here you can specify specific countries and regions, as well as set order amount conditions for each method to be available. In this mode, delivery selection occurs at a preliminary step, before moving to the main order form.

    How to configure delivery methods directly in the order form?

    Go to Store — Delivery — «Select delivery method (in order form)». You can create an unlimited number of methods, set their «Name», «Priority» in the list and bind to a specific page «Language». For each method, you can specify «Delivery cost» and configure availability ranges by «Order amount», «Volume (m3)» and «Weight (Kg)».

    Can I change the set of address fields for different delivery methods?

    Yes. In the settings of each delivery method, you can choose field configuration. Available options: «Address fields in 1 line», split into «Region, city, street», as well as specialized formats «City and branch number» or «Parcel locker number». If you offer «Pickup», you can select «Address fields hidden».

    How to connect automatic branch selection via API (Nova Poshta, Ukrposhta)?

    In the delivery method settings, in the «Api» item, select the desired service (e.g., «NOVAPOSHTA API» or «UKRPOSHTA API»). You can also configure «Branch filter» to show only cargo branches, parcel lockers or regular branches. The platform supports automation, allowing you to enable or disable «Create TTN» directly from the method settings.

    Can I hide certain payment methods for a specific delivery type?

    Yes, the platform implements payment and delivery interdependence. In the delivery method editor, find «Hide payment method» and select from the list those methods (e.g., «Cash on delivery») that should not be displayed when this delivery option is chosen.

    How does package tracking work for the buyer?

    In the delivery settings, you can specify a «Tracking URL» with a {TrackNo} mask (e.g., https://site.com/?track={TrackNo}). When you add the waybill number in «Sales Statistics» to a specific order, the system will automatically substitute it into the link, and the buyer can track the package in one click from their account or email.

    Where to add delivery condition descriptions visible to the customer?

    Use the «Delivery description» field in the method settings. You can insert text or HTML code there. This description will be dynamically displayed in the order form immediately after the user selects the corresponding item in the delivery methods list.

    How to set up pickup points for an online store?

    To organize pickup, go to Store — Delivery — «Select delivery method (in order form)». In the method settings, select the field configuration «Pickup from pickup point (Address fields hidden)». The addresses themselves are configured in the section Store — «Stores/Pickup points», where you can add an unlimited number of branches or warehouses available for the buyer to choose when placing an order.

Payment and Payment Methods

    Is it difficult to set up payment processing on the site?

    No, popular payment systems are connected in a few clicks in the «Store → Payment Systems» section. To protect against fraud and increase customer trust, connecting payment aggregators is available for sites with their own domain.

    How to add payment system selection when placing an order?

    First, connect the payment system in the Store — Payment Systems section. After your system appears in the active list, go to Settings — Store, Currency and Payment — Select payment method (in order form). Add a new payment method and in the «Payment method after selection» field specify your system. In the «Show other payment methods besides the selected one, after order placement» item, select «hide» — then after placing the order, the user will immediately proceed to payment with the selected method.

    Can I send payment details when placing an order?

    Yes. In the Settings — Store, Currency and Payment — Select payment method (in order form) section, select the desired method and fill in the «Message sent by email after order placement» field in HTML format. You can also fill in the «Message after order placement» field — this text will be displayed immediately on the successful order page, but for sending details to the client, use the first option.

    How to add an explanation to the payment method directly in the order form?

    Go to Settings — Store, Currency and Payment — Select payment method (in order form) and in the settings of a specific method, fill in the «Payment method description» field. This text will be displayed as an information block directly in the order form when selecting this payment method. This is convenient for clarifying commissions or payment terms.

    How to hide address fields when ordering services?

    If you sell digital goods or services and the client address is not required, go to Settings — Store, Currency and Payment — Select payment method (in order form). In the payment method settings, activate «Hide address fields». In this case, when selecting this method, the order form will be shorter, and the fields for entering delivery data will be hidden.

Product Import and Store Automation

    Can I make a currency switcher on the site?

    Yes, customers can independently choose the currency for displaying prices. Conversion occurs at the rate that can be set manually in the settings or left empty for automatic updates by the platform's built-in tools. Currency selection is done via the GET parameter «setting_shop_currency».

    Available values: BYN, EUR, KZT, PLN, RUB, UAH, USD.

    You can insert a currency selection menu using a short code:

    {HOTENGINE-SC:currencymenu:BYN|EUR|KZT|PLN|RUB|UAH|USD}

    For correct menu display, you need to connect a ready-made style by adding the following line to your CSS file:

    @import url(/templates/styles/css_hotengine_currencymenu.css);

    Or you can create your own style for the elements.

    Important: to activate this function, be sure to enable the «Change currency by visitor» option in the «Settings — Store, Currency and Payment» section.

    Can I import products to the online store?

    Yes. Products can be imported via XLS, CSV, Google Sheets, XML or API. Both full catalog upload and updating of individual data are available: prices, characteristics and stock.

    Scheduled automatic import from different sources is supported. You can choose which fields to update and set markups using built-in formulas, which fully automates price management in real time.

    Can I automate store filling?

    Yes, for working with large databases, the Store — Import Products section is provided. You can upload files in XLS, CSV or XML formats. The system allows flexible mapping of your file columns to fields in the site database, eliminating the need for manual entry when migrating from other platforms or receiving fresh price lists from suppliers.

    How to set up automatic product import and what parameters are available?

    Automatic import (Store — Automatic Import section) allows you to completely delegate catalog updates to the system. You can create an unlimited number of import scenarios with the following parameters:

    • Protocols and sources: HTTP, HTTPS, FTP are supported, as well as direct integration with Google Tables. The system works with UTF-8 and Windows-1251 encodings.
    • Flexible schedule: Run interval from 4 hours to 30 days. You can set execution priority for different price lists.
    • File types: Direct work with CSV, XLS, XLSX, XML/YML, as well as support for ZIP archives (automatic extraction before import).
    • Smart markup: Built-in calculator allows automatic price changes from the price list. You can add a percentage or fixed amount (+, -, *, /) to the purchase or retail price. Scenarios are available: for example, if the price list has no «Purchase price», the markup will apply to «Retail».
    • Stock and data control:
      • The «Set "Out of stock" for others» function will zero out stock for products not in the new price list.
      • Automatic image conversion to WebP format to speed up the site.
      • Ability to split a cell with multiple photos if they are space-separated.
    • Multilingual: Automatic search and linking of products in different languages by SKU (e.g., code_en, code_ua).

    After each import, the system can send a report via Email or Push notification.

    How to automate store operations and save time?

    The platform allows you to fully automate routine processes: from bulk catalog filling and stock management to order processing, automatic discount calculation and integration with payment or logistics systems. You can focus on business development while the system handles the technical part. Commerce API is available for full flexibility.

    How does import of characteristics and complex data structures work?

    Import is implemented as flexibly as possible: you can load product characteristics both from one cell (as a list) and from separate XLS/CSV columns. Import via Commerce API or XML files is also supported, allowing synchronization of even the most complex data structures.

API Commerce / WEBHOOK / INTEGRATIONS

    Is there automatic data import in the system?

    Yes, in the Store — Automatic Import section, scheduler functions for catalog synchronization are available. You can set up two scenarios:

    • Automatic update: runs every 4 hours. Operates in «Update Only» mode (prices, stock) without adding new items or uploading photos, minimizing load.
    • Loading new products: runs once a day and performs a full import of new arrivals into the database.

    The function is available for sites with a parked domain. For correct operation, you must first save «Field Mapping» (presets No. 2 or No. 3) on the product import page.

    Does the platform support API and integrations?

    Yes. The platform supports API integrations for automating site and online store operations. This allows synchronization of products, orders, prices, connecting external services and automating business processes.

    Does the platform have an API for integration with external systems?

    Yes, the platform provides a full-featured REST API. With it, you can synchronize product stock, get order information, update prices and manage the customer base from third-party ERP or CRM systems (e.g., 1C, MoySklad). The API supports JSON and XML formats, ensuring high data exchange speed.

    What is a Webhook and how to use it?

    Webhook is a notification mechanism for events on your site. Instead of constantly requesting data via API, your system can «listen» for signals from BooStore. As soon as an event occurs on the site (e.g., «New Order» or «Payment Status Change»), the platform instantly sends a POST request to the URL you specified with detailed event data.

    What ready-made integrations are available out of the box?

    The platform supports direct integration with popular services without the need to write code:

    • Marketplaces: Automatic product export to Google Merchant Center, Rozetka, Prom, Facebook Shop.
    • Payment gateways: Stripe, LiqPay, MonoPay, WayForPay, PrivatBank, Hutko and others.
    • Delivery: Integration with Nova Poshta and Ukrposhta offices for obtaining branches and parcel lockers.
    • Analytics: Google Analytics 4 (including Ecommerce), Facebook Pixel and Google Tag Manager.
    • Other constantly updated integrations
    Where to find documentation and how to set up API integration?

    The complete technical guide to integration methods is available in the Commerce API Guide section.

    All necessary access keys and authorization parameters are generated and specified in the control panel at: «Settings — API and Integrations». There you can also test the connection and configure access rights for external services.

    How to set up automatic order transfer to ERP or CRM?

    To do this, in the Settings — Store section, specify the URL of your service for receiving data. The platform will automatically send a POST request in JSON format immediately after order placement. The request contains complete data about the buyer, cart contents and delivery parameters. If your service returns crm_order_id in response, it will be automatically linked to the order in BooStore.

    Can I synchronize order status changes with an external system?

    Yes. In the settings you can enable sales statistics export. The system will send a JSON package upon any order change in the admin panel (payment status change, delivery update, product composition change). This allows for two-way synchronization where Boostore acts as the frontend and the accounting system (e.g., 1C) as the backend.

    How to access the price list or statistics via an external request?

    You can receive data in JSON or CSV formats at special addresses (e.g., /ajax.php?statistic_sell or /csv_export_products.csv). For security, authorization uses an access key encrypted in MD5. You can use filters in requests (e.g., &sort_dateperiod=1week) to get only up-to-date data.

    What is Commerce API and what capabilities does it provide?

    «Commerce API» is a modern store management interface (analogous to WooCommerce API) designed for deep integration with external services. It allows you to programmatically receive order lists, bulk update products, manage categories, manufacturers and collections. The API supports standard HTTP methods and returns data in JSON format. Detailed technical documentation and method descriptions are available at: Commerce API Guide.

    What types of data can be added or updated via the API?

    The system supports flexible management of all key store entities via Commerce API. You can:

    • Manage orders: create new orders (CREATE ORDER), update existing ones (UPDATE ORDER) and get detailed information for each (ORDER DETAILS).
    • Work with products: update a specific item (UPDATE PRODUCT) or perform bulk price and stock updates for a group of products (UPDATE MULTIPLE PRODUCT).
    • Configure structure: add and edit categories (UPDATE PRODUCT CATEGORIES), manage the list of manufacturers (UPDATE PRODUCT PRODUCERS) and product collections (UPDATE PRODUCT COLLECTIONS).

    This allows you to fully synchronize the catalog and sales with any external accounting systems.

Notifications / Messengers / E-mail

    How does order tracking in external CRMs work?

    For full integration, the API provides the crm_order_id parameter. You can save the ID from your CRM to the Boostore database and later receive or update order data using this external identifier (/crm_orders/{id} methods), without being tied to the platform's internal numbering.

    Are messenger notifications supported (Viber, Telegram)?

    Yes, BooStore.pro provides instant notifications in Viber and Telegram, as well as standard Email and Push notifications. You can configure data reception from any feedback forms or shopping cart to external sources in real time.

    Are there Push notifications for the browser?

    Yes, the platform supports Web Push notifications. You can configure them to be sent to the admin about new orders or events on the site. This allows you to quickly respond to customer actions, even if you don't have the control panel tab open — the notification will come directly to your desktop or smartphone screen via the browser.

Generating Links for Adding Products and Invoices

    Can I configure email sending via my own SMTP server?

    Yes, this is recommended to ensure maximum deliverability of your emails. In the Settings — Mail section, you can specify your SMTP parameters (server, port, login, password and encryption type). This will allow the system to send notifications to customers and the admin via your official mailbox (e.g., info@your-domain.com), significantly increasing the trust of mail services and reducing the risk of emails going to spam.

    Can I automate adding products to the cart?

    Using the Link Generator, you can turn any element on the site (button, text or image) into a tool for automatically adding products to the cart. You define the scenario yourself: add one or several products at once and instantly redirect to the payment page.

    «Store → Link Generator for Adding Products to Cart»

Payment and Payment Methods

    Can I generate invoices for services on the fly?

    Yes. The platform allows you to create buttons for paying for any services or products without having to search for them in the catalog first. For example, you can place a «Sign up for a seminar» button, configure a contact collection form, and immediately after it is filled, redirect the client to payment using the selected method.

    This function allows you to instantly generate invoices with the required cost directly during user interaction, which is critical for selling services, online courses or one-time consultations.

    «Store → Invoice Generator for Payment»
    Can I connect my own domain and SSL certificate?

    Yes. You can connect your own second-level domain via DNS settings. All sites on the platform work via the secure HTTPS protocol. The SSL certificate is connected automatically and free of charge, ensuring data security and search engine trust.

    Does the platform support multilingual sites?

    Yes. You can create full multilingual sites by adding different language versions for pages, products and categories. Separate URLs are formed for each localization, allowing effective project promotion in different countries and improving SEO.

    Can I run a blog and publish articles?

    Yes. The platform supports creating blogs, news feeds and content sections. You can publish articles, optimize them for search queries and attract organic traffic, increasing the expertise of your resource.

    Does Boostore have a discount system and loyalty program?

    Boostore implements a flexible loyalty system including discounts and cashback. The main feature is that the discount system can be tied to specific customer groups. This allows you to create personalized offers for regular customers, VIP clients or partners, automating work with different audience segments.

Google Analytics / Tag Manager / Pixel

    Can I award bonuses or cashback upon registration?

    Yes, the system allows flexible management of loyalty, including cashback for registration. You can motivate new users by using UTM tags to check the registration source and automatically top up the client balance.

    Bonus configuration supports complex formulas: percentage of amount, fixed values or mathematical operations (e.g. XX%, -XX, /XX). Cashback is displayed in the buyer profile and is accrued automatically when the order status changes to «Processed» or «Completed».

    To protect profits, a write-off limit is provided: for example, with a product cost of $100 and a 10% limit, the client cannot pay more than 10% with bonuses. All calculations, including fractional values, are automatically rounded to two decimal places for accounting accuracy.

    How to connect analytics and track sales?

    The platform implements automatic integration with Google Analytics 4, Google Tag Manager and Facebook Pixel. You just need to specify your identifiers in the Settings — Statistics section. The system will automatically start transmitting e-commerce data, allowing you to analyze advertising effectiveness and user behavior without hiring programmers.

    Which events are automatically sent to analytics?

    The system by default transmits all standard e-commerce events:

    • view_item_list and view_item — catalog and product card views;
    • add_to_cart and remove_from_cart — cart actions;
    • begin_checkout and purchase — checkout process and completion;
    • generate_lead and sign_up — form submissions and registration.

    For Facebook Pixel, the events PageView, ViewContent, AddToCart and Purchase are also transmitted with automatic cost conversion to USD at your site's exchange rate.

    Can I set up custom tags and events?

    Yes. You can implement custom tag transmission using JavaScript, ShortCodes and special hotengine-markers micro-markup. This allows you to dynamically insert product or order data into your custom tracking scripts. Additionally, individual conversion codes can be set on order confirmation pages.

File Management

    Is Consent Mode supported?

    Yes. In accordance with modern privacy requirements (GDPR), the platform provides a Consent Mode. You can activate it in the Settings — Statistics section. This allows you to properly manage tracking tags depending on user choice, ensuring legal data collection for Google and Facebook.

    Is there a file manager in the system?

    Yes. The admin panel has a full-fledged «Files» section. It allows you to conveniently manage all uploaded media files, documents and archives of your site in one place.

    Is there image conversion and processing during upload?

    Yes. The platform supports automatic graphics processing. Right during file upload, images can be proportionally reduced or converted to modern standards WebP, PNG and JPG to ensure maximum page loading speed.

Pop-Up Windows

    Can I create folders to organize files?

    Yes. You can create an unlimited number of folders and subfolders for structuring content. This allows you to conveniently distribute images, price lists and documents across sections, as well as bulk manage files through the web interface directly in the «Files» section.

    Can I create pop-up windows on the site?

    Yes, the platform has a powerful modal window generator. The window is called by simply adding the class="hotengine-script-popup" to a link or button. You can load Youtube videos, content from other site pages, product cards or any HTML block by its ID or class in the pop-up window. Pop-up generator - https://boostore.pro/en/page.php?p=submit_catalog_page&subpage&generatepopup

    What settings are available for pop-up windows?

    Through data-attributes, you can fully control the window behavior: set «width» (data-width) and «height», set limits (data-max-width), fix the header or configure responsiveness for mobile devices (data-mobile-width). Advanced features are also available: data-dialog-callback to run a JS function after the window opens and data-close-overlay to control closing the window by clicking outside its area.

HTML Widgets

    How to display a product card or article in a pop-up window?

    Special data loading types (data-iframe) are used for this. For example, value «5» loads product card data, «1» — an article from the catalog, and «14» or «15» load clean HTML of these pages without extra design elements. This allows you to create quick product previews or information references without reloading the entire page. Pop-up window generator - https://boostore.pro/en/page.php?p=submit_catalog_page&subpage&generatepopup

    What are HTML Widgets?

    «HTML Widget» is a set of independent HTML elements for insertion on site pages. The library includes: Accordion, Tabs, Callback block, Slide with comments/reviews, as well as Offers mosaic (product list in mosaic style) and Google Reviews (dynamic loading of reviews via API).

    What is a Spoiler and how does it work?

    Spoiler is a page element that initially hides part of the content and expands only on click. In our platform, spoilers are implemented exclusively using CSS, allowing them to work instantly without using additional JavaScript scripts.

Adding Products - Custom Button

    What is Price range swiper used for?

    Price range swiper is a convenient graphical slider for selecting a price range in the search filter. It allows users to quickly limit product selection by cost, simply by moving sliders, which significantly improves store usability.

    What is the Product Add Link Generator and why is it needed?

    This is a tool in the Store — Link Generator section that allows you to create a single link, clicking on which automatically adds one or several products to the cart. It is ideal for landing pages (single product sites), promotional mailings or "Buy Bundle" buttons, as it lets the user proceed directly to checkout, skipping the manual cart filling step.

    What parameters can be configured for the add-to-cart link?

    The generator allows flexible management of the purchase process through the following settings:

    • Product IDs and quantity: you can specify a comma-separated list of IDs and set the exact quantity for each (e.g., 1,1,2).
    • Variations: support for specific product modifications by their IDs.
    • Cart clearing: the "Clear cart" function will remove all old products before adding new ones (useful for mono-brand promotions).
    • Duplicate check: protection against accidental repeated addition of the same product on subsequent clicks.
    Can I redirect directly to the checkout page?

    Yes. In the "Redirect link" field you can specify the cart URL (e.g., /en/page.php?p=cart&send). The "Time before redirect" (in milliseconds) is also configurable — it is recommended to set a small delay (e.g., 2000 ms) so the system can reliably record the added products to the user session before navigating.

    How to manage notifications when using such links?

    In the "Messages after adding product" section you can choose one of three modes: "Do not show any messages" (for seamless transition), "Only add-to-cart messages" or "Show all". For landing pages, hiding messages is most commonly used so the customer immediately sees the order form.

Invoice Generation for Online Payment

    Can I protect the link from bots?

    Yes, the generator supports the "Security code" setting. You can enable mandatory captcha entry (from 3 to 9 characters) before products are added to the cart, helping to avoid spam orders through direct links.

    Can I create a direct link or button for invoice payment?

    Yes, the system has a tool Store — Invoice Generator for Payment - https://boostore.pro/en/page.php?p=submit_catalog_page&subpage&shop_catalog_payment_systems&shop_catalog_payment_systems_generate_link. It allows you to create a special URL link, clicking on which takes the user to the invoice generation page with already filled data. This is convenient for issuing invoices in messengers, social networks or creating quick payment buttons on landing pages.

    What parameters can be passed in the payment link?

    Via a GET request, you can fully form the payment context:

    • Amount and currency: payment_price (price) and payment_currency (available USD, EUR, UAH, PLN and others).
    • Payer data: payment_email, payment_soname (name) and payment_phone.
    • Order description: payment_desc — information that the client and you will see in the control panel.
    • System selection: shop_payment_systems (ID of a specific gateway) and the hide_selector_payment_systems flag to prevent the user from changing the payment method.
    • Analytics: shop_cart_statistic_group — a label for grouping orders in sales statistics.
    How to implement data entry before payment (Pop-up window)?

    Since the client data may not be filled in the direct link, it is recommended to use a JS pop-up script. The platform provides a ready-made solution: hotengine-payment-popup-demo.js. With it, the customer first enters their contacts in a neat pop-up window, after which the script automatically completes the link with this data and redirects the user to payment.

Widgets / Menu / Other

    What should I pay attention to when using the invoice generator?

    It is important to remember two points:

    1. Security: Since parameters are passed openly in the link, the buyer can technically change the price in the browser address bar. Always check the payment amount against your expectations in the admin panel before shipping the product.
    2. Gateway setup: Pre-connect and activate payment systems in the store settings. If the systems are not configured, the client will receive a notification about order creation but will not be able to make a transaction.
    Where are the tools for creating widgets and menus?

    All generators are available in the Store — Widgets section (or via direct link in the admin panel: Widget Generator). In this section you will find:

    • Widget with categories: for creating navigation and menus.
    • Widget with products: for displaying showcases and product sliders.
    • Widget with manufacturers: for displaying brands.
    • Widget with articles: located in the Article Catalog — Widget with Articles section and allows you to display blog announcements anywhere on the site.
    Can I place store products anywhere on the site?

    Yes, for this in the Store section select "Widget with Products". It allows generating a short code (ShortCode) that can be inserted into a product description, news item, article or static text block. The widget automatically converts the selected product list into an interactive slider or stylish showcase. Example of product widget in action.

    What does widget ShortCode look like and how does it work?

    A typical code looks like: [MENU:shop_products_slider:pers_cat_id-123:on_page-4:button-cart:sale]. The system instantly replaces this code with a product block. You can flexibly control the output using parameters:

    • Filtering: by categories (pers_cat_id), manufacturers (producer) or collections (collection).
    • Marketing labels: show only new items (new-products), bestsellers (bestseller) or sale items (sale).
    • Display: add cart button (button-cart), rating (rating-stars) or variations (variety).
    • Sorting: by price, date or random order (random).
    How to adapt the widget for mobile devices and load speed?

    For professional configuration, use optimization parameters:

    • Lazy Load (:lazy-0): speeds up page loading by loading images only on scroll.
    • Auto-width (:auto_width): the number of cards per row adjusts to screen automatically.
    • Scroll mode (:scroll-9999x8x0): on smartphones replaces buttons with a convenient horizontal swipe strip, saving space.
    • Append mode (:append-900): on desktops adds a "Show more" button instead of long scrolling.
    • Full parameter list available on the Store — Widget with Products page.
    Can I change the design of the product widget?

    Yes. You can set a unique ID (:id-my_block) and write your own CSS styles for it. If you need a completely custom interface, use the widget without the :add-javascript parameter — the system will output clean HTML markup that you can integrate into any third-party slider (e.g., Swiper).

    Can I display the store category tree anywhere on the site?

    Yes, in the Store section select "Widget with Categories". The generated ShortCode allows you to insert a menu into any block. The system supports different display types: Mega Menu (burger with expanding window), Flex Menu (vertical with subcategories on the side), Horizontal (horizontal row) or classic Dropdown.

    How to configure the depth and informativeness of the category menu?

    You can fine-tune the category widget through additional parameters:

    • Nesting (:treelevel-2): limits the depth of the displayed tree.
    • Detail: show product count (:products) or icons (:imageattr).
    • SEO (:googlenav): adds navigation schema markup for search engines.
    • Carousel (:carousel): turns the category list into a dynamic slider with autoplay and speed settings.
    How to set up Mega Menu?

    Mega Menu (parameter :megamenu) is a universal adaptive solution. It can be configured in the Store — Widget with Categories section. When activated, a burger button appears, opening a window with categories on the left and content on the right. In mobile version, the menu automatically switches to fullscreen mode.

    • :multiply mode: the right panel immediately displays a grid with second and third level nesting lists.
    What is Flex menu and vertical menu?

    Two types are available for side panels on the settings page Store — Widget with Categories:

    • :vertical — classic vertical list.
    • :flexmenu — compact menu with fixed height (:height-400). Subcategories open in a block to the right of the parent.
    • Additional Flex options: :with-overlay (background dimming), :scroll-lock (page scroll lock), :fix-on-top (stick to top) and :disallow-overflow (prevent elements from overflowing).
    How to use horizontal, dropdown and other menu types?

    In the Store — Widget with Categories section you can choose one of the following display formats:

    • :horizontal — horizontal row. When setting ID hotengine-categories-lists-horizontal it can be used inside content pages.
    • :dropdown — standard dropdown menu.
    • :full — fully expanded category tree.
    • :list — list of subcategories (similar to category page), used with the start-X parameter.

Product Types / Search Filter / Product Comparison

    What other category settings are available?

    On the Store — Widget with Categories page you can fine-tune the ShortCode:

    • Nesting level (:treelevel-X): tree depth limitation.
    • Informativeness: adding product counter (:products), icons (:imageattr) or SEO navigation markup (:googlenav).
    • Adaptability: :scroll-9999x3 turns the list into a horizontal swipe strip on mobile devices.
    • Carousel (:carousel): enables slider effect with autoplay support (:carousel-autoplay-true).
    • Other parameters...
    What are "Product Types" and how are they related to filters?

    Product Types (e.g., "Laptops", "Footwear") allow grouping products by unique properties. Each type has its own set of characteristics (Screen Size, Color, Material). Based on these characteristics, the system automatically builds a search filter, allowing customers to find products by specific parameters.

    What is the process for creating characteristics and filters?

    The setup process has three stages:

    1. Create type: In the admin panel, create a new Product Type.
    2. Add characteristics: After saving the type, add characteristic groups and their possible values (e.g., for the "Weight" group, values "10 kg", "20 kg").
    3. Link to product: In the product card, select its "Type", after which the system will prompt you to fill in the corresponding characteristics.
    Are multiple characteristic values supported?

    Yes. You can specify several values for one characteristic of one product. For example, if a sneaker model comes in several colors, you can select "Gray", "Green" and "Red" simultaneously. In the search filter, such a product will be displayed when any of these colors is selected.

    How to place a search filter on the site?

    There are two ways:

    • Functional menu (recommended): Create a menu of type "Search with Filter by Product Types". This ensures better compatibility with the mobile version.
    • ShortCode: Insert the code {HOTENGINE-SC:smart_search_widget:PARAM} into the page text, where PARAM is the filter settings.
    What is the "autopath" parameter and why is it needed?

    The autopath parameter (or autopathID in block text) is critical for preserving search context. It allows filtering within the current open category, without resetting the user to the general search page. For example, for laptops, you can set the filter to display only for the path /pers_shop/notebook/.

    How to configure product count display in the filter?

    In the product type settings or via ShortCode parameters, you can control counters:

    • count — show product count next to the value.
    • count_all — count products across the entire site, ignoring the current category.
    • hideempty — automatically hide characteristics for which no products are found in the current section.
    How to enable the product comparison feature?

    Comparison only works for products that have a Product Type assigned. To activate:

    1. In "Store Settings" (Product View tab) enable the "Compare" button.
    2. In the settings of a specific Product Type and in the Characteristics themselves, check the "Comparison" box.
    3. On the comparison page (/compare.htm), only those parameters for which this checkbox is active will be displayed.
    Where can the user see the list of products added for comparison?

    The list is available at /compare.htm. For user convenience, it is recommended to add a button with an indicator of the number of selected items in the site header using the short code: {HOTENGINE-SC:shop_compare_menu}.

    Can I style comparison elements?

    Yes. All product card elements added to comparison are automatically assigned the attribute data-compare="1" by the system. You can use it in your CSS files to visually highlight selected items.

    How do automatic descriptions based on characteristics work?

    The system allows creating description templates that are automatically pulled into the product card. The content of such an article will dynamically change depending on which characteristics (Type, parameters) are set for a particular product.

Mass / Bulk Product Editing

    How to translate filter values to other languages?

    You can translate characteristic values directly in their settings. To ensure the translation displays correctly in exports (XML/CSV/JSON), use links with a language prefix (e.g., /en/export_file) or specify the desired language in the file generation parameters.

    Is there a mass (bulk) product editing feature?

    Yes, the powerful "Bulk Editing" tool in the "Store" section is designed for this. It allows you to apply changes to hundreds or thousands of items at once instead of editing each product individually. You can mass change prices (using mathematical formulas), move products between categories, update stock statuses, enable promotions and even manage access (publish or delete) for the entire selected product group with one click.

    How does search and filtering work in bulk editing?

    Before updating, you can flexibly filter the desired products by:

    • Category and manufacturer: including the ability to capture products from all subcategories.
    • Price range: search for products in the "from" and "to" interval.
    • Availability: select only those in stock, or conversely — out of stock.
    • Language: editing products of a specific language version.
    • Title list: you can paste a list of names, and the system will find only them.
    How to mass change prices or apply markups?

    In the "Update" block, a mathematical calculator for prices is available. You can:

    • Set a fixed price (via =).
    • Index: add or subtract an amount (+100) or percentage (+15%).
    • Multiply or divide: e.g., for currency conversion (*41).
    • Work with old price: move the current price to "old" (creating a promotion) or vice versa — clear old prices.
    • Use markup: calculate a new retail price based on the purchase price (Cost Price) with a given coefficient or percentage.
    How to mass configure promotions and sale timers?

    Bulk editing allows turning regular products into promotional ones:

    • Label activation: setting flags like "Sale", "New", "Bestseller" or "Price reduced".
    • Promotion content: via the built-in visual editor, you can set a general description of promotion terms for all selected products.
    • Timer automation: you set an end date, and the system decides what to do when time expires (e.g., restore old price, remove the sale label or restart the timer for a new period).
    • Wholesale links: you can set the "Price" equal to the minimum or maximum wholesale price with one click.

Backup

    What else can be changed in bulk?

    In addition to prices and promotions, the following actions are available:

    • Move to another category or change manufacturer for the entire group.
    • Availability management: mass set status to "In stock", "On order" or completely hide products from listing.
    • Language synchronization: if the "Products in other languages" option is enabled, changes will apply to all localizations of related products.
    • Access management: quick publishing, unpublishing or complete deletion of a product group.
    • Discounts: setting text discount labels (e.g., "-10%" or "Sale") that will appear on product icons.
    Is there a backup feature for the site?

    Yes. In the Settings — Site Backup section you can create a file containing the main data of your resource. The backup includes: all static pages, menu structure, news, articles, article catalog categories and your custom CSS styles.

Spam Protection

    How to properly save online store data (products, categories)?

    Since the product catalog can be very large, it is exported separately. For complete store data safety, it is recommended to regularly export the following sections: Products, Store Categories, Manufacturers and Collections. This will allow you to have an up-to-date copy of the entire commercial structure of the site separately from system design settings.

    Is there spam protection on the platform?

    Yes, the system implements multi-level protection against unwanted messages and spam orders:

    • Captcha: you can enable a security code both in the Form Builder and in the checkout settings (Settings — Store section). You can choose the complexity (from 3 to 9 characters).
    • Global filter: the built-in database automatically blocks requests from known spam resources.
    • Custom phrase database: in the Settings — Incoming Message Filter section, you can create a personal list of prohibited words and stop phrases. Messages containing such data will be automatically rejected by the system.

Mobile Menu and Mobile Version of the Site

    What additional technical anti-bot protection is used in forms?

    In addition to visible captcha, the platform uses hidden protection mechanisms. Forms have built-in hidden bot check fields (honey-pots): robots automatically fill them, while they remain invisible to real users. If such a field is filled, the system instantly blocks data submission. There is also anti-duplicate submission protection: a limit (flood control) restricts the frequency of requests from one IP address, preventing automated spam and accidental duplicate orders.

    Will my site be adapted for mobile devices?

    Yes, all sites on the platform are built on block layout that automatically adapts to any screen — from smartphones to widescreen monitors. You get full access to HTML, CSS and JavaScript, allowing you to perfect mobile adaptation by customizing each element individually for different resolutions.

    Are there special functions for the mobile version of the site?

    The system supports creating a separate mobile menu and optimized widgets (e.g., horizontal product scroll) that significantly improve UX on touchscreens. With the ability to flexibly hide or rearrange blocks, you can create lightweight and fast interfaces that meet all Google Core Web Vitals requirements.

    Can I make the site look like a mobile app?

    Yes. The platform provides a special widget "Mobile Menu — App" for this purpose. It allows you to implement an interface familiar to smartphone users: with convenient navigation at the bottom of the screen, quick access to key sections and the cart.

    The widget is exceptionally flexible: you can configure individual styling, choose icons, define menu invocation methods, and adapt it to your business logic. This lets you turn a regular website into a full-fledged mobile web application without complex development.

    How does the mobile menu work and can I hide unnecessary elements?

    You can flexibly configure element display for mobile devices. The system lets you hide the main header, logo, or individual blocks when the mobile menu is activated. Configuration is available through standard options as well as by individual element classes or IDs.

Forms

    Can I create a professional booking system?

    Yes. The Boostore platform includes a powerful booking widget that allows you to organize appointments for services or rental of any resources: from restaurant tables and massage rooms to car rentals and group event registration.

    Key features of the booking system:

    • Object separation: Using group IDs you can separate schedules for different masters, rooms, or pieces of equipment.
    • Flexible time slots: You set the time step (e.g., 30 minutes or 2 hours) and the maximum duration of a single booking.
    • Automatic cost calculation: The system can dynamically recalculate the price based on the selected period (e.g., price per hour * number of hours) or use a fixed rate.
    • Smart statuses and calendar: Slots are synchronized with sales statistics. Statuses like "Preliminary booking", "Booked", or "Cancelled" instantly change time availability on the site. If a slot is occupied, repeated booking is impossible (except for group events).
    • Multi-seat booking: For seminars or group training, you can specify the number of available seats for the same time period.
    • Payment to confirm booking: You can set mandatory prepayment. Immediately after selecting a time, the customer is redirected to the payment system, and the booking status changes automatically after successful payment.
    • Booking horizon settings: Control how far in advance a customer can book (e.g., "only from next Monday" or "no more than a month ahead").

    The functionality is implemented through JSON parameters and data-attributes, allowing developers to customize the booking interface for any business needs.

    Can I create custom forms on the site?

    Yes, the BooStore.pro platform has a powerful built-in Form Builder. You can create forms of any complexity with field name, ID and CSS class binding. The system supports sending data to your site (to CRM and email) or to any external server. Flexible configuration of data types, required fields, file attachments and auto-responders for users is available.

    Where to find form management tools and window generator?

    All necessary tools are located in the following sections:

    In these sections, you can configure not only the visual part but also the data processing logic: from CRM integration to auto-responder setup.

    Are popup forms supported?

    Yes, a special Popup Window Generator is provided for this. You can turn any button or link into a trigger for opening a form. The builder allows you to configure:

    • Dimensions: width, height (including auto-adjustment to content) and responsiveness for mobile devices.
    • Interface: window title, button texts for "Submit" and "Close", header fixation.
    • Behavior: close on overlay click, field auto-fill and Callback functions after window opening or button press.
    How to implement "Quick Order" or "Callback" via Popup?

    The system has preset functional presets for popup forms. Using the data-dialog-form_title parameter, you can instantly configure the form:

    • Callback: automatically leaves only the "Name" and "Phone" fields.
    • Quick order: hides extra fields (e-mail, comment) for the fastest possible purchase.
    • Consultation / Ask price: adds thematic titles and links productid so you know which product the request pertains to.
    Can I pass dynamic pricing or data through a form?

    Yes. Using the name="form_price" field, you can pass the final price calculated via JavaScript based on user selection. For popup windows, attributes data-dialog-formprice and data-dialog-modify-text are available, allowing you to change request data "on the fly" before submission, which is ideal for complex service calculators.

    Can I make instant form submission on open (Auto-submit)?

    Yes, this is an advanced feature for increasing conversion. You can create an input field (e.g., for phone) right on the page, and when clicking the window open button, the data from that field will automatically move to the hidden form and it will submit immediately. This uses the attributes data-dialog-form-autosubmit="1" and data-dialog-form-autosubmit-replace-class that link the field on the page with the field inside the form.

    How to hide extra fields in a specific popup window?

    You can use the same form for different purposes by hiding unnecessary fields via the data-dialog-form-hide-fields attribute. In the generator, simply list the field IDs or classes separated by |. For example, in one window you keep all fields, and in another — only phone, allowing you to avoid creating dozens of identical forms in the admin panel.

    Can I configure notification sending from forms to messengers?

    Yes. The platform allows configuring instant notifications to Viber and Telegram. You are not limited to general site settings: each created form can have individual notification channels. This is convenient when requests from different departments (e.g., "Technical Support" and "Sales Department") should go to different specialists in their personal messengers or different work groups.

Marketing and Promotion Tools

    How to set up different notifications for different forms?

    In the Forms section, you can specify unique notification parameters for each specific form. In addition to messengers, you can configure an individual auto-responder for the user and choose which section of the internal CRM or which email the request will land in. Such flexibility allows turning ordinary forms into a full-fledged task distribution system within your team.

    What tools are available for launching ads and analytics?

    The platform is fully ready for professional promotion. The system has built-in automatic event tracking (E-commerce) that sends data about cart additions and purchases to Google Analytics 4 and Facebook Pixel. You don't need to manually configure codes — just enter your account IDs in the settings.

    Does the platform support schema markup for search engines?

    Yes, structured Schema.org (JSON-LD) markup is embedded by default on all product and category pages. This allows search engines to generate rich snippets: Google search results will immediately show price, availability and rating (reviews), significantly increasing the click-through rate (CTR) of your links.

    Can I create product feeds for Google Merchant Center and Facebook?

    The system generates dynamic feeds in all popular formats: XML (YML), JSON, CSV, RSS. This allows automatic upload of products to Google Shopping, Facebook Catalog and any external marketplaces. Feeds update in real-time, ensuring price and stock accuracy in your ads 24/7.

    Are there built-in tools for working with customer database?

    Yes, the platform automatically collects and segments the customer database. The system has built-in E-mail marketing, allowing you to send notifications and newsletters to collected contacts. All data is protected and organized within your personal CRM, enabling long-term customer relationships without paying for third-party services.

    What tools are available for launching ads and analytics?

    The platform is fully ready for professional promotion. The system has built-in automatic event tracking (E-commerce) that sends data about cart additions and purchases to Google Analytics 4 and Facebook Pixel. You don't need to manually configure codes — just enter your account IDs in the settings.

    Does the platform support schema markup for search engines?

    Yes, structured Schema.org (JSON-LD) markup is embedded by default on all product and category pages. This allows search engines to generate rich snippets: Google search results will immediately show price, availability and rating, significantly increasing the click-through rate (CTR) of your ads and organic links.

    Can I create product feeds for Google Merchant Center and Facebook?

    The system allows generating dynamic XML/RSS feeds that are automatically updated when prices or stock change. This is an ideal solution for launching dynamic remarketing and Google Shopping campaigns, guaranteeing data accuracy in your ads 24/7.

SEO

    Can I create a marketplace or supplier catalog?

    Yes. The flexible structure of categories and characteristics allows implementing not only stores but also complex marketplaces, service aggregators or company catalogs with convenient filtering. For full assortment management, you can assign an individual supplier to each product, simplifying accounting and logistics.

    Is Boostore suitable for SEO specialists and developers?

    Yes. The platform provides full access to editing HTML, CSS and JavaScript, allowing implementation of any technical solutions. For SEO, a powerful toolkit is provided: Schema.org markup support, meta-tag management, robots.txt editing, automatic sitemap.xml generation and integration of advanced analytics services. This makes the system an ideal environment for professional promotion and custom development.

    Does BooStore.pro really provide a speed advantage?

    Yes. High performance is achieved through combined caching (at file and RAM level) and a modern optimization architecture. The platform runs on pure Vanilla JS without heavy libraries and uses a deferred script loading strategy, where scripts activate only upon direct user interaction with site elements.

    Is the Boostore platform suitable for SEO promotion?

    Yes. The platform is originally designed for strict search engine requirements. You have access to advanced SEO settings: full meta-tag management, robots.txt editing, automatic sitemap.xml generation, Canonical URL and 301 redirect configuration. Extended Schema.org markup is supported for creating attractive snippets.

    Special attention is paid to Core Web Vitals: thanks to server optimization, code minification and modern image formats, sites achieve 100 points in Google PageSpeed Insights. This guarantees instant loading on mobile devices and provides a significant ranking advantage in Google.

    How to manage indexing and robots.txt file?

    The platform provides full indexing management without the need to work via FTP. In the "Settings — SEO" section, you can directly edit the robots.txt file, blocking service sections from robots or opening necessary pages. Additionally, the system automatically generates and updates a dynamic Sitemap.xml, notifying search engines about new products or articles.

    How is the duplicate page problem solved (Canonical)?

    To prevent duplicate content, the platform automatically sets the <link rel="canonical"> tag on all product, category and filter pages. This indicates the priority page version to search engines, protecting your site from penalties for non-unique content and concentrating "link weight" on the main URLs.

    How does SEO interlinking work on multilingual sites?

    The system fully complies with international SEO standards for multilingualism. For each page, rel="alternate" hreflang="x" tags are automatically generated. This ensures correct interlinking between language versions: Google will always know which site version to show the user based on their region and language, significantly improving positions in local search results of different countries.

    Can I manage meta tags for different language versions?

    Yes, separate control fields for Title, Description and Keywords are provided for each language. You can also configure automatic meta-tag generation templates using variables (product name, price, category), allowing instant optimization of thousands of pages in all supported languages simultaneously.

    How to maintain search positions when migrating to your platform?

    When migrating your site, you can use the built-in 301 redirect manager in the control panel. It allows linking old page URLs with new ones, preserving accumulated "link weight" in Google and preventing 404 errors.

About the Platform

    Is there a site migration service from another platform with SEO preservation?

    Yes, we provide a full site migration turnkey service. The main feature of our approach is preserving accumulated search traffic. We don't just transfer content but also configure a 301 redirect map: each old page URL will correctly redirect users and search bots to the new URL on the BooStore.pro platform.

    For migration, we will need your current price list in CSV, XLS, XML format or a link to a Google Sheet. The service is paid and calculated individually depending on the data volume and complexity of your current site structure.

    Is Boostore a SaaS platform or a CMS?

    Boostore combines the capabilities of a SaaS platform and a classic CMS. On one hand, it is a cloud system that does not require server installation and updates automatically. On the other hand, the platform provides CMS flexibility: you can edit HTML, CSS and JavaScript, create your own blocks and fully manage the site structure.

    Can I create an online store on the Boostore platform?

    Yes. The platform includes a full ecommerce system for creating online stores and product catalogs. Categories, product characteristics, filters, variations, cart, order processing, delivery methods and payment system integrations are available.

    What types of sites can be created on the Boostore platform?

    The platform allows creating various types of sites:

    • online store
    • product catalog
    • corporate website
    • landing page
    • blog or content project
    • portal or service site
    • booking service site (Universal tool for automating service appointments, resource rental or accommodation booking)

    The flexible platform architecture allows scaling the project for any tasks.

    Do I need to install CMS on a server for Boostore to work?

    No. Boostore works as a cloud SaaS system. This means that CMS installation, server configuration, system updates, security and speed optimization are handled by the platform. The user gets a ready-made environment for creating and managing a website.

    Can I add custom JavaScript or HTML code?

    Yes. You can add your own HTML, include JavaScript and use custom scripts. This allows implementing any additional functions and integrations.

    Is the platform suitable for large online stores?

    Yes. The platform architecture allows creating both small stores and large ecommerce projects. Catalog scaling, process automation, data import and integrations with external systems are supported.

    How fast do websites load on the platform?

    The platform is optimized for high page load speed. Cloud infrastructure, code optimization and resource minification are used. This positively affects SEO and user experience.

    Is there a free version of the platform?

    Yes. The platform offers free website hosting. You can create a site and use basic features without time limits. Free hosting allows you to upload up to 300 products.

    How long is free website hosting available?

    Free hosting on BooStore.pro is indefinite. However, if the site is not populated, not updated and the owner has not logged into the control panel for more than 1 year, such a project may be deleted as inactive. The exception is sites with attractive design or those that continue to be actively used by visitors — they remain in the system without restrictions.

    Where is the site created on the platform hosted?

    Sites are hosted in the platform's cloud infrastructure. The user does not need to purchase separate hosting or configure a server — all the technical part is already included in the system.

    Can I migrate a site from another CMS?

    Yes. You can transfer site data from another CMS or platform. Products and content can be imported via XLS, CSV, XML files or through API integrations.

    How is Boostore different from other website builders?

    Unlike many website builders, the platform combines the convenience of SaaS service and the flexibility of a professional CMS. The user gets cloud infrastructure, online store automation, advanced SEO capabilities and complete design customization.

    Can I create an online store on the platform?

    Yes, Boostore is originally designed as a powerful E-commerce platform. All necessary tools are available: catalog management, shopping cart, online payment, shipping cost calculation, discount and coupon system. You can sell both physical goods and services with online payment capability.

    Is Boostore suitable for startups and small businesses?

    Yes. Thanks to free hosting and no costs for hosting or purchasing a CMS, startups can launch a full-fledged business in minutes. The ready-made infrastructure allows you to start working without investment in development.

    How is Boostore different from Wix, Shopify and other website builders?

    Boostore is a powerful alternative to popular builders, combining the convenience of SaaS and the flexibility of a professional CMS. Unlike Wix or Shopify, we offer deeper code customization, no strict design limitations and specialized tools for ecommerce automation. You get cloud infrastructure and automatic updates while maintaining full control over the site structure and logic.

    Can I create a website without programming skills?

    Yes. Most platform functions are available through an intuitive interface and ready-made widgets. You can independently build the site structure, configure a unique design and populate the product catalog without writing a single line of code. The system handles all technical complexities, allowing you to focus on content and sales.

    Why are sites on BooStore.pro faster than competitors?

    We abandoned heavy libraries (like jQuery) in favor of Vanilla JavaScript. This allows sites to load instantly and get high scores in Google Core Web Vitals. Fast loading is not only convenient for customers but also a direct advantage in search engine ranking.

Booking and Services / Booking

    Can I develop custom solutions on Boostore?

    Yes, you can. The Boostore team is ready for collaboration and implementation of custom solutions. For contact: boostorecms@gmail.com

    Can I create a site for booking services or rentals?

    Yes, the platform has a powerful module for automating appointments and rentals. You can turn a regular online store into a full booking service with hourly or daily schedules. The system supports creating flexible slots, accounting for days off, queue management and automatic notifications for customers.

    Key module features:

    • Individual calendars: creating separate schedules for each specialist, resource or rental object.
    • Flexible intervals: configuring session duration, breaks between them and limits on the number of appointments per time slot.
    • Form generator: creating unique booking buttons and widgets that can be placed anywhere on the site.

    Management tools are located in the section: Store — Booking (or via the link Booking Calendar Generator).

Performance and Speed

    Can I create a professional booking system?

    Yes. The Boostore platform includes a powerful booking widget that allows you to organize appointments for services or rental of any resources: from restaurant tables and massage rooms to car rentals and group event registration.

    Key features of the booking system:

    • Object separation: Using group IDs you can separate schedules for different masters, rooms, or pieces of equipment.
    • Flexible time slots: You set the time step (e.g., 30 minutes or 2 hours) and the maximum duration of a single booking.
    • Automatic cost calculation: The system can dynamically recalculate the price based on the selected period (e.g., price per hour * number of hours) or use a fixed rate.
    • Smart statuses and calendar: Slots are synchronized with sales statistics. Statuses like "Preliminary booking", "Booked", or "Cancelled" instantly change time availability on the site. If a slot is occupied, repeated booking is impossible (except for group events).
    • Multi-seat booking: For seminars or group training, you can specify the number of available seats for the same time period.
    • Payment to confirm booking: You can set mandatory prepayment. Immediately after selecting a time, the customer is redirected to the payment system, and the booking status changes automatically after successful payment.
    • Booking horizon settings: Control how far in advance a customer can book (e.g., "only from next Monday" or "no more than a month ahead").

    The functionality is implemented through JSON parameters and data-attributes, allowing developers to customize the booking interface for any business needs.

    How fast are websites on the BooStore.pro platform? Are there real metrics?

    The platform demonstrates benchmark speed indicators: sites on Boostore consistently score 95–100 points in Google PageSpeed Insights (Mobile and Desktop). The main content paint (LCP) is less than 1.2 seconds, significantly faster than Google's "green zone" (2.5s). This is achieved by completely abandoning heavy libraries (jQuery) in favor of pure Vanilla JavaScript.

    Will the site handle visitor surges during sales or promotions?

    The BooStore.pro architecture is designed for high-load operation. Thanks to the optimized core and efficient server-side caching, sites on the platform easily handle tens of thousands of concurrent sessions without losing response speed. Server response time (TTFB) remains minimal even with massive database queries, confirmed by the successful operation of large online stores during "Black Friday" periods.

    How does abandoning jQuery affect the real user experience?

    Abandoning jQuery allowed us to reduce the amount of transmitted JS code by several times. For the user, this means instant interface response to clicks (INP under 50 ms). The site doesn't "stutter" during loading, menus open without delays, and product filtering is practically seamless. This directly reduces bounce rates and increases purchase conversion.

    What does "speed at the architecture level" mean in BooStore.pro?

    Unlike regular CMS where speed is attempted to be "boosted" with plugins, in BooStore.pro it is built into the foundation. We use Google PageSpeed (99–100%) indicators as a real quality metric. Key solutions:

    • Minimal start: on first load, only critically important HTML and CSS are served. No "heavy" JavaScript until the user interacts.
    • Modularity: functionality (cart, comparison, menu, sliders) is split into dozens of small modules that load only at the moment of interaction.
    • Native HTML/CSS: tabs, accordions and filters are implemented in pure CSS and <details> tags, providing instant response without a single line of JS.
    How does the platform handle images in the catalog?

    The system automatically protects your PageSpeed and user traffic:

    • Auto-preview generation: for product listings, the system creates reduced copies of the required size. Originals (2000px and larger) never load into the catalog.
    • WebP format: images are automatically converted to modern formats while maintaining sharpness with minimal weight.
    • Smart Lazy Load: images load only when they come into the user's view during scrolling.
    Why did you abandon Memcache in favor of your own caching system?

    Memcache is limited by RAM and can "crash" with large data volumes. BooStore.pro implements a full file caching system that is not limited by RAM. Absolutely everything is cached: HTML blocks, menus, UI components and texts. Updates happen precisely by timestamps: if you change one price, only that price block is rebuilt, not the entire site cache.

Other

    What is the secret of the fast mobile menu?

    The mobile menu in BooStore.pro is an intelligent module. It does not load into the browser if the user is on a computer. On mobile devices, the menu script and its content load only at the moment of clicking the "burger". This eliminates unnecessary load on the phone's processor and allows the site to get 100 points in Google's mobile test.

    How long does it take to create an online store?

    You can create a store in a few minutes. After registration, just choose a template, add products and configure payment methods. The system is ready to work immediately, allowing you to accept your first orders on the day of registration.

    How does the product limit affect other site capabilities?

    The product limit is a baseline indicator that proportionally determines all system resources. As the number of products increases, content, marketing and management capabilities automatically expand.

    Example with a limit of 1,000 products:

    • Content: up to 1,000 blog articles (1 to 1).
    • Pages: 100 internal store pages (1 per 10 products).
    • Tools: 50 form builders and 50 email templates (1 per 20 products).
    • Team: 20 site managers (1 per 50 products).

    Example with a limit of 10,000 products:

    • Content: up to 10,000 blog articles.
    • Pages: 1,000 internal store pages.
    • Tools: 500 form builders and 500 email templates.
    • Team: 200 site managers.

    Further increase in the product limit will proportionally unlock new resources, allowing your business to grow without technical limitations.

    Can I implement my own automation scripts and change CSS/JS?

    Yes, absolutely. Unlike closed cloud platforms that strictly limit access to code, BooStore.pro gives you complete freedom. You can integrate any custom JS scripts, tracking pixels, analytics and unique CSS styles directly through the convenient admin panel.

    At the same time, the BooStore architecture automatically compiles, minifies and caches your scripts into separate files. This ensures that customization does not overload the page code, and the site remains as fast as possible.

    Are there limits on the number of products, orders or traffic?

    No, no penalties for business growth. We don't take a percentage of your sales and don't limit your potential. In commercial BooStore.pro plans, there are completely no hidden limits on disk space, number of processed orders or traffic. The platform is designed for easy scaling and stably handles huge catalogs at the level of large marketplaces.

    How does the built-in description generator based on characteristics work?

    This is a unique automation feature from BooStore.pro that saves thousands of dollars when filling out online store data. If you have a large catalog of similar products, you don't need to write texts manually for each one.

    The system allows inserting descriptions based on the filled characteristics of a card (e.g.: material, color, dimensions, brand).

Miscellaneous

    Can I test the platform for free without time limits?

    Yes, without any pressure or bank card requirements. BooStore.pro offers a full-featured indefinite free plan ($0). You get a base limit of up to 300 products, which can be easily expanded to 1000 products for a simple repost about the platform on social networks.

    Fill your catalog, customize the design, connect SEO tools and start selling without financial risks. Upgrade to Pro plans (from $3) only when your business is ready for large-scale expansion.

User Agreement
The site administration does not carry out trading activities and is not responsible for the quality of services/goods sold within BooStore.pro. Users who added them are responsible for all posted goods and services.
Contacts: https://boostore.pro/en/feedback.html

Atrás