Product Suggestions

πŸ‘

Note

Are you using Studio + Tile Editor? Our no-code tile editor supports this out of the box. You can create a specific component for the Suggestions plugin that contains any field you want.

In Tweakwise JS, Suggestions have limited customization options.

Customizing the display of product suggestions, can be achieved through event hooks:

<script>
  window.addEventListener("DOMContentLoaded", function () {
    window.tweakwiseSuggestions({  
      // ...
      on: {  
        'twn.request.products.success': function () {  
          console.log('request for fetching product suggestions succeeded');  
        },  
      },
    });
  });
</script>

Example

Adding a product_number to the product suggestions:

<script>
  function updateTwProductSuggestion(item) {
    // Find value to add to the suggestion
    const productNumber = item.attributes.find((a) => a.name === 'product_number').values[0];
        
    // Target Product Suggestion
    const el = document.body.querySelector(
      `a.twn-product-suggestion[data-item-id="${item.itemno}"]`
    );

    // Get the details container
    const container = el?.querySelector('.twn-product-suggestion__details');

    // create html string with necessary data to add
    const details =  'Productnumber: <em>' + productNumber + '</em>';

    // Check whether this element already exists so we don't duplicate them on further search
    let existingElement = container?.querySelector('.tw-product-number');
    if (!existingElement) {
      existingElement = document.createElement('div');
      existingElement.className = 'tw-product-number';
      container?.append(existingElement);
    }
    existingElement.innerHTML = details;
  }
  
  window.addEventListener("DOMContentLoaded", function () {
    window.tweakwiseSuggestions({  
      // ...
      "twn.request.products.success": function (event) {
        var hasItems = event && Array.isArray(event.items) && event.items.length > 0;  
        if (!hasItems) {
          return;
        }

        // use setTimeout to delay execution, because request can be 
        // finished before the container is opened and search elements 
        // may not be rendered yet
        setTimeout(() => {
          event.items.forEach((item) => {
            updateTwProductSuggestion(item);
          })
        }, 0)

      }
    });
  });
</script>

Need more control?

Consider integrating Suggestions using API.