Shopify डेवलपर इंटीग्रेशन#
ideal.house बटन को Shopify थीम में जोड़ें और इसे चयनित वैरिएनट SKU से मैप करें।
<!-- DASHBOARD_READINESS -->** SDK को लोड करने से पहले:** डैशबोर्ड → सेटिंग्स खोलें, अपने स्टोरफ्रंट मूल को Allowed Origins (CORS) में जोड़ें, और सहेजें पर क्लिक करें। प्रकाशित होस्टनेम और कोई भी प्रीव्यू या स्टेजिंग मूल शामिल करें जिन्हें आप उपयोग करते हैं; कई मूलों को कॉमा से अलग करें। कॉन्फ़िगरेशन के चरण देखें।
1. पूर्वशर्तों की पुष्टि करें#
- आप लाइव थीम कोड या थीम की सुरक्षित प्रतिलिपि को संपादित कर सकते हैं।
- कैटलॉग में कम से कम एक परीक्षण उत्पाद आयातित और सक्रिय है।
- चयनित वैरिएनट SKU इस स्टोर के लिए कैटलॉग द्वारा उपयोग किया गया वही सहेजा गया productCode है।
2. बटन स्निपेट बनाएं#
snippets/idealhouse-view-button.liquid#
{%- comment -%}
Renders an ideal.house authored visualizer button.
Accepts:
- product_code: {String} Variant SKU used by the ideal.house Catalog mapping.
- placement: {String} "card", "pdp-desktop", or "pdp-mobile".
{%- endcomment -%}
{%- liquid
assign button_code = product_code | strip
assign button_placement = placement | default: 'card'
-%}
<button
type="button"
class="idealhouse-view-button idealhouse-view-button--{{ button_placement | escape }}"
data-idealhouse-authored-button
data-active="false"
{% if button_code != blank %}
data-product-code="{{ button_code | escape }}"
{% else %}
disabled
{% endif %}
style="visibility: hidden;"
>
<span>View in my room</span>
</button>
बटन को छिपाए रखें जब तक SDK उत्पाद योग्यता की पुष्टि न कर ले।
3. थीम सतहों पर बटन रेंडर करें#
संग्रह और खोज कार्ड#
{%- render 'idealhouse-view-button',
product_code: card_product.selected_or_first_available_variant.sku,
placement: 'card'
-%}
सामान्य फ़ाइलों में snippets/card-product.liquid, snippets/product-card.liquid, या snippets/product-grid-item.liquid शामिल हैं। card_product को थीम द्वारा उपयोग किए जाने वाले उत्पाद चर के अनुकूल करें।
उत्पाद विवरण पेज#
{%- render 'idealhouse-view-button',
product_code: product.selected_or_first_available_variant.sku,
placement: 'pdp-desktop'
-%}
{%- render 'idealhouse-view-button',
product_code: product.selected_or_first_available_variant.sku,
placement: 'pdp-mobile'
-%}
सामान्य फ़ाइलों में sections/main-product.liquid या snippets/product.liquid शामिल हैं। केवल तभी अलग डेस्कटॉप और मोबाइल रेंडर रखें जब थीम में अलग लेआउट हों।
4. SDK लोड करें और वैरिएंट सिंक करें#
assets/idealhouse-room-visualizer.js#
(function () {
'use strict';
var buttonSelector = '[data-idealhouse-authored-button]';
var sdkRequested = false;
var buttonObserver = null;
function resetButton(button) {
button.dataset.active = 'false';
button.style.visibility = 'hidden';
delete button.dataset.rvProductCode;
delete button.dataset.rvProductType;
delete button.dataset.rvProductId;
delete button.dataset.rvProductIds;
}
function syncButton(button, productCode) {
if (!button) return false;
var code = typeof productCode === 'string' ? productCode.trim() : '';
resetButton(button);
delete button.dataset.productCode;
if (!code) {
button.disabled = true;
return false;
}
button.disabled = false;
button.dataset.productCode = code;
return true;
}
function syncButtons(container, productCode) {
(container || document).querySelectorAll(buttonSelector).forEach(function (button) {
syncButton(button, productCode);
});
}
function loadSdk() {
if (sdkRequested || !document.querySelector(buttonSelector)) return false;
sdkRequested = true;
if (buttonObserver) buttonObserver.disconnect();
var script = document.createElement('script');
script.src = 'https://sdk.ideal.house/sdk.js';
script.async = true;
script.dataset.shopId = '<SHOP_ID>';
script.dataset.publishableKey = '<PUBLISHABLE_KEY>';
script.dataset.authoredButtonSelector = buttonSelector;
document.head.appendChild(script);
return true;
}
function startSdkLoader() {
if (loadSdk() || typeof MutationObserver === 'undefined') return;
buttonObserver = new MutationObserver(loadSdk);
buttonObserver.observe(document.documentElement, { childList: true, subtree: true });
}
// Dispatch this event from your theme's variant-change callback.
document.addEventListener('idealhouse:variant-change', function (event) {
var detail = event.detail || {};
syncButtons(detail.container || document, event.detail && event.detail.sku);
});
window.IdealhouseShopify = {
syncButton: syncButton,
syncButtons: syncButtons
};
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', startSdkLoader);
} else {
startSdkLoader();
}
}());
Shopify एक सार्वभौमिक थीम वैरिएनट इवेंट की परिभाषा नहीं करता है। नीचे दिए गए छोटे एडैप्टर को सक्रिय थीम द्वारा प्रकट किए गए इवेंट या कॉलबैक से जोड़ें।
थीम इवेंट एडैप्टर उदाहरण#
उदाहरण इवेंट को सक्रिय थीम API से बदलें। कुछ थीम window.subscribe के माध्यम से प्रकाशित करती हैं; अन्य एक DOM इवेंट डिस्पैच करती हैं या उत्पाद-सूचना अपडेट करती हैं।
// Example only: replace "variant:change" with your theme's event.
document.addEventListener('variant:change', function (event) {
var variant = event.detail && event.detail.variant;
var productContainer = event.target.closest('product-info') || document;
document.dispatchEvent(new CustomEvent('idealhouse:variant-change', {
detail: {
container: productContainer,
sku: variant && variant.sku
}
}));
});
5. थीम शैलियाँ जोड़ें#
assets/idealhouse-room-visualizer.css#
.idealhouse-view-button {
align-items: center;
justify-content: center;
width: 100%;
min-height: 44px;
padding: 0.75rem 1rem;
border: 1px solid currentColor;
border-radius: 6px;
background: transparent;
color: inherit;
cursor: pointer;
font: inherit;
}
.idealhouse-view-button[data-active="true"] {
display: inline-flex;
visibility: visible;
}
.idealhouse-view-button:disabled {
cursor: not-allowed;
opacity: 0.5;
}
थीम इन दृश्य शैलियों को अधिलेखित कर सकती है।
6. theme.liquid में एसेट्स शामिल करें#
शैलियों को लागू करने और SDK लोडर को सक्रिय करने के लिए विज़ुअलाइज़र स्टाइलशीट और स्क्रिप्ट को layout/theme.liquid में शामिल करें।
स्टाइलशीट शामिल करें (<head> के अंदर)#
{{ 'idealhouse-room-visualizer.css' | asset_url | stylesheet_tag }}
शैलियों को साफ़ रूप से लोड होने के लिए layout/theme.liquid के <head> टैग के अंदर रखें।
स्क्रिप्ट शामिल करें (</body> से पहले)#
<script src="{{ 'idealhouse-room-visualizer.js' | asset_url }}" defer="defer"></script>
पेज रेंडरिंग को ब्लॉक करने से बचने के लिए defer का उपयोग करें और layout/theme.liquid में बंद होने वाले </body> टैग के ठीक पहले रखें।
'मेरे कमरे में देखें' बटन तब तक छिपा रहता है जब तक यह लोडर स्क्रिप्ट theme.liquid में शामिल नहीं हो जाती।
7. लाइव स्टोरफ्रंट पर सत्यापित करें#
- नेटवर्क पैनल sdk.js को HTTP 200 के साथ लोड दिखाता है।
- लेखित बटन data-product-code कैटलॉग productCode से पूर्णतः मेल खाता है।
- योग्य उत्पाद एक बटन प्रकट करते हैं; अयोग्य उत्पाद इसे छिपाए रखते हैं।
- वैरिएनट स्विच करने पर data-product-code अपडेट होता है और बटन को पुनः सत्यापित किया जाता है।
- कलेक्शन/खोज, PDP डेस्कटॉप, और PDP मोबाइल स्थितियाँ जहाँ उपलब्ध हैं वहाँ काम करती हैं।
- बटन पर क्लिक करने से चयनित उत्पाद के साथ ideal.house Viewer खुलता है।