Скрипти платформи

Скрипты для платформы SaaS Hotlist.biz CMS

Инструкция по использования скриптов

Вы можете скопировать путь к файлу скрипта или его код и вставить в блок/меню на вашем сайте. Рекомендуется помещать все скрипты в один блок/меню. Такой блок/меню можно разместить в разделе: «Служебные теги перед тегом Body (Header Meta)», «Шапка сайта (Header)» или «Низ сайта (Footer)».

При добавлении скриптов напрямую через код (не через путь к файлу) оптимальный способ — использовать инструмент «Блоки / Меню». Установите галочку «JavaScript / CSS style» и выберите режим «JavaScript». Можно выбрать режим «JavaScript – defer/async» для отложенной загрузки, что дополнительно улучшает показатели оптимизации сайта.

Этот способ гарантирует, что при обновлении функций платформы и изменении названий параметров или классов элементов на сайте они автоматически обновятся. Ваш код при этом корректно преобразуется в JS-файл. Поскольку блок/меню сразу создаёт JS-файл, обязательно удалите обёртку «<script type="text/javascript"> </script>».
Для добавления CSS рекомендуется использовать «Редактор дизайна» — вкладку «CSS стили». Он автоматически оптимизирует код, удаляет лишние пробелы и пустые строки.


Приклад використаних скриптів і функцій
Цей список корисний для розробників. Ви зможете змінити вбудовані скрипти та уточнити вбудовані callback-функції.

🛍️ SHOP & PRODUCT SCRIPTS

💬 POPUPS & DIALOGS

  • hotengine-script-mircomodal.js - системний скрипт спливаючих вікон
  • hotengine-script-popup.js - скрипт спливаючих вікон при натисканні на .hotengine-script-popup
  • hotengine-script-forms-popup.js - Скрипт спливаючого вікна з формою для відправки різних даних. Завантаження та відправка форми при натисканні на елемент з класом «.hotengine-form-constructor». Використовується для форм, створених у розділі Мої форми (Зворотній зв’язок, Зворотній дзвінок, Швидке замовлення та інші).
  • hotengine-script-dialog-email.js - Спливаюче вікно для відправки e-mail (вбудована форма зворотного зв’язку). Завантаження та відправка форми при натисканні на елемент з класом «.hotengine-dialog-email». Аналогічна форма є на функціональній сторінці /ru/feedback.html
  • hotengine-script-dialog-rating.js - вікно з відгуками про сайт
  • hotengine-script-dialog-stock-inform.js - вікно "Повідомити про наявність"
  • hotengine-script-callback_hotengine_authorize_result.js - результат авторизації

🛒 CART & ORDER

📂 MENUS & NAVIGATION

⚙️ SYSTEM & INTERFACE

📰 BLOG

📅 BOOKING


🎨 Набір стандартних CSS-стилів.


Стилі, що завантажуються за замовчуванням. Ці стилі використовуються в базовій версії сайту, а поверх них застосовуються шаблони. CSS-файли містять стандартні стилі для кнопок, сторінок, пунктів меню та інших елементів.
Текстові повідомлення для авторизації: успішна авторизація, активація, помилки.


Всплывающее окно

Инструкции, пример, а также автоматическая генерация всплывающих окон доступны по этой ссылке: Генератор всплывающих окон

[Пример кнопки - всплывающее окно с видео]

Всплывающее окно с формой

Инструкции, пример, а также автоматическая генерация всплывающих окон с формой доступны по этой ссылке: Генератор всплывающих окон с формой

Замена текста о выборе разновидности

Сообщение о необходимости выбрать разновидность товара реализовано в диалоговом окне при помощи CSS элемента. Заменить надписи вы можете в CSS стилях:
Code: CSS
html:lang(ru) .hotengine-shop_cart_add_error_wrong_variety:after{ content:"Вы не выбрали разновидность товара."; }
html:lang(en) .hotengine-shop_cart_add_error_wrong_variety:after{ content:"You did not select a complete set of goods."; }
html:lang(uk) .hotengine-shop_cart_add_error_wrong_variety:after{ content:"Вы не обрали різновид товару."; }
html:lang(pl) .hotengine-shop_cart_add_error_wrong_variety:after{ content:"Nie wybrałeś typu produktu."; }


Для того, чтобы заменить сообщение о не выбранной разновидности, в карточке товара, необходмо добавить код функции callback_hotengine_variety_require (если не выбрана разновидность, перед вызовом диалогового окна сообщение). Функция запускается в случае, когда не выбрана разновидность.

В карточке товара укажите текст «Заголовок разновидности». В зависимости от текста изменяется значение для класса «.hotengine-shop-product-variety-title». Например, в случае, если указан текст «Выберите вес:», то класс заголовка будет «.hotengine-shop-product-variety-title_24». Проверить класс при изменении значений вы можете просмотрев исходный код страницы, после указания заголовка разновидности.

