Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <script type="text/javascript">
- window.unbxd_recommendation_pageInfo_new = <?= json_encode($block->getPageInfo()); ?>;
- /**
- * 1) Promise that resolves when the SDK global appears
- */
- function waitForSdk() {
- return new Promise(resolve => {
- if (window.getUnbxdRecommendations || window._unbxd_getRecommendations) {
- return resolve();
- }
- const timer = setInterval(() => {
- if (window.getUnbxdRecommendations || window._unbxd_getRecommendations) {
- clearInterval(timer);
- resolve();
- }
- }, 200);
- });
- }
- /**
- * 2) Promise that wraps the SDK call and resolves with the templateData
- * before the SDK actually renders the widget.
- */
- function initRecsAsPromise(cfg) {
- return new Promise((resolve, reject) => {
- // override dataParser to catch the payload
- const originalParser = cfg.dataParser;
- cfg.dataParser = data => {
- console.log('[PROMISE] raw payload:', data);
- resolve(data);
- // restore original parser in case SDK re-uses it
- cfg.dataParser = originalParser;
- return originalParser ? originalParser(data) : data;
- };
- try {
- // instantiate v3 ES6 class if available
- if (typeof window.getUnbxdRecommendations === 'function') {
- new window.getUnbxdRecommendations(cfg);
- } else if (typeof window._unbxd_getRecommendations === 'function') {
- window._unbxd_getRecommendations(cfg);
- } else {
- throw new Error('Unbxd Recs entrypoint not found');
- }
- } catch (e) {
- reject(e);
- }
- });
- }
- /**
- * 3) Wire it all up
- */
- waitForSdk()
- .then(() => {
- console.log('> SDK ready, initializing recommendations…');
- // ensure eventQueue exists for any hook registrations
- window.eventQueue = window.eventQueue || {};
- // register any before/after hooks you still want
- window._unbxd_registerHook('beforeTemplateRender', d => {
- console.log('[HOOK] beforeTemplateRender ➞', d);
- return d;
- });
- window._unbxd_registerHook('afterTemplateRender', v => {
- console.log('[HOOK] afterTemplateRender ➞', v);
- });
- // build the config exactly as you were doing
- const cfg = {
- widgets: {
- widget1: { name: 'widget1' },
- widget2: { name: 'widget2' },
- widget3: { name: 'widget3' }
- },
- userInfo: {
- userId: readCookie('unbxd.userId') || 'guest',
- siteKey: '<?= $siteKey ?>',
- apiKey: '<?= $apiKey ?>'
- },
- pageInfo: window.unbxd_recommendation_pageInfo_new,
- dataParser: data => data, // placeholder—will be overridden
- itemClickHandler: product => {
- console.log('[HOOK] itemClickHandler ➞', product);
- if (product.productUrl) window.location = product.productUrl;
- }
- };
- // call the SDK and wait for the payload
- return initRecsAsPromise(cfg);
- })
- .then(templateData => {
- console.log('✅ Recommendation payload received. You can now render or inspect:', templateData);
- // At this point the SDK will continue and render its templates.
- })
- .catch(err => {
- console.error('❌ Unbxd Recs init error:', err);
- });
- // Simple cookie reader
- function readCookie(name) {
- return document.cookie
- .split('; ')
- .reduce((v, p) => {
- const [k, val] = p.split('=');
- return (k === name) ? decodeURIComponent(val) : v;
- }, null);
- }
- </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement