Объект / идентификатор продукта BigCommerce из внешнего интерфейса javascript - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь добавить контент на страницу продукта BigCommerce через диспетчер сценариев.

Есть ли способ получить текущий объект / идентификатор продукта из внешнего интерфейса JS?

Если вы работаете в среде Stencil, есть много документации, но возможно ли это из прямого интерфейса JS?

1 Ответ

1 голос
/ 03 июля 2020

Есть несколько способов сделать это:

  1. Используя Stencil, вы можете вставлять объекты в Javascript следующим образом:

    {{inject "myProductName" product.title}}
    
    <script>
    // Note the lack of quotes around the jsContext handlebars helper, it becomes a string automatically.
    var jsContext = JSON.parse({{jsContext}});
    
    /* jsContext would output "{\"myProductName\": \"Sample Product\"}" which can feed directly into
    your JavaScript. */
    
    console.log(jsContext.myProductName); // Will output: Sample Product
    </script>
    
    
  2. Использование только JS не так элегантно. Вы можете найти форму добавления в корзину, а затем найти скрытый ввод с именем product_id, значение которого имеет идентификатор продукта.

    
    const addToCartForm = Array.from(document.getElementsByTagName('form')).find(item => item.action.value === 'add' && item.action.name === 'action');
    
    if (typeof addToCartForm === 'object' && addToCartForm.hasOwnProperty('product_id')) {
            return addToCartForm.product_id.value;
    }
    
  3. Там еще один вариант: BCData. На каждой странице продукта есть переменная с именем BCData, содержащая данные, которые выглядят следующим образом:

    {"csrf_token":"TOKEN_HERE","product_attributes":{"purchasable":true,"purchasing_message":"MY MESSAGE","sku":"MY SKU","upc":"MY UPC","stock":0,"instock":true,"stock_message":"MY STOCK MESSAGE","weight":0.35,"base":true,"image":"https://www.test.com/my-image","price":{"without_tax":{"formatted":"$35.00","value":35,"currency":"USD"},"tax_label":"Tax"}}}
    

    Вы можете взять sku, если у всех ваших продуктов есть skus, а затем основать свой JS функции вместо этого вместо id. Я знаю, что вы специально просили решение, основанное на id, но я хотел, чтобы вы знали, что существует объект JS, который Bigcommerce загружает изначально. К сожалению, на момент написания этого комментария BCData не включает идентификатор продукта.

Удачи!

Документация для пункт №1.

...