Код замены текста:
Code: html
<script type="text/javascript"> 
  <!-- 
  function callback_hotengine_variety_require(){

if($(".hotengine-shop-product-variety-title_24").length > 0){
  $text = "Вы не выбрали вес!";
  } else if($(".hotengine-shop-product-variety-title_38").length > 0){
  $text = "Вы не выбрали количество!";
  } else if($(".hotengine-shop-product-variety-title_26").length > 0){
  $text = "Вы не выбрали цвет!";
  } else {
  $text = "Вы не выбрали разновидность!";
  }

$("body").append(`<div id="hotengine-shop_cart_add_error_wrong_variety"><b align="center" style="display:block;">${$text}</b><a class="hotengine-shop_cart_add_error_wrong_variety-btn-close" data-micromodal-close onclick="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: function(){ $("#hotengine-shop-cart-add-error-wrong-variety,#hotengine-shop_cart_add_error_wrong_variety-data").remove(); } }); return false; } --> </script>

Всплывающее окно будет содержать указанный текст в переменной $text.

Аналогичная функция при просмотре списка товаров, callback_hotengine_variety_require_list($href), дополнена ссылкой на карточку товара, и соответственно может быть использована в отображаемом диалоге.

Сообщения после авторизации или активации аккаунта

Для того, чтобы создать всплывающее окно с сообщением о статусе авторизации или активации, необходимо создать функцию callback_hotengine_authorize_result


callback_hotengine_authorize_result($result) - функция после авторзиации пользователя ($result -рузальтат выполнения: 1-успешно, 2-ошибка логина или пароля, 3-аккаут заблокирован, 4-необходима активация,5-Активация прошла успешно,6-Не верный код Captcha)

Пример стандартной функции, которая будет вызвана при отсутствии вашей собственной функции:
/templates/scripts/hotengine-script-callback_hotengine_authorize_result.js

Текстовые сообщения загружаемые при помощи CSS стилей:
/templates/styles/css_hotengine_script_callback_hotengine_authorize_result.css

Загрузка списка товаров с функциями «Виджета с товарами» при помощи JavaSript


Ajax загрузка списка товаров:
Генератор блока с товарами можно загрузить при помощи GET/POST/AJAX запроса. Для этого необходимо выполнить запрос с вашего сайта (вашего домена) на страницу «/ajax_get_list_shop.php». В запросе можно указать дополнительные свойства для отображения товаров. Список всех возможных значений можно узнать на странице «Виджет с товарами магазина». Для корректного отображения стиля списка товаров, необходимо добавить HTML-оболочку и родительские элементы, а также кнопки для перемотки/прокрутки списка товаров (вперед/назад). Пример такой оболочки и использования скрипта показан ниже.


Пример создания базового окружения для показа списка товаров

При использовании этого окружения для отображения списка товаров можно подключать скрипты, которые позволяют листать товары вперёд и назад, менять стиль показа и добавлять дополнительные эффекты — такие как Scroll, Swipe и другие.

Code: JavaScript

<!-- Контейнер для списка товаров -->
<div id="someID">
  <div class="hotengine-shop-products-list-div" 
       data-hotengine-shop-products-list-param=":shop_products_slider:htmlonly:start-0:on_page-20:description:button-cart:auto_width:swipe:scroll-9999x8x0:id-someID" 
       data-product_limits="20" data-swipe="1" data-scroll-width="9999" 
       data-scroll-product-add="8" data-scroll-max-products="0">
    <span class="hotengine-shop-products-list-div-button-left hotengine-shop-products-list-div-button" data-product_limits_start_n="0"></span>
    <div class="hotengine-shop-products-list-content"></div>
    <span class="hotengine-shop-products-list-div-button-right hotengine-shop-products-list-div-button" data-product_limits_start_n="0"></span>
  </div>
</div>

<script>
let $param = `:shop_products_slider:htmlonly:start-0:on_page-20:description:button-cart:auto_width:swipe:scroll-9999x8x0:id-someID`;
let $onpage = 20;

$("#someID .hotengine-shop-products-list-content").load(
  `/ajax_get_list_shop.php?n=0&onpage=${$onpage}${(window.location.search.includes("cacheclear")) ? "&cacheclear" : ""}&param=${encodeURIComponent($param)}`,
  function () {
    // После загрузки выполняем callback функции для инициализации кнопок, слайдера, спиннера и прокрутки
    if(typeof(callback_hotengine_shop_products_list_div_button) === "function"){ callback_hotengine_shop_products_list_div_button(); }
    if(typeof(callback_hotengine_ajax_load_products_list) === "function"){ callback_hotengine_ajax_load_products_list(); }

    
if ($(`.hotengine-shop-products-list-div[data-append-replace]`).length) {
    if (typeof $hotengine_shop_product_base_append_replace == "undefined") {
        $.getScript("/templates/scripts/hotengine-script-shop-products-list-append-replace.js?v32")
            .fail(function(jqxhr, settings, exception) {
                console.error("Failed to load script: ", exception);
            });
    } else if (typeof ProductWidgetAppendReplace === "function") {
        ProductWidgetAppendReplace();
    }
};

    if ($(".hotengine-shop-products-list-div .hotengine-shop-products-list-auto_width").length) {
      if(typeof $hotengine_shop_product_base_slider_auto_width === "undefined") {
        $.getScript("/templates/scripts/hotengine-script-shop-products-list-base-slider-autowidth.js?v32")
          .fail(function(){ console.error("Failed to reload auto-width script."); });
      } else if(typeof ProductWidgetAutoWidth === "function") {
        ProductWidgetAutoWidth();
      }
    }
    

    if ($(".hotengine-shop-products-add-count-spinner").length) {
      if (typeof $hotengine_shop_product_count_spinner === "undefined") {
        $.getScript("/templates/scripts/hotengine-script-shop-product-count-spinner.js?v32")
          .fail(function(jqxhr, settings, exception){ console.error("Failed to load script: ", exception); });
      } else if (typeof(callback_hotengine_add_count_spinner) === "function") {
        callback_hotengine_add_count_spinner();
      }
    }


    if($(`.hotengine-shop-products-list-div[data-swipe="1"]`).length) {
      if(typeof $hotengine_shop_product_base_slider_touch === "undefined") {
        $.getScript("/templates/scripts/hotengine-script-shop-products-list-base-slider-swipe.js?v32")
          .fail(function(jqxhr, settings, exception){ console.error("Failed to load script: ", exception); });
      } else if(typeof ProductWidgetSwipe === "function") {
        ProductWidgetSwipe();
      }
    }

    if($(".hotengine-shop-products-list-div[data-scroll-width]").length) {
      if(typeof $hotengine_shop_product_base_slider_scroll === "undefined") {
        $.getScript("/templates/scripts/hotengine-script-shop-products-list-base-slider-scroll.js?v32")
          .fail(function(jqxhr, settings, exception){ console.error("Failed to load script: ", exception); });
      } else if(typeof ProductWidgetScrollProcessBlocks === "function") {
        ProductWidgetScrollProcessBlocks();
      }
    }
  }
);
</script>
    

Функции прокрутки и визуальных эффектов реализованы с помощью JavaScript-скрипта — hotengine-script-shop-products-list-base-slider.js.






Код загрузки списка товаров + применение параметров Виджета (стилизация и доп. функции):


/templates/scripts/hotengine-scripts-additional/hotengine-shop-products-list-generated.js


Скрипт формирует пространство для отображения списка товаров с возможностью активации функций виджета товаров: прокрутка товаров, эффекты и стилизация. В данном скрипте предусмотрено множество настраиваемых параметров — вы можете изменить список товаров, категорию, способ отображения и другие настройки. Все параметры задаются аналогично параметрам для «Виджета с товарами», поэтому при необходимости можно самостоятельно расширить их перечень.

Как установить скрипт?


Вы можете либо полностью скопировать скрипт и изменить в нем параметры (они указаны в комментариях с инструкциями, а также на странице «Виджет с товарами»). Или (рекомендуется) указать параметры отдельно, и загрузить файл через $.getScript:
Code: JavaScript
<script type="text/javascript">

// ============================
// CONFIGURATION (edit values)
// ============================
// This file defines all the parameters that will be
// used when generating the product block.
// This file is loaded BEFORE the main script
// hotengine-shop-products-list-generated.js
// via $.getScript() to pass variables.
// =============================

// targetInsertSelector: jQuery selector (id/class/tag) AFTER which the product block will be inserted.
// Example: "#product-details" or ".product-page .right-col" or "body" (appends at end).
var targetInsertSelector = "#hotengine-header";

// insertMode: "after" = insert after element (default), "replace" = replace element
var insertMode = "after";

// targetBlockId: ID or Class for the generated product block container.
// Example: "#hotengine-shop-products-list-generated"
var targetBlockId = "hotengine-shop-products-list-generated";

// shop_cat_page_id: ID of the current product to SKIP (exclude from results).
var shop_cat_page_id = "";

// products_id: Optional. Comma-separated product IDs or SKUs to SHOW.
// Example: "482626,482624" or "" to omit.
var products_id = "";

// site: Optional numeric site ID. Use if the script is used outside your main site.
// Leave 0 or "" to omit.
var site = 0;

// favorite: 1 => add ":favorite-icon", 0 => do not add.
var favorite = 0;

// variety: 1 => add ":variety", 0 => no.
var variety = 0;

// variety_crop: integer >0 — only sent if >0 (trim variety names length).
var variety_crop = 0;

// lazy_load: 0 = enabled (adds ":lazy-0"), 1 = disabled (no lazy param).
var lazy_load = 0;

// cart_add_count: 0 none, 1 counter block, 2/4 spinner behavior.
var cart_add_count = 2;

// compare_pos: position for "Add to compare" (real values from design).
// 1=icon block; 0=after cart; 4=before cart; 2=after title; 3=bottom
var compare_pos = 1;

// favorite_pos: position for "Add to favorites" (same code meanings).
var favorite_pos = 1;

// onpage: default number of products to request / display.
// Note: if auto_width === 1 it is recommended to set onpage = 1.
var onpage = 3;

// stock: availability filter
// ""=all; 0=in stock; 1=in stock+preorder+check; 2=in stock; 3=preorder; 4=check avail
var stock = 1;

// scroll: whole scroll parameter or empty string.
// Example: "scroll-9999x8x64x3,3" or "" to disable.
var scroll_param = "scroll-9999x8x64x3,3";

// widget_style: 0 = append (default), 1 = list, 2 = swipe
var widget_style = 2;

// auto_width: 1 = enable auto width (recommended onpage=1), 0 = disable
var auto_width = 1;

// lang: optional language code (e.g. "ru","ua","en","pl"). If empty, :lang not added.
var lang = "ru";

// pers_cat_id: optional personal category id (keeps original logic)
var pers_cat_id = 0;


$(document).ready(function(){
  $.getScript("/templates/scripts/hotengine-scripts-additional/hotengine-shop-products-list-generated.js")
    .fail(function(){ console.error("Failed to load main generator script"); });
});

</script>


Рекомендуется добавлять этот скрипт через инструмент «Блоки / Меню», установив галочку «JavaScript / CSS style» и выбрав режим «JavaScript – defer». Такой способ гарантирует, что при изменении названий параметров или классов элементы будут автоматически обновлены, а ваш код корректно преобразуется в JS-файл. Такой блок меню сразу создает JS файл, потому обязательно удалите обертку <script type="text/javascript"> </script>

Показать сопутствующие товары в корзине (С товаром покупают)

На основе скрипта Загрузка списка товаров с функциями «Виджета с товарами» при помощи JavaSript можно выполнить загрузку списка товаров, которые будут содержать список «Сопутствующие товары».
Примечание: Перед подключением скриптов можно указать настройки:
  • window.auto_width = 1; — включить автоширину.
  • window.onpage = 8; — количество товаров при первой загрузке.
  • window.widget_style = 2; — стиль загрузки виджета.
  • window.lang = "en"; — язык отображаемых товаров (остальные будут пропущены; можно указать пустое значение, чтобы отключить фильтрацию по языку).
Если параметры не заданы, скрипт автоматически применит значения по умолчанию.
Полный перечень параметров доступен в инструкциях по файлу hotengine-shop-products-list-generated.js выше.

При просмотре корзины:

При просмотре корзины создается элемент микроразметки, который содержит список «С товаром покупают». Список таких товаров можно отобразить во всплывающем окне или в виде блока с товарами.
Разместите в тексте страницы код отображения списка с товарами на странице «cart_send» - «Функциональная страница» - «Корзина.

Код добавления списка при просмотре корзины (под кнопкой «Продолжить покупки»):




Список будет отображаться только при наличии сопутствующих товаров. Для стилизации блок окружен как стандартный блок/меню.

Пример CSS стиля:
Code: CSS
.menu_bought_with_generated #menu_c .headm:before{ content:"С выбранными товарами покупают:"; display:block; text-align:center; line-height:30px;}
.menu_bought_with_generated {margin-top:50px;} .menu_bought_with_generated #menu_c .headm b{display:none;}



Код всплывающего окна со списком «Сопутствующих товаров» при просмотре корзины:


Список таких товаров можно отобразить во всплывающем окне.
Разместите в тексте страницы код отображения списка с товарами на странице «cart_send» - «Функциональная страница» - «Корзина.
Code: JavaScript
<script type="text/javascript" src="/templates/scripts/hotengine-scripts-additional/hotengine-script-additional-bought-with-popup.js"></script>



Окно будет всплывать только в случае, когда обнаружены сопутствующие товары.

.hotengine-bought_with-window-btn-close - укажите стиль для кнопки закрытия окна (отображается под списком товаров в окне).

Пример CSS стиля:
Code: CSS
.hotengine-bought_with-window-btn-close:before{ content:"Закрыть";}
.hotengine-bought_with-window-btn-close {
  display:block;
  background:none;
  width:110px;
  line-height:38px;
  height: auto;
  padding: 0px 0px;
  white-space:nowrap;
  background: #4f86b1;
  cursor: pointer;
  transition-delay: 0;
  transition-duration: 0.2s;
  transition-property: all;
  transition-timing-function: cubic-bezier(0, 0, 1, 1);
  border:none; box-shadow: 0 1px 3px rgba(0,0,0,0.12);
  -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px;
  text-shadow:1px 1px 1px rgba(1, 39, 106, 1);
  color: #fff!important;
  text-decoration: none;
  margin:-10px auto 0px auto;
  text-align: center;
}
.hotengine-bought_with-window-btn-close:hover { background:#24689E; opacity: 1; -moz-opacity: 1; -khtml-opacity: 1; filter: alpha(opacity=100);  }


Список «С товаром покупают» дополнительно отображается и при просмотре карточки товара. Если вам необходимо сделать всплывающее окно или список товаров, отображаемый только в корзине, то используйте «Список товаров для рассылки». В таком случае замените «data-hotengine-marking-boughtwith» на «data-hotengine-marking-boughtwith-email»


Сопутствующие товары - всплывающее окно после добавления товара в корзину


На основе скрипта Загрузка списка товаров с функциями «Виджета с товарами» при помощи JavaSript можно выполнить загрузку списка товаров, которые будут содержать список «Сопутствующие товары».
После добавления товаров в корзину, выполняется callback функция «callback_hotengine_cart_plus_after_boughtwith», которая содержит список «С товаром покупают». Список таких товаров можно отобразить во всплывающем окне или в виде блока с товарами.
Функцию callback_hotengine_cart_plus_after_boughtwith можно заменить на callback_hotengine_cart_plus_after_boughtwith_email, для отображения такого же списка но для email рассылки (E-mail рассылка других товаров).

Окно будет всплывать только в случае, когда обнаружены сопутствующие товары.

.hotengine-bought_with-window-btn-close - укажите стиль для кнопки закрытия окна (отображается под списком товаров в окне).
Создайте «Блок/меню», разместите его в «Footer» или в разделе «Служебные теги», и настройте отображение на всех страницах либо только на тех страницах, где есть товар с кнопкой «Добавить в корзину».

Пример CSS стиля:
Code: CSS
.hotengine-bought_with-window-btn-close:before{ content:"Закрыть";}
.hotengine-bought_with-window-btn-close {
  display:block;
  background:none;
  width:110px;
  line-height:38px;
  height: auto;
  padding: 0px 0px;
  white-space:nowrap;
  background: #4f86b1;
  cursor: pointer;
  transition-delay: 0;
  transition-duration: 0.2s;
  transition-property: all;
  transition-timing-function: cubic-bezier(0, 0, 1, 1);
  border:none; box-shadow: 0 1px 3px rgba(0,0,0,0.12);
  -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px;
  text-shadow:1px 1px 1px rgba(1, 39, 106, 1);
  color: #fff!important;
  text-decoration: none;
  margin:-10px auto 0px auto;
  text-align: center;
}
.hotengine-bought_with-window-btn-close:hover { background:#24689E; opacity: 1; -moz-opacity: 1; -khtml-opacity: 1; filter: alpha(opacity=100);  }


Функция после добавления товара в корзину. Оповещение о размере скидки покупателя


Функция callback_hotengine_cart_plus_after вызывается после добавления товара в корзину. В данном примере реализовано оповещение о размере скидки покупателя, если она есть. Данные берутся из микроразметки data-hotengine-cart-discount в корзине.

Code: html
<script type="text/javascript">
  <!--
  function callback_hotengine_cart_plus_after() {
  const $stick_cart = $(".hotengine-shop-cart-sticker-cart-cart");
  if ($stick_cart.length > 0) {
  const $your_discount = $stick_cart.attr("data-hotengine-cart-discount");
  if ($your_discount !== "" && $your_discount !== undefined) {
  $("#cart").after(`<span class="hotengine-your_discount">${$your_discount}</span>`);
  }
  }
  }
$(function() {
  callback_hotengine_cart_plus_after();
  });
  -->
  </script>

Для того, чтобы оповщение вызывалось не только после добавления товара в корзину, необходимо продублировать скрипт проверки наличия микроразметки о скидке. Для примера это реализовано при помощи дополнительного вызова функции callback_hotengine_cart_plus_after(); без добавлени товара в корзину.

Пример CSS стиля:
Code: CSS
.hotengine-your_discount  { 
    white-space: nowrap;
    position: absolute;
    margin-top: -32px;
    right: 47px;
    background: #f00;
    color: #fff;
    border-radius: 50px 50px 0px 50px;
    line-height: 30px;
    width: 50px;
    opacity: 0.9;
    text-align: center;
  }


Загрузка списка статей с помощью Javascript


Ajax загрузка списка статей:
Генератор блока со статьями можно загрузить при помощи GET/POST/AJAX запроса. Для этого необходимо выполнить запрос с вашего сайта (вашего домена) на страницу «/ajax_get_list_blog.php». В запросе можно указать дополнительные свойства для отображения статей. Список всех возможных значений вы можете узнать на странице «Виджет со статьями». Для корректного отображения статей, необходимо добавить HTML оболочку и родительские элементы, а также кнопки для перематывания/продолжения списка статей (прокрутка вперед/назад). Пример такой оболочки показан в скрипте ниже.


Code: html
<div class="blog-page-list-AJAXLOAD">
</div>
<script type="text/javascript">
  <!--
  $(function() {
  const $blog_marking = $(`.hotengine-marking[data-hotengine-marking-type="blog_catalog_page"]`);
  if ($blog_marking.length > 0) {
 const $site_id = "XXXX";
  const $blog_cat_id = $blog_marking.attr("data-hotengine-marking-blog_cat_page_catid");
 const $onpage = "4";
  const $param = `:blog_page_slider:htmlonly:cat_id-${$blog_cat_id}:site-${$site_id}:start-0:on_page-${$onpage}:description:append:id-hotengine-blog-page-list-AJAXLOAD`;
 $(".blog-page-list-AJAXLOAD").html(`
  <div id="hotengine-blog-page-list-AJAXLOAD" style="display:none;">
  <div class="hotengine-blog-page-list-div hotengine-blog-page-list-div-append" data-hotengine-blog-page-list-param="${$param}" data-blog_limits="${$onpage}">
  <span class="hotengine-blog-page-list-div-button-left hotengine-blog-page-list-div-button hotengine-blog-page-list-append" data-site-id="${$site_id}" data-blog_limits_start_n="0"></span>
  <span class="hotengine-blog-page-list-content"></span>
  <span class="hotengine-blog-page-list-div-button-right hotengine-blog-page-list-div-button hotengine-blog-page-list-append" data-site-id="${$site_id}" data-blog_limits_start_n="0"></span>
      </div>
  </div>
  `);
 $("#hotengine-blog-page-list-AJAXLOAD .hotengine-blog-page-list-content").load(`/ajax_get_list_blog.php?c=${$site_id}&n=0&onpage=${$onpage}&param=${$param}`, function() {
  $(".hotengine-blog-page-list-content-loading").hide("fast", function() {
  $(".hotengine-blog-page-list-content-loading").remove();
  });
 if ($("#hotengine-blog-page-list-AJAXLOAD .hotengine-blog-page-list-content").not(":empty").length > 0 &&
  $("#hotengine-blog-page-list-AJAXLOAD .hotengine-blog-product-list-block-empty").length === 0) {
  $("#hotengine-blog-page-list-AJAXLOAD").show();
  }
  });
  }
  });
  -->
  </script>

Данный код загружает статьи, как при помощи "Генератора блока/меню, слайдер со статьями". В данном скрипте загрузка происходит с заменой родителькой категории списка статей, который определяется при помощи микроразметки.
XXXX - ID сайта.
$onpage - количество статей на одной странице (слайде)
$blog_cat_id - категорий каталога, которая в примере указывается при помощи микроразметки из данный открытой статьи.
.blog-page-list-AJAXLOAD - Блок в который загружаются статьи.


Загрузка статьи с помощью Javascript в JSON формате

Скрипт загрузки статьи в JSON формате

Данные статьи доступны по запросу /ajax.php?json&blog_cat_p=XX

  • XX - ID статьи

Запрос работает только с указанием вашего домена, например http://example.com/ajax.php?json&blog_cat_p=0


Code: JavaScript
<script type="text/javascript">
function decodeHtml(str){
  let map =
  {
  '&amp;': '&',
  '&lt;': '<',
  '&gt;': '>',
  '&quot;': '"',
  '&amp;#039;': "'"
  };
  return str.replace(/&amp;|&lt;|&gt;|&quot;|&#039;/g, function(m) {return map[m];});
  }
$(function(){
  $.getJSON("/ajax.php?json&blog_cat_p=14673", function(blog){
   if(Object.keys(blog).length > 0){ 
    // full parameters console.log(blog);
    console.log(decodeHtml(blog.blog_cat_page_title_inpage));
    console.log(decodeHtml(blog.blog_cat_page_description));
    console.log(decodeHtml(blog.blog_cat_page_text));
    console.log(decodeHtml(blog.blog_cat_page_datestamp));
   } 
  });
});
</script>


Стилизация поискового фильтра (скрытие списка значений при нажатии)

Если вам необходимо сделать скрытие/раскрытие значений поискового фильтра, то вы можете использовать скрипт из примера ниже. Скрипт записывает ID блока со списком значений в Cookies и отображает/скрывает его в соответствии с выбранным пользователем вариантом.
Внимание! Для использования поискового фильтра, сначала создайте «Тип продукта» и укажите значения для вида характеристики. Данный скрипт рекомендуется использовать для «Множественного значения».



Code: html
<script><!--
  /*FILTER STYLE*/
  $(function(){
$("#shop_catalog_product_types_id_ajax .shop_catalog_product_types_block").each(function(){
 if ($.cookie("scptbt"+$(this).attr("data-id"))){ 
  $(this).find(".shop_catalog_product_types_block_title").addClass("scptbt_ishidden");
  $(this).find(".shop_catalog_product_types_block_value").css({"max-height":"0px"});
  }
  })

$(document).on('click','#shop_catalog_product_types_id_ajax .shop_catalog_product_types_block_title',function(){
  let thise = $(this);
  let sptelem = $(this).next(".shop_catalog_product_types_block_value");
  if(sptelem.outerHeight() < 1){
  sptelem.css({"max-height":"unset"});
  thise.removeClass("scptbt_ishidden");
  if ($.cookie("scptbt"+thise.parent().attr("data-id"))){ $.cookie('scptbt' + thise.parent().attr("data-id"), null, {expires: null, path: '/'});	}
  } else {
  sptelem.css({"max-height":"0px"}); 
  thise.addClass("scptbt_ishidden");
  $.cookie('scptbt' + thise.parent().attr("data-id"), true, {expires: null, path: '/'}); 
  }
  
  
  })

})
  /*FILTER STYLE*/
  --></script>


Css стиль для заголовка (иконка):

Code: Css

#search_smart_hotengine-search_form_block .shop_catalog_product_types_block_title:after{

position: relative;
    content: "";
    display: inline-block;
    top: -2px;
    left: 10px;
    width: 8px;
    height: 5px;

background: url(/templates/styles/menu_arrow/arrow-down.svg) no-repeat center center; background-size: 15px; opacity: 0.3;
}
.scptbt_ishidden:after{
 transform: rotate(270deg);
}



Создание собственной сортировки списка товаров


Если вам необходимо создать собственную форму сортировки товаров, то это можно сделать при помощи передачи GET переменных. Ниже найдете инструкцию по сохранению выбранной сортировки в COOKIES, а также пример по реализации сортировки. Для быстрого создания сортировки вы можете использовать «Функциональное меню» - «Сортировка товаров». В меню будет вставлена поисковая форма, а также базовые поля для сортировки.


Доступные следующие GET параметры для собственной сортировки:
«order_by»:
  • 0 - по id товара
  • 1 - по дате добавления товара
  • 2 - по цене товара
  • 4 - по наименованию товара
  • 5 - по приоритету товара

«sort_by»:
  • 0 - По убыванию (DESC)
  • 1 - По возрастанию (ASC)

«sort_instock_priority»: (сортировка по приоритету, товары в наличии выше чем товары не в наличии)

  • 0 - не учитывать параметр
  • 1 - сначала товары в наличии и под заказ, потом те, которых нет в наличии. Далее учитываются параметры сортировки, указанные выше.
  • 2 - сначала товары которых нет в наличии.

«price_from» - цена от
«price_to» - цена до
«producer» - производитель (id или наименование производителя)
«collection» - коллекция (id или наименование коллекции)
«search» - поисковый запрос
«smart_search» - данные поискового запроса из поискового фильтра

Кроме того значения, которые учитываются если указано не пустое значение (Например «1»):
«shop_sale» - акционные,
«shop_new_goods» - новинки,
«shop_bestsellers» - хиты продаж,
«shop_discount» - скидка,
«shop_reduced_price» - Цена снижена,
«order_by_param» - дополнительный параметр с произвольным значением, для создания собственного списка сортировка по названию или значению.

При обнаружении GET переменной «sort_by» в адресе открытой страницы, данные сортировки будут установлены соответственно этим значениям. Если открыта страница со списком товаров, то значения будут заполнены из ссылки элемента «.hotengine-pagination-current». Кроме того, при открытии страницы с сортировкой будут созданы COOKIE для запоминания выбранных пользователем параметров. Скрипт, выполняющий данную функцию, который также устанавливается при создании фукнционального меню сортировки, расположен по адресу /templates/scripts/hotengine-script-sort-shop-products.js.

Комбинированная сортировка товаров (функциональное меню).


Комбинированная версия сортировки позволяет объединять несколько критериев, например, сортировку по цене, новизне или акциям. Это удобно, если вы хотите одновременно учитывать несколько параметров при отображении товаров.
Пример комбинированного меню сортировки:

  • Сортировка по цене: можно выбрать возрастание или убывание.
  • Дополнительные параметры: новинки, акции, товары со скидкой, сниженные цены, хиты продаж.
  • Флаг «В наличии в начале»: при активации сначала будут показаны товары, которые есть в наличии.

Для использования данной сортировки создайте Функциональное меню «Сортировка товаров Combo» в разделе «Мои Блоки/Меню».

Рассмотрим пример по созданию сортировки с собственными значениями.

Это можно сделать при помощи дополнительного параметра «order_by_param», при выборе которого будут изменяться значения полей «order_by», «sort_by» и других.
Установим одно поле (#order_by_param) с выбором вариантов , а также оставим количество отображаемых товаров.


Создайте "Блок/Меню", расположение "вверху".
Имя Блока/Меню: hotengine_sort_products
Заголовок Блока/Меню: hotengine_sort_products
Положение Блока/Меню: вверху
Показывать Блок/Меню на страницах: везде
Введите символы, при обнаружении которых отображать Блок/Меню: (Без пробелов)
/pers_shop/ /producer/ /collection/ /shop/

Введите символы, при обнаружении которых не отображать Блок/Меню: (Без пробелов)
.htm
Текст меню:
Code: JavaScript
<form id="hotengine-sort-products-generated" name="hotengine-sort-products-generated" method="get" action="">
 <span>

<label>
<select name="order_by_param" id="order_by_param">
<option value="none">Сортировать</option>
<option value="lowtohight">От дешевых к дорогим</option>
<option value="highttolow">От дорогих к дешевым</option>
<option value="new">Новинки</option>
<option value="sales">Акционные</option>
<option value="date">По Дате</option>
</select>
</label>

<div class="hidden">
<select name="shop_new_goods" id="shop_new_goods"><option value=""><option value="1"></select>
<select name="shop_sale" id="shop_sale"><option value=""><option value="1"></select>

 <label>
 <select name="sort_by" id="sort_by"> 
 <option value="ASC">Сортировать:</option>
 <option value="ASC">По возрастанию</option>
 <option value="DESC">По убыванию</option>
 </select>
 </label>
<label>
 <select name="order_by" id="order_by"> 
 <option value="5">Сортировать:</option>
 <option value="0">По ID товара</option>
 <option value="4">По Наименованию</option>
 <option value="1">По Дате</option>
 <option value="2">По Цене</option>
 </select>
 </label>
</div>
<label>
 <select name="NUM_ONPAGE" id="NUM_ONPAGE" onchange="this.form.submit()"> 
 <option value="10">10</option>
 <option value="20">20</option>
 <option value="30">30</option>
 <option value="50">50</option> 
 </select>
 </label>
 <input class="smart_search" name="smart_search" type="hidden" value="">
 <input class="search" name="search" type="hidden" value="">
 </span>
 </form> 
 
 
<script>
  $(function() {
  $(document).on("change", "#order_by_param", function() {
  const $sortForm = $("#hotengine-sort-products-generated");
  const $orderBySelect = $sortForm.find(`select[name="order_by"]`);
  const $sortBySelect = $sortForm.find(`select[name="sort_by"]`);
  const $shopNewGoodsSelect = $sortForm.find(`select[name="shop_new_goods"]`);
  const $shopSaleSelect = $sortForm.find(`select[name="shop_sale"]`);
  
  const selectedValue = $(this).val();
  
  let orderByValue = "5";
  let sortByValue = "ASC";
  let shopNewGoodsValue = "";
  let shopSaleValue = "";
 switch (selectedValue) {
  case "lowtohight":
  orderByValue = "2";
  sortByValue = "ASC";
  break;
  case "highttolow":
  orderByValue = "2";
  sortByValue = "DESC";
  break;
  case "date":
  orderByValue = "1";
  sortByValue = "DESC";
  break;
  case "sales":
  orderByValue = "1";
  sortByValue = "DESC";
  shopSaleValue = "1";
  break;
  case "new":
  orderByValue = "1";
  sortByValue = "DESC";
  shopNewGoodsValue = "1";
  break;
  case "none":
  orderByValue = "5";
  sortByValue = "ASC";
  break;
  }
  
  $orderBySelect.val(orderByValue).prop("selected", true);
  $sortBySelect.val(sortByValue).prop("selected", true);
  $shopNewGoodsSelect.val(shopNewGoodsValue).prop("selected", true);
  $shopSaleSelect.val(shopSaleValue).prop("selected", true);
  $(this).closest("form").submit();
  });
  });
  </script>


 <script type="text/javascript" src="/templates/scripts/hotengine-script-sort-shop-products.js"></script>


CSS стиль для сортировка (добавить в редакторе дизайна в CSS стили):
Code: CSS
.menu_position_top_000000 #menu_c .headm{ display:none; }
.menu_position_top_000000 #menu_c { border: none; background: none; text-align: right;}
.menu_position_top_000000 #menu_c select { 
 background: transparent; 
 padding: 5px 8px 5px 5px; 
 font-size: 12px;
 line-height: 1;
 border-radius: 2px;
 height: 24px;
 -webkit-appearance: none;
 overflow: hidden;
 background: url(/templates/styles/menu_arrow/arrow-down.svg) no-repeat 95%; background-size: 16px;

 }
 .menu_position_top_000000 #menu_c select[name="NUM_ONPAGE"] { background:none;}
 .menu_position_top_000000 #menu_c span:before{ content:"Сортировать:"; display:inline-block; padding: 5px; font-size: 12px; }
 
 @-moz-document url-prefix(){ 
 .menu_position_top_000000 #menu_c select {
  padding:0px!important;
  background:none!important;

 }

}

Где 000000 нужно заменить на ID созданного меню с кодом сортировки.



При изменении поля «order_by_param» будут изменены значения сортировки и выполнена отправка формы. В Форме добавлены поля сортировки, в том числе «Новинки» и «Акция». Поля скрыты, так как визуально будет использоваться только отдельный список «order_by_param» и количество отображаемых товаров. После отправки формы, Значения будут сохранены в COOKIE.

Загрузка корзины при наведении курсора


Если вам необходимо отображать содержимеое корзины при наведении на иконку корзины, то вы можете включить параметр «Краткий + Содержимое при наведении» в «Настройках», во вкладке «Магазин» - «Оформление корзины». Или выполнить GET обращение по адресу «/ajax.php?cart&load_cart_ajax»
JavaScript отображения содержимого корзины:

Code: JavaScript
<script type="text/javascript" src="/templates/scripts/hotengine-script-cart-hover-block.js"></script>


CSS стиль:
Code: JavaScript
/*CART HOVER BLOCK*/
#hotengine-cart_menu-hover-block{position:absolute; z-index:99; background:#fff; color:#444; border:1px solid #C7C7C7; padding:20px; display:block; width:50%; display:none; text-align:left;}
#hotengine-cart_menu-hover-block:before{ content:""; height:15px; width:100%; display:block; position:absolute; top:-10px; left:0px; z-index:99999;  }
#hotengine-cart_menu:hover + #hotengine-cart_menu-hover-block{ display:block; }
#hotengine-cart_menu-hover-block:hover{display:block; }
#hotengine-cart_menu-hover-block .hotengine-cart_menu-hover-block-close:after {
    content: "x";
    background: rgb(255,255,255);
    background: radial-gradient(circle,rgba(255,255,255,0) 0%,rgba(182,182,182,1) 100%);
    oveflow: hidden;
    border-radius: 50%;
    -moz-border-radius: 50%;
    -webkit-border-radius: 50%;
    width: 15px;
    height: 15px;
    position: absolute;
    right: 5px;
    top: 5px;
    line-height: 14px;
    text-align: center;
    color: #656565;
    cursor: pointer;
    opacity: 0.8;
    font-size: 9px;
}
/*CART HOVER BLOCK*/

Скрипт отображает дополнительный блок в случае обнаружения товаров в корзине и наведении курсора мыши на «#hotengine-cart_menu» (корзину в блоке/меню сайта).




Дочерние изображения карточки товара

Загрузка списка изображений товара

Для каждой карточки товара можно получить список вложенных изображений в JSON формате. Для этого необходимо выполнить запрос на страницу «/ajax.php?get_shop_images=PATH», где PATH - путь к любому изображению товара или ID товара.

Загрузка списка изображений товара во всплывающей галерее Colorbox:

Для добавления иконки, при нажатии на которую будет всплывать галерея colorbox, с прокруткой всех доступных в товаре изображений, Добавьте следующий скрипт в Блок/Меню:
Code: JavaScript
<script type="text/javascript" defer src="/templates/scripts/hotengine-script-shop-load-images-product.js"></script>


CSS стиль иконки:
Code: JavaScript
/*CHILD IMAGES SHOW POPUP IN SHOP LIST*/
.hotengine-shop-product-img-load-list {
    background: url(/templates/styles/mobile/search.png) no-repeat center center;
    width: 18px;
    height: 18px;
    position: relative;
    z-index: 5;
    background-size: contain;
}
/*CHILD IMAGES SHOW POPUP IN SHOP LIST END*/

Отображать дочерние изображения в списке товаров с кнопками прокрутки списка с изображениями:

Если вам необходимо отображать дочерние изображения в списке товаров, то включите параметр «Вложенные изображения в списке товаров» в настройках магазина, во вкладке «Просмотр товара/Вкладки». Добавьте следующий скрипт в Блок/Меню:
Code: JavaScript
<script type="text/javascript" defer src="/templates/scripts/hotengine-script-shop-images-child-in-list.js"></script>


CSS стиль:
Code: JavaScript
/*CHILD IMAGES SHOW IN SHOP LIST*/
.hotengine-imgchenge { position:absolute; z-index:2; padding:15px; font-size:20px; display:inline-block;  background: #858585;
    color: #fff;
    border-radius: 50%;
    height: auto;
    width: auto; line-height:20px; top: 50%; cursor:pointer; margin:-30px 5px 5px 5px; opacity:0;}
.hotengine-imgchenge::after{ 
    position: absolute;
    left: 50%;
    top: 50%;
    width: 30px;
    height: 30px;
    font-size: 30px;
    line-height: 23px;
    text-align: center;
    transform: translate(-50%, -50%);
    pointer-events: none;
}
.hotengine-imgchenge-left {left:0px;} 
.hotengine-imgchenge-left::after {
    content: "\2039";
}
.hotengine-imgchenge-right {right:0px;} 
.hotengine-imgchenge-right:after{content:"\203A";}
.hotengine-shop-product-list-block:hover .hotengine-imgchenge{ opacity:1; -webkit-transition: opacity 1s ease-in-out;
  -moz-transition: opacity 1s ease-in-out;
  -ms-transition: opacity 1s ease-in-out;
  -o-transition: opacity 1s ease-in-out;
  transition: opacity 1s ease-in-out;}
/*CHILD IMAGES SHOW IN SHOP LIST END*/

Если товар содержит дочерние изображения, то скрипт отображает кнопки для их прокрутки, вперед и назад.

Отображать дочерние изображения в списке товаров: Замена изображения при наведении курсора:

Если вам необходимо отображать дочернее изображение при наведении курсора в списке товаров, то включите параметр «Вложенные изображения в списке товаров» в настройках магазина, во вкладке «Просмотр товара/Вкладки». Добавьте следующий скрипт в Блок/Меню:
Code: JavaScript
<script type="text/javascript" defer src="/templates/scripts/hotengine-script-shop-images-child-in-list-hover.js"></script>


Скрипт выпадающего меню

Скрипт выпадающего меню (по умолчанию)

По умолчанию вы можете настроить способ отображения дочерних пунктов Главного меню. Это можно сделать в «Редакторе дизайна», во вкладке «Главное меню», или при изменении пунктов главного меню в разделе «Мои Блоки/Меню».

При изменении параметров, к элементу «id="hotengine-mainmenu"» будут добавляться соответствующие классы.

  • «.hotengine-mainmenu-dropdown-default» - выпадающие пункты по умолчанию
  • «.hotengine-mainmenu-categories-popup» - всплывающее окно с пунктами меню на всю ширину страницы
  • «.hotengine-mainmenu-categories-column» – выпадающие окно с пунктами меню на всю ширину страницы
Для корректного использования скриптов к элементам списка, содержащим подпункты, присвоен класс «.hotengine-mainmenu-dropdown».
Выключив данные скрипты в параметрах Главного меню или удалив приведенные выше классы, вы можете установить собственный код событий или CSS стили при наведении.

Ниже приведены примеры скриптов, которые активируют данные выпадающие подпункты для главного меню, и встроены по умолчанию.

Выпадающее меню по умолчанию
Code: JavaScript
<script type="text/javascript">
$(function(){
if(!$(".hotengine-mainmenu-categories-popup").length && !$(".hotengine-mainmenu-categories-column").length && $(".hotengine-mainmenu-dropdown-default").length && $("#hotengine-mainmenu .hotengine-mainmenu-dropdown").length){ 
if(typeof $hotengine_mainmenu_categories_dropdown == "undefined"){
$.getScript("/templates/scripts/hotengine-script-mainmenu-categories-dropdown.js"); 
}
}
});
</script>

Всплывающее окно
Code: JavaScript
<script type="text/javascript">
$(function(){
if($(".hotengine-mainmenu-categories-popup").length && $("#hotengine-mainmenu .hotengine-mainmenu-dropdown").length){
if(typeof $hotengine_mainmenu_categories_popup == "undefined"){
$.getScript("/templates/scripts/hotengine-script-mainmenu-categories-popup.js");
}
}
});
</script>

Выпадающее окно
Code: JavaScript
<script type="text/javascript">
$(function(){
if($(".hotengine-mainmenu-categories-column").length && $("#hotengine-mainmenu .hotengine-mainmenu-dropdown").length){ 
if(typeof $hotengine_mainmenu_categories_popup_column == "undefined"){
$.getScript("/templates/scripts/hotengine-script-mainmenu-categories-popup-column.js"); 
}
}
});
</script>

Скрипт после загрузки Автоматических описаний

Скрипт добавления кнопки «Купить» после загрузки Автоматических описаний в карточке товара

Если вы используете автомаические описания в сокращенном виде, то после нажатия «Читать далее» можно добавить кнопку «Купить», а также цену.
После загрузки текста будет выполнена callback функция «callback_hotengine_shop_autodescription_readmore».

Code: JavaScript
<script type="text/javascript">
function callback_hotengine_shop_autodescription_readmore($id, $job) { 
if ($job === "load") {
let clone = $(".hotengine-shop-product-offerdetails .hotengine-shop-product-cart_icon").clone();
let priceblock = $(".hotengine-shop-product-offerdetails .hotengine-shop-product-price_box").clone();
$(`.hotengine-store-autodescription-block .hotengine-store-autodescription-list-block[data-hotengine-marking-id="${$id}"] .hotengine-store-autodescription-fulltext`).append([priceblock, clone]);
}
}
</script>

JSON загрузка товаров

Скрипт загрузки карточки товара в JSON формате

Данные карточек товаров доступны по запросу /ajax.php?json&shop_products

При выгрузке товаров можно указать параметры сортировки и фильтрации по следующим параметрам:
  • id - ID карточки товара (одно или несколько значений, через запятую).
  • pers_shop_cat_page_catid - ID категории магазина (одно или несколько значений, через запятую)
  • producer – производитель (одно или несколько значений, через запятую)
  • collection - коллекция (одно или несколько значений, через запятую)
  • sort_by – сортировка
  • order_by – сортировка
  • sort_instock_priority – сортировка приоритет
  • price_from – цена от
  • price_to – цена до
  • stock - наличие

Запрос работает только с указанием вашего домена, например http://example.com/ajax.php?json&shop_products&id=0


Code: JavaScript
<script type="text/javascript">
function decodeHtml(str){
  let map =
  {
  '&amp;': '&',
  '&lt;': '<',
  '&gt;': '>',
  '&quot;': '"',
  '&amp;#039;': "'"
  };
  return str.replace(/&amp;|&lt;|&gt;|&quot;|&#039;/g, function(m) {return map[m];});
  }
$(function(){
  $.getJSON("/ajax.php?json&shop_products&id=12345,12346", function(offers){
   if(Object.keys(offers).length > 0){ 
    // full parameters console.log(offers);
    $.each( offers.offers, function(z, items){ 
      $.each(items, function(i, item){ 
        console.log(decodeHtml(item.description)); //show description with htmldecode
        console.log(decodeHtml(item.text)); //show text with htmldecode
      });
    });
   } 
  });
});
</script>

Скрытие/Отображение характеристик в описании товара

Скрытие/Отображение характеристик в описании товара

В карточке товара доступно отображение Харктеристик. Блок может содержать длинный список, поэтому вы можете использовать скрипт для скрытия части характеристик. Для этого создайте Блок/Меню и вставьте следующий скрипт:
Code: JavaScript
<script type="text/javascript" defer src="/templates/scripts/hotengine-script-hide-properties.js"></script>

Скрипт можно изменить, указав количество полей для отображения по умолчанию. Для этого скопируйте Скрипт из файла и вставьте в Блок/Меню.

CSS стиль кнопки:
Code: JavaScript
/*SHOW/HIDE PROPERTIES*/
.shop_catalog_product_properties_block_showblock{text-align:left; margin-bottom:40px;}
.shop_catalog_product_properties_block_showblock:before{
    content: "Показать все характеристики"!important;
    white-space: nowrap;
    cursor: pointer;
    white-space: nowrap;
    text-align: center;
    height: auto;
    border-radius:0px;
    margin: 5px auto 5px auto;
    font-size: 15px;
    padding: 4px 4px;
    border-bottom: 1px dashed #666666;
    margin-left:19px;
    display: inline-block;
}
html:lang(en) .shop_catalog_product_properties_block_showblock:before{
    content: "Show all characteristics"!important;
}
html:lang(ru) .shop_catalog_product_properties_block_showblock:before{
    content: "Показать все характеристики"!important;
}
html:lang(uk) .shop_catalog_product_properties_block_showblock:before{
    content: "Показати всі характеристики"!important;
}
html:lang(pl) .shop_catalog_product_properties_block_showblock:before{
    content: "Pokaż wszystkie cechy"!important;
}

html:lang(en) .shop_catalog_product_properties_block_showblock.visible:before{
    content: "Hide"!important;
}
html:lang(ru) .shop_catalog_product_properties_block_showblock.visible:before{
    content: "Скрыть"!important;
}
html:lang(uk) .shop_catalog_product_properties_block_showblock.visible:before{
    content: "Приховати"!important;
}
html:lang(pl) .shop_catalog_product_properties_block_showblock.visible:before{
    content: "Ukrywać"!important;
}

.shop_catalog_product_properties_block_showblock:hover:before{
    color:#008fc3;
    border-color: #008fc3;
}
/*SHOW/HIDE PROPERTIES END*/


Добавление инофрации о доставке в карточку товара при помощи Ajax


Рекомендуемый метод добавления информации о доставке - Ajax загрузка информации с ранее созданной страницы. Данный механизм позволит избежать индексацию повторяемого текста на всех страницах карточек товаров. Для начала, создайте страницу. Например, с именем «delivery_info». Это можно сделать в разделе «Мои страницы». Теперь рассмотрим варианты загрузки данной страницы в карточку товара.

Добавление информации о доставке во Вкладку.

В карточке товара доступно отображение вкладок. Для создания собственной вкладки, и отображения текста о доставке при переходе во вкладку, необходимо создать скрипт. Для этого создайте Блок/Меню и вставьте следующий скрипт:
Code: JavaScript
$(document).ready(function () {
$('.hotengine-shop-content-tabs-block').before(`<input type="radio" id="button_tabs-8" name="button_tab"><label for="button_tabs-8">Доставка</label>`);

 let $l = $("meta[http-equiv='content-language']").attr("content");
  const languageMap = {
  "uk": "ua",
  };
  $l = languageMap[$l] || $l;

 $('.hotengine-shop-content-tabs-block').append('<div id="tabs-8"></div>');
  $('#button_tabs-8, label[for="button_tabs-8"]').on('click change', function () {
  if ($('#button_tabs-8').is(':checked')) {
  let $href = "/"+$l+"/delivery_info.htm";
  let $content_block = '#tabs-8';
  if($($content_block).html()==""){
  $($content_block).html('<div class="loading" align="center"><span class="loading-spin"></span></div>');
 $.ajax({ 
  type: "GET",
  dataType: "html",
  url: "/ajax.php",
  data: { p: $href },
  timeout: 20000,
  beforeSend: function() {
  $(".loading").show(400);
  },
  success: function(data) {
  $(".loading").fadeOut(300, function() {
  $(".loading").remove();
  $($content_block).html(data);
  });
  }
 });
  }
  }
  });
  });

Перед сохранением Блока/Меню обязательно установите галочку - JavaScript. Показывать Блок/Меню на страницах: «Только на страницах Магазина». Введите символы, при обнаружении которых отображать Блок/Меню: «.htm». Данный скрипт создаст вкладку, при нажатии на которую выполнится загрузка данных с созданной ранее страницы. Язык загружаемой страницы соотвествует тому языку, на котором просматривается карточка товара.


Добавление информации о доставке с помощью кнопки, во всплывающем окне.

Аналогичным образом, используя скрипт, вы можете установить событие для создания кнопки. При нажатии на которую, будет загружена созданная ранее страница.
Code: JavaScript
$(document).ready(function () {
  let $l = $("meta[http-equiv='content-language']").attr("content");
 const languageMap = {
  "uk": "ua",
  };
 $l = languageMap[$l] || $l;
 
 const deliveryTextMap = {
  ru: "Доставка",
  pl: "Dostawa",
  en: "Delivery",
  ua: "Доставка",
  fr: "Livraison",
  de: "Lieferung",
  es: "Entrega"
  };
 const deliveryText = deliveryTextMap[$l] || "Delivery";
 
 let $href = "/" + $l + "/delivery_info.htm";
 
 $(".hotengine-shop-product-offerdetails").after(
  `<a class="delivery_button hotengine-script-popup" 
  target="_blank" 
  data-remove-on-close="1" 
  data-iframe="14" 
  href="${$href}" 
  data-title="${deliveryText}" 
  data-header-fix="1" 
  data-auto-width="320" 
  data-auto-height="320" 
  data-max-width="800" 
  data-max-height="800" 
  data-mobile-width="320" 
  data-unset-height="1">${deliveryText}</a>`
  );
  });



Динамеческое изменение стоимости при оформлении бронирование


Добавление чаевых при оформлении бронирования

Рассмотрим пример добавления чаевых при оформлении бронирования.

  1. В форму (в конструкторе форм), используемую для бронирования, необходимо добавить два поля:
      - form_tips — select-список для выбора чаевых. В тексте опций можно указать 5%, 10%, 20%, а значениями — числа 5, 10, 20.
      - form_price_no_tip — скрытое поле для хранения базовой цены без чаевых.
  2. Поле form_price_no_tip должно быть типа hidden, чтобы пользователь его не видел, но скрипт мог использовать для расчётов.
  3. Далее создаём блок меню с вашим скриптом callback_hotengine_booking_form, который будет обрабатывать изменения чаевых и пересчитывать итоговую цену.
  4. Размещаем этот блок на всех страницах, где присутствует форма бронирования, чтобы динамический расчёт стоимости работал корректно везде.

Скрипт формирования итоговой стоимости.

Создайте Блок/Меню и вставьте следующий скрипт:
Code: JavaScript
function callback_hotengine_booking_form(value) {
  if (value === 9) {
  var $form = $("#dialog-booking-modal-content form");
 if ($form.length === 0) {
  console.log("no form found");
  return;
  }
 // Get current booking_data
  const bookingDataText = $(`textarea[name="booking_data"]`).val();
  let bookingData = {};
 if (bookingDataText) {
  try {
  bookingData = JSON.parse(bookingDataText);
  } catch (e) {
  console.error("JSON parse error: ", e);
  return;
  }
  }
 // --- 1. Save initial prices if not already stored ---
  if (!bookingData.bookingData?.selectedFormPrice_BEFORE) {
  bookingData.bookingData.selectedFormPrice_BEFORE = bookingData.bookingData?.selectedFormPrice || "-";
  }
  if (!bookingData.bookingData?.form_price_BEFORE) {
  bookingData.bookingData.form_price_BEFORE = bookingData.bookingData?.form_price || "-";
  }
 // --- 2. Use reserved values as the base ---
  let baseTotalPrice = bookingData.bookingData.form_price_BEFORE;
 // --- 3. Set the initial price in #form_price_no_tip ---
  $("#form_price_no_tip").val(baseTotalPrice);
 // --- 4. Handle tip changes ---
  $(`#form_tips`).change(function () {
  const tipValue = $(this).val();
 // If tip is "-", 0, or negative → revert to base values
  if (tipValue === "-" || tipValue === "0" || parseInt(tipValue, 10) <= 0) {
  const baseFormPrice = bookingData.bookingData.selectedFormPrice_BEFORE;
  const baseTotalPrice = bookingData.bookingData.form_price_BEFORE;
 const updatedBookingDataArray = {
  ...bookingData.bookingData,
  selectedFormPrice: baseFormPrice,
  form_price: baseTotalPrice
  };
 const updatedBookingData = { bookingData: updatedBookingDataArray };
  const updatedBookingDataJSON = JSON.stringify(updatedBookingData);
 // Update hidden field and displayed price
  $(`textarea[name="booking_data"]`).remove();
  $form.append(`<textarea name="booking_data" class="hidden">${updatedBookingDataJSON}</textarea>`);
  $(".booking-text-form-price span").text(baseTotalPrice);
  return;
  }
 const tipPercentage = parseInt(tipValue, 10);
 // Get reserved prices
  let baseFormPrice = bookingData.bookingData.selectedFormPrice_BEFORE;
  let baseTotalPrice = bookingData.bookingData.form_price_BEFORE;
 // --- 5. Extract numeric value and currency ---
  let priceMatch = baseFormPrice.match(/^([\d.]+)\s?(\D+)?$/);
  let totalMatch = baseTotalPrice.match(/^([\d.]+)\s?(\D+)?$/);
 if (!priceMatch || !totalMatch) {
  console.error("Failed to extract price values");
  return;
  }
 let baseFormPriceValue = parseFloat(priceMatch[1]);
  let baseTotalPriceValue = parseFloat(totalMatch[1]);
  let currency = priceMatch[2] || "$";
 // --- 6. Calculate new prices with tip percentage ---
  let newFormPrice = (baseFormPriceValue * (1 + tipPercentage / 100)).toFixed(2) + "" + currency;
  let newTotalPrice = (baseTotalPriceValue * (1 + tipPercentage / 100)).toFixed(2) + "" + currency;
 // --- 7. Update JSON data ---
  const updatedBookingDataArray = {
  ...bookingData.bookingData,
  selectedFormPrice: newFormPrice,
  form_price: newTotalPrice
  };
 const updatedBookingData = { bookingData: updatedBookingDataArray };
  const updatedBookingDataJSON = JSON.stringify(updatedBookingData);
 // --- 8. Update hidden field and displayed price ---
  $(`textarea[name="booking_data"]`).remove();
  $form.append(`<textarea name="booking_data" class="hidden">${updatedBookingDataJSON}</textarea>`);
  $(".booking-text-form-price span").text(newTotalPrice);
  });
  }
  }


