Интеграция с конкретным продуктом(SKU)
В этом документе можно найти информацию о том, как Wizart Web Visualizer позволяет открывать и визуализировать конкретный продукт(SKU).
Важно! Ознакомьтесь с Wizart Web Visualizer: интеграцияarchived перед тем как перейти к интеграции ниже.
someVendorCode
- уникальный код или идентификатор, который соответствует связанному продукту, существующему в PIM (Product Information Management) system.
В исходном файле необходимой страницы добавьте требуемый код в теге <body>
, как указано в листинге ниже.
<body>
...
<button id="wizart-spec-fitting-room-button" onClick="openSpecificFittingRoom('someVendorCode')">
Fitting room Specific Article
</button>
<iframe
id="wizart-fitting-room-object"
role="dialog"
aria-label="Wizart Fitting Room."
type="text/html"
allowfullscreen
>
</iframe>
<style>
#wizart-fitting-room-object {
z-index: 2147483647 !important;
display: none;
position: fixed !important;
top: 0 !important;
left: 0 !important;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.8);
border: none;
}
#wizart-fitting-room-object.active {
display: block;
}
</style>
<script src="./wizart-integration.js"></script>
</body
Используя следующий листинг ниже, обновите js-файл с именем wizart-integration.js:, либо создайте и загрузите его к существующим исходным файлам клиентского веб-приложения, если такой отсутствует.
// todo get api token from Wizart.
const api_token = 'CLIENT_SPECIFIC_API_TOKEN';
const server_address = 'https://pim-client.wizart.tech';
// bba (back button action) param is used to add back button to wizart component
const fittingRoomEndpoint = server_address
+ '/fitting-room'
+ '?api_token=' + api_token
+ '&bba=true'
;
function openFittingRoom (searchQuery) {
const componentEndpoint = searchQuery ? fittingRoomEndpoint + searchQuery : fittingRoomEndpoint;
let fittingRoomObject = document.getElementById('wizart-fitting-room-object');
const fittingRoomObjectContainer = fittingRoomObject.parentElement;
fittingRoomObject.setAttribute('src', componentEndpoint);
// object clonning is necessary as some browsers does not render "object" twice after changing data attribute
const clonnedFittingRoomObject = fittingRoomObject.cloneNode(true);
fittingRoomObjectContainer.appendChild(clonnedFittingRoomObject);
fittingRoomObject.remove();
clonnedFittingRoomObject.classList.add('active');
// should be added to avoid duplicating scrollbars
document.getElementsByTagName('html')[0].style.overflow = 'hidden';
}
function openSpecificFittingRoom (vendorCode) {
// query can be updated to search for necessary article
const articleSearchQuery = '&article_query='
+ '{\"vendor_code\": \"'
+ vendorCode
+ '\"}'
;
openFittingRoom(articleSearchQuery);
}
// bba event - fired when back button is clicked at wizart component
window.addEventListener('message', function (event) {
if (~event.origin.indexOf(server_address)) {
// exactly 'close_overlay' as it's sent from wizart component
if (event.data === 'close_overlay') {
// return overflow of target page to initial state
document.getElementsByTagName('html')[0].style.overflow = 'auto';
document.getElementById('wizart-fitting-room-object').classList.remove('active');
}
}
});