npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@comsultia/enhanced-commerce

v0.0.36

Published

Enhanced (E)commerce GTM plugin

Downloads

25

Readme

Enhanced (e)Commerce plugin for GTM

EC is a plugin which provides functions to push Google Analytics Enhanced Ecommerce data into GTM in browser automatically using data in html markup.

This version can be installed by npm install --save @comsultia/enhanced-commerce.

Usage

In gulpfile.js add EC to your array of JS files, for example (or whatever you like):

// gulpfile.js
const jsFiles = [
  path.src.js + 'vendor/jquery.slim.min.js',
  path.src.js + 'vendor/popper.min.js',
  path.src.js + 'vendor/bootstrap.min.js',
  'node_modules/@comsultia/enhanced-commerce/dist/ec-plugin-bundle.js',
  path.src.js + 'custom.js',
  ...
];

for more detailed gulp configuration, check gulpfile.js in 'node_modules/@comsultia/enhanced-commerce/gulpfile.js'

Add into .js or .html this initialization

<script>
	ecService = ec.init({
		'dataLayer': dataLayer, // optional
		'prefix': 'data-ec', // default
		'currencyCode': 'EUR', // optional
		'debug': true // loggin into console (devel mode)
	});
</script>

Setup GTM for Enhanced Ecommerce

EC is sending events into dataLayer[] as specified here: https://developers.google.com/tag-manager/enhanced-ecommerce. To work as specified, please add required tags and triggers into your Tag Manager.

Syntax

All data are marked in html code using data-ec-* attributes of elements. When required attributes not found, EC is searching missing attributes in closest elements. data-ec prefix can be changed in ec.init setup.

Created ecService object can be used to tracking in javascipt code.

Element's position

Works with all EC actions supported position attribute (impressions, follow, add, remove).

method a)

auto calculating position by siblings without defining data-ec-position:

<ul data-ec-list="Product list">
	<li data-ec-id="1"
		data-ec-name="name"
		data-ec-action="view"
	>
		<span>Product 1 content</span>
	</li>
	<li data-ec-id="2"
		data-ec-name="name"
		data-ec-action="view"
	>
		<span>Product 2 content</span>
	</li>
</ul>
method b)
  • or you can override default behaviour with attribute data-ec-position
  • helpful if you have to wrap element in sets of elements
  • any nested HTML structure is allowed, EC will look for closest element with attribute data-ec-position
<ul data-ec-list="Product list">
	<li data-ec-position="1">
		<div
			data-ec-id="1"
			data-ec-name="name"
			data-ec-action="view"
		>
			<span>Product 1 content</span>
		</div>
	</li>
	<li data-ec-position="2">
	    <div>
    		<div
    			data-ec-id="2"
    			data-ec-name="name"
    			data-ec-action="view"
    		>
    			<span>Product 2 content</span>
    		</div>
    	</div>
	</li>
</ul>

Track product view

<ul data-ec-list="Homepage list">
	<li data-ec-id="123"
		data-ec-position="1"
		data-ec-name="name"
		data-ec-category="Items"
		data-ec-brand="Brand"
		data-ec-price="15.25"
		data-ec-action="view"
		data-ec-url="/product/123"
	>
		<span>product content</span>
	</li>
</ul>

Grouped attributes in lists: in this example category and brand are the same in all products, and position is calculated by <li> position.

<ul data-ec-list="Homepage list"
	data-ec-category="Items"
	data-ec-brand="Brand"
>
	<li data-ec-id="123"
		data-ec-name="name"
		data-ec-price="15.25"
		data-ec-action="view"
	>
		<span>product content</span>
	</li>
	<li data-ec-id="124"
		data-ec-name="name"
		data-ec-price="15.25"
		data-ec-action="view"
	>
		<span>product2 content</span>
	</li>
</ul>

Track product view - on ajax response

If products are inserted into DOM on response (scroll, click or another event), you can call ecService method responseInit(limit) in your javascript functionality.

Simple example:

fetch(url)
  .then(response => {
  	return response.json();
  })
  .then(html => {
    html.map(product => {
      $('.product-list').append(`
        <li class="data-ec-item-response"
          data-ec-id="123"
          data-ec-position="1"
          data-ec-name="name"
          data-ec-category="Items"
          data-ec-brand="Brand"
          data-ec-price="15.25"
          data-ec-action="view"
          data-ec-url="/product/123">
        >
        	{product.name}
        </li>
      `);
  });

  ecService.responseInit(limit);
}
  • don't forget to add class attribute data-ec-item-response to inserted product item
  • don't forget to add data-ec-action="view" attribute and all data-ec... attributes
  • limit parameter should represent number of inserted products (still updated after response and insertion success)

for more information, see example in index.html in 'node_modules/@comsultia/enhanced-commerce/dist/index.html'

Track product clicks

You can simply track clicks by adding data-ec-action="follow" into your code

<li data-ec-id="123">
    <a href="/product-link" data-ec-action="follow">product link</a>
</li>
<li data-ec-id="124">
    <a href="/product-link" data-ec-action="follow">product link</a>
</li>

or by using javascript funcion

<li data-ec-id="123">
    <a href="#" onclick="ecService.follow(this)">product link</a>
</li>

Track product detail

You can simply track product detail view by adding data-ec-action="detail" and other data-ec-* attributes

<div data-ec-action="detail"
    data-ec-id="123"
    data-ec-name="Product name"
    data-ec-category="Product category"
    data-ec-brand="Brand"
    data-ec-list="list"
    data-ec-price="10.00"
    data-ec-url="/product-name"
>
    Product detail
</div>

Basket manipulation

Add product to cart provided by javascript

<li data-ec-id="125">
	<a href="/product-link">
		Product name
	</a>
	<span onclick="ecService.addCart(this,{quantity: 3})">
		add to cart
	</span>
</li>

You can override every information of product just by addCart method

ecService.addCart(event.srcElement,{
	quantity: 3,
	price: 12.25,
	currency: 'EUR'
})

Remove product from cart

// when clicked on product element
ecService.removeCart(event.srcElement,{
	quantity: 1
});
// or manipulation in cart
ecService.removeCart({
	id: 123,
	quantity: 1
})

Order process

Steps

method a)

Simply add to html data-ec-action with data-ec-step and data-ec-products attributes

<body
	data-ec-action="step"
    data-ec-step="1"
    data-ec-products="
      [{&quot;id&quot;:&quot;123&quot;,&quot;name&quot;:&quot;Product 1 b&quot;,&quot;category&quot;:&quot;Items&quot;,&quot;url&quot;:&quot;/product-1&quot;,&quot;price&quot;:&quot;10.00&quot;,&quot;quantity&quot;:&quot;14&quot;},
      {&quot;id&quot;:&quot;124&quot;,&quot;name&quot;:&quot;Product 2 b&quot;,&quot;url&quot;:&quot;/product-2&quot;,&quot;price&quot;:&quot;0.00&quot;,&quot;quantity&quot;:&quot;1&quot;},
      {&quot;id&quot;:&quot;125&quot;,&quot;name&quot;:&quot;Product 3 b&quot;,&quot;url&quot;:&quot;/product-3&quot;,&quot;price&quot;:&quot;0.25&quot;,&quot;quantity&quot;:&quot;5&quot;}]"
>...</body>

for more information, see example in cart-step-1.html in 'node_modules/@comsultia/enhanced-commerce/dist/cart-step-1.html'

method b)

or add class data-ec-track-cart-step to button/anchor with data-ec-step and data-ec-products attributes

<a
	href="/cart-step-3.html"
    class="data-ec-track-cart-step"
    data-ec-step="2"
    data-ec-products="
      [{&quot;id&quot;:&quot;123&quot;,&quot;name&quot;:&quot;Product 1 b&quot;,&quot;category&quot;:&quot;Items&quot;,&quot;url&quot;:&quot;/product-1&quot;,&quot;price&quot;:&quot;10.00&quot;,&quot;quantity&quot;:&quot;14&quot;},
      {&quot;id&quot;:&quot;124&quot;,&quot;name&quot;:&quot;Product 2 b&quot;,&quot;url&quot;:&quot;/product-2&quot;,&quot;price&quot;:&quot;0.00&quot;,&quot;quantity&quot;:&quot;1&quot;},
      {&quot;id&quot;:&quot;125&quot;,&quot;name&quot;:&quot;Product 3 b&quot;,&quot;url&quot;:&quot;/product-3&quot;,&quot;price&quot;:&quot;0.25&quot;,&quot;quantity&quot;:&quot;5&quot;}]"