Скрипт изменяет JSON данные с итоговой стоимостью выбранного слота для бронирования.

Динамеческое изменение стоимости при оформлении заказа


Добавление суммы к итоговой цене заказа в корзине

Вы можете использовать скрытое поле «form_price_append», чтобы прибавлять определённую сумму к итоговой стоимости в корзине. Например, если 5 товаров стоят 100$, а нужно добавить ещё 50$, укажите это значение в «form_price_append».

Поле можно создать двумя способами:
  • через редактор формы в настройках магазина, на вкладке «Оформление заказа» в разделе «Добавить поля в форму заказа»;
  • или программно с помощью скриптов, которые динамически изменяют его значение.
Это позволяет учитывать чаевые, дополнительные услуги, эксклюзивные товары или любые другие надбавки к стоимости заказа, при этом итоговая сумма будет корректно отображаться в корзине.

Скрипт для добавления поля «form_price_append» и дополнительной наценки

Создайте функциональную страницу «Корзина» и в тексте добавьте следующий код:
Code: JavaScript
<script>
$(document).ready(function() {
  const $form = $("#hotengine-shop-cart-form");
  if (!$form.length) return;
 // --- Add hidden append field if missing ---
  if ($form.find(`input[name="form_price_append"]`).length === 0) {
  $form.append(`<input type="hidden" name="form_price_append" value="0">`);
  }
  const $appendField = $form.find(`input[name="form_price_append"]`);
 // --- Add temporary element for calculations ---
  if ($form.find(`.hotengine-shop-product-price_before_append`).length === 0) {
  $form.append(`<span class="hotengine-shop-product-price_before_append" style="display:none;"></span>`);
  }
  const $tempPrice = $form.find(`.hotengine-shop-product-price_before_append`);
 // --- Add block for storing data via attributes ---
  if ($form.find(`.hotengine-shop-cart-cart_order_price_append`).length === 0) {
  $(`.hotengine-shop-cart-cart_order_price`)
  .after(`<div class="hotengine-shop-cart-cart_order_price_append"></div>`);
  }
  const $infoAppend = $(`.hotengine-shop-cart-cart_order_price_append`);
 // --- Save base price if not already ---
  const $priceNumber = $(`.hotengine-shop-cart-cart_order_price .hotengine-shop-product-price_number`);
  if (!$priceNumber.data(`base-price`)) {
  $priceNumber.data(`base-price`, parseFloat($priceNumber.text()) || 0);
  }
 // --- Price formatting function ---
  const formatPrice = (price) => Number.isInteger(price) ? price : price.toFixed(2);
 // --- Main update function ---
  const updateCartPriceAppend = () => {
  const appendVal = $appendField.val().trim();
  const basePrice = $priceNumber.data(`base-price`);
  let newPrice = basePrice;
 if (appendVal && appendVal !== "0") {
  // Handle percentage
  if (appendVal.indexOf("%") > -1) {
  const percent = parseFloat(appendVal.replace("%",""));
  if (!isNaN(percent)) newPrice = basePrice * (1 + percent / 100);
  } else {
  const fixed = parseFloat(appendVal);
  if (!isNaN(fixed)) newPrice = basePrice + fixed;
  }
  }
 // Update temporary element
  $tempPrice.text(formatPrice(newPrice));
 // Update price in cart
  $priceNumber.text(formatPrice(newPrice));
 // Update data attributes only
  $infoAppend.attr({
  "data-base": formatPrice(basePrice),
  "data-append": appendVal || 0,
  "data-new": formatPrice(newPrice)
  });
  };
 // --- Event: recalc on change and page load ---
  $appendField.on("input change", updateCartPriceAppend);
 // --- Example: set additional +1000 on page load ---
  $appendField.val("1000").trigger("change"); // additional price for example
  });
