<script src="https://core.robotint.ru/s.js"></script> https://core.robotint.ru/s.js</a>">
<script>
var aRobotintOptions={
tintSettings:{
CLIENT_ID: 0, //Ваш ID в системе Robotint, для тестового подключения оставьте 0
SECRET: "free_test", // Ключ для подключения
WITH_PRICE: 1, // осуществлять онлайн расчет цены
USE_SWITCHER: 0 // не показывать недоступные цвета
},
siteSettings:{
colorSelect: funcColorSelect, // функция обратного вызова
processPrice: funcProcessPrice,
bgZindex: 10000,
basketURL: "/personal/cart/" // путь для добавления товара в корзину
}
};
// устанавливаем настройки
obColorer. setOptions (aRobotintOptions);
function funcColorSelect(data){
//функция обработки результатов полученных от Robotint
}
function funcProcessPrice($button_data, col_data){
//функция обработки результатов полученных от Robotint
}
</script>
{
BASE_TYPE_INT: 1, // тип базы
BASKET_ID: 0, // id позиции корзины
COLLECTION_ID: 131, // id коллекции цветов
COLLECTION_NAME: "(TIK) Tikkurila Symphony", // название коллекции
COLOR_ID: 65712, // id цвета
COLOR_NAME: "TVT F346", // код цвета
COLOR_PRICE: 120, // цена
PRICE_PER_LITER:40, // цена за единицу измерения
PRICE_PER_CAN:120, // цена за банку
HEX: "#e4e1ed", // HEX код цвета
VOLUME: 3, // объем колеруемого продукта
COLLECTION_VENDOR_ID: 2, // id системы колеровки
action: "add" // тип действия
}
{
"BARCODE": "xxxx", // штрихкод колеруемого товара
"PRODUCT_PRICE": 370, // цена продукта
"PRODUCT_ID": 123, // id продукта
"VOLUME": 3, // объем для колеровки
"BASE_TYPE_INT": "1" //тип базы (не обязательный)
}
// шаблон
<tint-button disabled="disabled" data-basket-id='0' data-tint-button="1" data-tint-button-vertical="1" data-tint-data='JSON Array' onclick="obColorer.show(this)">
<tint-span>выбрать</tint-span>
<tint-span>цвет</tint-span>
</tint-button>
// пример
<?php
$array = {
"BARCODE"=> "0000000000000", // штрихкод колеруемого товара
"PRODUCT_PRICE"=>370, // цена продукта
"PRODUCT_ID"=> 123, // id продукта
"VOLUME"=> 3, // объем для колеровки
"BASE_TYPE_INT"=> "1" //тип базы (не обязательный)
}
$json = json_encode($array);
?>
<tint-button disabled="disabled" data-basket-id='0' data-tint-button="1" data-tint-button-vertical="1" data-tint-data='<?= $json?>' onclick="obColorer.show(this)">
<tint-span>выбрать</tint-span>
<tint-span>цвет</tint-span>
</tint-button>
<tint-button disabled="disabled" data-tint-button="1" data-tint-button-horizontal="1" data-tint-data='JSON Array' data-basket-id="0" onclick="obColorer.show(this)">
<tint-span>выбрать цвет</tint-span>
</tint-button>
<script>
function funcColorSelect(data) {
window.rt_admin?console.log(['select',data]):false // debug можно удалить на продакшене
var iProductID = parseInt(data.PRODUCT_ID); //получение идентификатора колеруемого продукта в базе интернет-магазина
var $itemObject = obColorer.itemObject;
if (iProductID) { //если выбран колеруемый продукт
var basketAction = "add"; //по умолчанию считать, что ведется добавление новой услуги колеровки в корзину
var iBasketID = data.BASKET_ID; //получить значение с идентификатором позиции в корзине, если это значение передано
if (iBasketID) { //если передан идентификатор товара в корзине
basketAction = "update"; //значит для этого товара ранее уже был выбран оттенок колеровки. Установить действие в состояние "обновление" колеровки — update
obColorer.close(); //закрыть интерфейс RoboTint
}
data.basketAction = basketAction; //определить выполняемую операцию в рабочем объекте
$.ajax({ //отправить запрос
type: "POST", //методом POST
url: "/some/dir/path/ajax.php", //путь до скрипта добавления/обновления цвета и товара в корзине (зависит от используемой вами CMS)
data: data, //в значении data передать объект со всеми возвращаемыми параметрами
timeout: 15000, //ожидать ответа от сервера в течение 15 секунд. После — прекратить ожидание
beforeSend: function () { //функция, которую можно использовать для исполнения логики на время ожидания ответа от сервера. Например — показ спиннера
//...
},
success: function (data, textstatus) { //функция в которую вернётся результат ajax-запроса
//...
},
error: function () { //функция обработчик ошибки ajax-запроса, если что-то пошло не так
//...
}
});
}
}
</script>
<script>
options.siteSettings = {
bgZindex: 10000,
colorSelect: obRobotint.select, // callback функция для передачи товара в корзину
processPrice: obRobotint.processPrice // callback функция для обработки цены
};
obColorer.setOptions(options);
</script>
// Объект obRobotint будет содержать обе функции обратного вызова и др. вспомогательный функционал
var obRobotint = {
prices:[], // в эту переменную мы поместим все варианты настроек для обработчика цен варианты конфигураторов смотри ниже
processPrice: function($priceObj, data){
// эту функцию. мы передадим в obColorer для обработки цен до того как их показать клиенту
// $priceObj - данные о расчете стоимости
// data - данные о коллекции цветов
if(window.rt_admin==1) console.log($priceObj, data)
var data_raw = $priceObj.data();
var ppl_raw = parseFloat(data_raw.pricePerLitr);
var ppc_raw = parseFloat(data_raw.pricePerCan);
var ppl = ppl_raw; // сохраняем в отдельную переменную с которой будем работать
var ppc = ppc_raw; // сохраняем в отдельную переменную с которой будем работать
var ref_vol = parseFloat(data_raw.priceRef_can_volume); // объем колеруемого продукта .. по данным базы
// объем колеруемого продукта
var iVolume = ref_vol ;
CVID = data.COLLECTION_VENDOR_ID
// заглушка если по какой то причине нет Vendor ID
if(!CVID) CVID = 2 // берем в данном случае Tikkurila
// здесь у нас будет храниться выбранный конфиг, но пока он false
var cur_set = false;
// обходим цены из конфига для того что бы выбрать нужный
// в соответствующем ценовом диапазоне и соответствующей системы
for(var i in obRobotint.prices) {
// массив конфига ценовых уровней и округлений
rt_price = obRobotint.prices[i];
if(rt_price['tint_system'] == CVID){
// если цена попадает в диапазон, то берем этот блок конфигуратора цены
if(ppl > rt_price.price_from ){
cur_set = rt_price
}
}
}
// если конфиг не установлен то устанавливаем значения по умолчанию
if(!cur_set){
cur_set = {
'price_from': 0,
'tint_system': CVID , // тут у нас tikkurila
'set_price': false,
'round': false,
'scale': false,
};
}
// приводим цену к уровню
if(cur_set.set_price){
ppl = cur_set.set_price;
}
// округляем
if(cur_set.round){
// если не указана кратность округления то =1
// а так же фисксим возможные ошибки
cur_set.scale = parseInt(cur_set.scale);
if(!cur_set.scale || cur_set.scale == 0){
cur_set.scale = 1;
}
// типы округления
if(cur_set.round == 'math'){
ppl = Math.round(ppl/cur_set.scale)*cur_set.scale;
}else if(cur_set.round == 'up'){
ppl = Math.ceil(ppl/cur_set.scale)*cur_set.scale;
}else if(cur_set.round == 'down'){
ppl = Math.floor(ppl/cur_set.scale)*cur_set.scale;
}else{
ppl = Math.round(ppl/cur_set.scale)*cur_set.scale;
}
}
// стоимость колеровки за банку
ppc = ppl*iVolume;
if(ppc!=ppc_raw){
// переписываем значение кнопки на клиентские, приведенные к нужному уровню
$priceObj.attr("data-price-shop",ppc);
$priceObj.text(obRobotint.numberFormat(ppc,0,"."," ")+" ₽");
}
},
numberFormat: function ( number, decimals, dec_point, thousands_sep ) {
// эта функция отформатирует нам цену так как нам нужно
// Format a number with grouped thousands
//
// + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + bugfix by: Michael White (http://crestidg.com)
var i, j, kw, kd, km;
// input sanitation & defaults
if( isNaN(decimals = Math.abs(decimals)) ){
decimals = 2;
}
if( dec_point == undefined ){
dec_point = ",";
}
if( thousands_sep == undefined ){
thousands_sep = ".";
}
i = parseInt(number = (+number || 0).toFixed(decimals)) + "";
if( (j = i.length) > 3 ){
j = j % 3;
} else{
j = 0;
}
km = (j ? i.substr(0, j) + thousands_sep : "");
kw = i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousands_sep);
//kd = (decimals ? dec_point + Math.abs(number - i).toFixed(decimals).slice(2) : "");
kd = (decimals ? dec_point + Math.abs(number - i).toFixed(decimals).replace(/-/, 0).slice(2) : "");
return km + kw + kd;
},
// эта функция для добавления в корзину, вы ее уже видели выше
select: function (data) {
//...
}
};
obRobotint.prices = [
{
'price_from': 0, // для всех цен от 0 рублей
'tint_system': 2, // применить только для системы колеровки tikkurila
'set_price': 30, // установить цену 30 для всех цветов от 0р,
'round': false,
'scale': false,
},
{
'price_from': 0,
'tint_system': 6, // действует только для ceresit
'set_price': 30,
'round': false,
'scale': false,
},
{
'price_from': 30, // для всех цен от 30 рублей
'tint_system': 2,
'set_price': false, // не устанавливаем фиксированную цену
'round': 'up', // округление в up, down , math
'scale': 10, // округлять до 1 / 10 / 100 рублей
},
{
'price_from': 500,
'tint_system': 2,
'set_price': false,
'round': 'up', // округление в up, down , math
'scale': 100, // округлять до 1 / 10 / 100 рублей
},
{
'price_from': 1000,
'tint_system': 2,
'set_price': false,
'round': 'down', // округление в up, down , math
'scale': 100, // округлять до 1 / 10 / 100 рублей
}
];
obRobotint.prices = [
{
'price_from': 0,
'tint_system': 2, // tikkurila
'set_price': 30,
'round': false,
'scale': false,
},
{
'price_from': 30,
'tint_system': 2, // tikkurila
'set_price': 50,
'round': false,
'scale': false,
},
{
'price_from': 50,
'tint_system': 2, // tikkurila
'set_price': 100,
'round': false,
'scale': false,
},
{
'price_from': 100,
'tint_system': 2, // tikkurila
'set_price': false,
'round': 'up', // округление в up, down , math
'scale': 10, // округлять до 1 / 10 / 100 рублей
}
]
var obRobotint = {
// ...
processPrice: function($priceObj, data){
var data_raw = $priceObj.data();
var ppl_raw = parseFloat(data_raw.pricePerLitr);
var ppc_raw = parseFloat(data_raw.pricePerCan);
var ppl = ppl_raw; // сохраняем в отдельную переменную с которой будем работать
var ppc = ppc_raw; // сохраняем в отдельную переменную с которой будем работать
var ref_vol = parseFloat(data_raw.priceRef_can_volume); // объем колеруемого продукта .. по данным базы
var iVolume = ref_vol ;
CVID = data.COLLECTION_VENDOR_ID
if(!CVID) CVID = 2 // берем в данном случае Tikkurila
var cur_set = false;
for(var i in obRobotint.prices) {
// массив конфига ценовых уровней и округлений
rt_price = obRobotint.prices[i];
if(rt_price['tint_system'] == CVID){
// если цена попадает в диапазон, то берем этот блок конфигуратора цены
if(ppc > rt_price.price_from ){
cur_set = rt_price
}
}
}
if(!cur_set){
cur_set = {
'price_from': 0,
'tint_system': CVID , // тут у нас tikkurila
'set_price': false,
'round': false,
'scale': false,
};
}
if(cur_set.set_price){
ppc = cur_set.set_price;
}
if(cur_set.round){
cur_set.scale = parseInt(cur_set.scale);
if(!cur_set.scale || cur_set.scale == 0){
cur_set.scale = 1;
}
if(cur_set.round == 'math'){
ppc = Math.round(ppc/cur_set.scale)*cur_set.scale;
}else if(cur_set.round == 'up'){
ppc = Math.ceil(ppc/cur_set.scale)*cur_set.scale;
}else if(cur_set.round == 'down'){
ppc = Math.floor(ppc/cur_set.scale)*cur_set.scale;
}else{
ppc = Math.round(ppc/cur_set.scale)*cur_set.scale;
}
}
// стоимость колеровки за литр
ppl = ppc/iVolume;
if(ppc!=ppc_raw){
// переписываем значение кнопки на клиентские, приведенные к нужному уровню
$priceObj.attr("data-price-shop",ppc);
$priceObj.text(obRobotint.numberFormat(ppc,0,"."," ")+" ₽");
}
},
// ....
}
$client = new HttpClient();
$client->setHeader("Authorization", "e2727d915b415************************************1fa2975ba507ba");
$client->setHeader("Content-type", "application/json");
$arData = [
"CLIENT_ID" => "4",
"COLOR_ID" => "140660",
"BARCODE" => "6408070012765",
"action" => "get-color-price"
];
$result = $client->post("https://core.robotint.ru/exchange/", json_encode($arData));