Skip to main content

Add custom blocks in product list view

This guide will help you add custom blocks in product list view. Let's say you want to add a banner after every 10 products in the listview. You can do that by using the shopify-custom-collection-response hook.

note

If you are handling the products in product list page, you need to use the same hook to inject the custom blocks. The hook is shopify-custom-products-response. Refer to Add custom blocks in product list page for more details.

Steps​

Let's add a banner after every 10 products in the listview.

1. Modify the product data​

First we need to modify the product data and inject the custom blocks in the response. Let's create a helper.js file and add the following code.

import { appmaker } from '@appmaker-xyz/core';
import { shopifyIdHelper } from '@appmaker-xyz/shopify';

export function activateBlocks() {
appmaker.addFilter('shopify-custom-collection-response',
`plp-blocks`, // namespace
(response, params, dependencies) => {
let ProductList = response?.data?.data?.collection?.products?.edges;
if (!ProductList)
return response;
const collectionId = shopifyIdHelper(response?.data?.data?.collection?.id, true); // get the current collection id
const addToCollection = '4105698563'; // set the collection id where you want to add the banner
if (collectionId === addToCollection) {
const block = {
___appmakercustomblock: {
enabled: true,
block: {
name: 'appmaker/image',
attributes: {
title: 'Banner',
description: 'This is a banner',
url: 'https://cdn.shopify.com/s/files/1/0533/2089/files/placeholder-images-image_large.png?format=webp&v=1530129081',// image url
width: 1440, // image width
height: 593, // image height
appmakerAction: { // action to be performed on click
action: 'OPEN_COLLECTION', // action type
params: {
collectionHandle: 'all', // collection handle
},
},
},
}
},
};
// inject the banner block after every 10 products
list = ProductList.flatMap((product, index) => {
if (index % 10 === 0) {
return [product, block];
}
return product;
});
response.data.data.collection.products.edges = list;
}
return response;
});
}

2. Activate the blocks​

Activate the blocks by calling the activateBlocks function in the index.js file.

import { activateBlocks } from './helper';

export function activate() {
activateBlocks();
}

3. Test the changes​

Now, you can test the changes by running the app in the simulator.

Add custom blocks in product list view

Additional resources​

Let's say you want to add a countdown timer in the product list view. Then you can replace the banner block with the following code.

const block = {
___appmakercustomblock: {
enabled: true,
block: {
name: 'appmaker/count-down-timer',
attributes: {
title: 'Countdown Timer',
description: 'This is a countdown timer',
date: '2023-03-29T12:43:15.708Z',
appmakerAction: {
action: 'OPEN_COLLECTION', // action type
params: {
collectionHandle: 'all', // collection handle
},
},
}
},
},
};

Add custom blocks in product list view