>
    Next step
</a>

for more information, see example in cart-step-2.html in 'node_modules/@comsultia/enhanced-commerce/dist/cart-step-2.html'

method c)

or just call JS method steps(param1, param2, param3)

ecService.steps(3, ['billing 4', 'shipping 3'],
  [
    {id: "123", name: "Product 1 b", category: "Items", url: "/product-1", price: "10.00", quantity: "14"},
    {id: "124", name: "Product 2 b", url: "/product-2", price: "0.00", quantity: "1"},
    {id: "125", name: "Product 3 b", url: "/product-3", price: "0.25", quantity: "5"}
  ]
);

for more information, see example in cart-step-3.html in 'node_modules/@comsultia/enhanced-commerce/dist/cart-step-3.html'

Steps options

Add data-ec-option attribute to billing, shipping etc. inputs.

<h4>Shipping options</h4>
<div>
	<input type="radio" name="shipping" id="shipping1" value="shipping1" data-ec-option>
	<label for="shipping1">
		shipping 1
	</label>
</div>
<div class="form-check">
	<input type="radio" name="shipping" id="shipping2" value="shipping2" data-ec-option>
	<label class="form-check-label" for="shipping2">
		shipping 2
	</label>
</div>

Then add data-ec-track-cart-step to button/anchor with data-ec-step attribute (same as example method b)), javascript will looking for checked input and send it to Google Analytics as current step actionField or add second parameter as an array showed in example method c).

for more information, see example in cart-step-2.html in 'node_modules/@comsultia/enhanced-commerce/dist/cart-step-2.html'

Purchase

method a)

You are able to call javascript method purchase(param1, param2):

ecService.purchase(
	{
      id: "778",
      affiliation: "Eshop - inline",
      revenue: parseFloat(81.30).toFixed(2),
      shipping: parseFloat(3.00).toFixed(2),
      tax: parseFloat(13.05).toFixed(2)
    },
    [
      {id: "123", name: "Product 1", category: "Items", url: "/product-1", price: "10.00", quantity: "10"},
      {id: "124", name: "Product 2", url: "/product-2", price: "0.00", quantity: "1"},
      {id: "125", name: "Product 3", url: "/prodcut-2", price: "0.25", quantity: "3"}
    ]
);

where first parameter is object with parameters:

(id: string, affiliation: string, revenue: number, shipping: number, tax: number)

and second parameter is array of objects

method b)

Add into html data-ec-action attribute with all purchase attributes data-ec-id, data-ec-affiliation, data-ec-revenue, data-ec-shipping, data-ec-tax and data-ec-products.

Then defined purchase actionField object details in html by attributes:

<body
  data-ec-action="purchase"
  data-ec-purchase-id="779"
  data-ec-purchase-affiliation="Eshop"
  data-ec-purchase-revenue="81.30"
  data-ec-purchase-shipping="3.00"
  data-ec-purchase-tax="13.05"
  data-ec-products="
    [{&quot;id&quot;:&quot;123&quot;,&quot;name&quot;:&quot;Product 1 b&quot;,&quot;category&quot;:&quot;Items&quot;,&quot;url&quot;:&quot;/product-1&quot;,&quot;price&quot;:&quot;10.00&quot;,&quot;quantity&quot;:&quot;14&quot;},
    {&quot;id&quot;:&quot;124&quot;,&quot;name&quot;:&quot;Product 2 b&quot;,&quot;url&quot;:&quot;/product-2&quot;,&quot;price&quot;:&quot;0.00&quot;,&quot;quantity&quot;:&quot;1&quot;},
    {&quot;id&quot;:&quot;125&quot;,&quot;name&quot;:&quot;Product 3 b&quot;,&quot;url&quot;:&quot;/product-3&quot;,&quot;price&quot;:&quot;0.25&quot;,&quot;quantity&quot;:&quot;5&quot;}]"
>

for more information, see example in cart-step-3.html in 'node_modules/@comsultia/enhanced-commerce/dist/cart-step-3.html'

Useful information

  1. you are able to define actions in data-ec-action attribute by:
data-ec-action="step, purchase-prepare"
  • simply seperate actions by ,
  • spaces are trimmed

DEMO

  • in 'node_modules/@comsultia/enhanced-commerce' open '/dist/index.html' in your browser and check browser console with all events logs