</script>

Для примера к сумме добавлено 1000.

Отображение последней оптовой цены в списке товаров


Если необходимо отобразить последнюю оптовую цену (т.е. минимальную) при отображении списка товаров, то можно использовать следующий CSS стиль:
Code: CSS
.hotengine-shop-product-list-block .hotengine-shop-product-price_bulk_block .hotengine-shop-product-price_bulk, .hotengine-shop-product-list-block .hotengine-shop-product-price_bulk_block .hotengine-shop-product-price_bulk_moq { display: none; }
.hotengine-shop-product-list-block .hotengine-shop-product-price_bulk_block .hotengine-shop-product-price_bulk:nth-last-of-type(2) { display: inline-block; }

.hotengine-shop-product-list-block .hotengine-shop-product-price_bulk_block:hover{border-color:#f96013;}
.hotengine-shop-product-list-block .hotengine-shop-product-price_bulk_block:hover .hotengine-shop-product-price_bulk { color:#f96013;}
.hotengine-shop-product-list-block .hotengine-shop-product-price_bulk_block:hover {color:#f96013; }

Аналогично для показа только первой цены (максимальной):
Code: CSS
.hotengine-shop-product-list-block .hotengine-shop-product-price_bulk_block .hotengine-shop-product-price_bulk, .hotengine-shop-product-list-block .hotengine-shop-product-price_bulk_block .hotengine-shop-product-price_bulk_moq { display: none; }
.hotengine-shop-product-list-block .hotengine-shop-product-price_bulk_block .hotengine-shop-product-price_bulk:first-child, .hotengine-shop-product-list-block .hotengine-shop-product-price_bulk_block .hotengine-shop-product-price_bulk_moq:first-child {display:inline-block;}

.hotengine-shop-product-list-block .hotengine-shop-product-price_bulk_block:hover{border-color:#f96013;}
.hotengine-shop-product-list-block .hotengine-shop-product-price_bulk_block:hover .hotengine-shop-product-price_bulk { color:#f96013;}
.hotengine-shop-product-list-block .hotengine-shop-product-price_bulk_block:hover {color:#f96013; }