Utilizzo di Clerk per mostrare le pagine complete delle categorie
Products:
IMPORTANTE: ** La sostituzione dei prodotti della categoria richiede competenze tecniche e si consiglia di chiedere assistenza al proprio sviluppatore.** ** Si prega di notare che i nostri sviluppatori interni di Clerk.io non sono in grado di eseguire questa operazione per voi.**
Panoramica
Clerk può essere utilizzato per visualizzare tutti i risultati su una pagina di categoria, consentendo un ordinamento intelligente dei risultati e utilizzando Merchandising per un elevato grado di controllo su quali prodotti sono prioritari.
Questo articolo descrive l’uso della nostra API e della libreria Clerk.js come due modi diversi di gestire questo rendering.
Endpoint dell’API
Gli endpoint delle raccomandazioni di categoria funzionano esattamente come quelli della pagina di ricerca. L’unica differenza è che questi endpoint si basano su un ID di categoria anziché su una query di ricerca.
Per questo motivo, possono essere utilizzati per visualizzare tutti i prodotti nelle pagine delle categorie, sostituendo la logica esistente del webshop per il reperimento dei prodotti con l’API di Clerks. Se si utilizza una configurazione API lato server, di solito è possibile mantenere lo stile esistente semplicemente ottenendo i dati dei prodotti da Clerk, mentre il rendering delle immagini avviene tramite il codice del webshop.
Questi sono i due endpoint disponibili:
- recommendations/category/popular
(Classifica degli articoli più venduti - cambia occasionalmente) - recommendations/category/trending
(Classifica dei prodotti che fanno tendenza nelle vendite - cambia spesso)
L’endpoint migliore da utilizzare dipende dal tipo di azienda.
Molti negozi di moda con un inventario che cambia spesso, in genere ottengono il massimo dai prodotti di tendenza. I negozi con cataloghi in cui i clienti tendono ad acquistare più volte gli stessi articoli, come gli integratori o i negozi di alimentari, dovrebbero generalmente utilizzare i bestseller.
Parametri dell’endpoint API
Ecco una ripartizione di ciò che ogni argomento fa quando si effettua una chiamata a un endpoint di categoria
chiave
: La chiave pubblica del negoziolimite
: La quantità di prodotti da restituirecategoria
: L’ID della categoria attualmente sfogliataoffset
: L’indice da cui iniziare l’insieme dei risultati. Utilizzato conlimit
per la paginazione.orderby
: Un attributo per ordinare i risultati. Se non viene inviato, Clerk ordinerà in base agli articoli più venduti.ordine
: Può essereasc
odesc
. Ordina i prodotti in ordine crescente o decrescente.attributi
: Un elenco di attributi che Clerk deve restituire. Utile per le configurazioni veloci in cui tutti i dati dei prodotti sono restituiti da Clerk. Se non è impostato, Clerk restituisce solo gli ID dei prodotti.filtro
: Una stringa che configura Clerk per restituire solo un sottoinsieme di prodotti. Utilizzato con i filtri esistenti nella pagina o con lefacet
di Clerks per consentire ai clienti di restringere i risultati.facets
: Un elenco di attributi da restituire come opzioni di prodotto, che può essere convertito in un filtro quando il visitatore lo seleziona.labels
: L’etichetta o le etichette associate alla pagina della categoria. Usato per identificare le prestazioni in my.clerk.iovisitatore
: L’ID del visitatore attuale che sta navigando
Filtrare i risultati
- Quando si invia
facets
nella richiesta, Clerk restituirà un elenco delle possibili opzioni di filtro per quell’insieme di risultati. Ad esempio, se il prodotto più economico della categoria è €10 e quello più costoso è €500, la fascia di prezzo più bassa potrebbe essere €10-50 e quella più alta €450+ o simili. Una categoria potrebbe avere 10 marche diverse e un’altra solo 3 nelle sfaccettature. - Quando un visitatore seleziona un’opzione, questa deve essere convertita in un filtro che viene inviato nella successiva chiamata API. Ad esempio,
filtro='(prezzo > 10 e prezzo < 100) e marca="Swarovski"'
- Si consiglia di creare un’interfaccia grafica basata sulle sfaccettature di Clerks e di elencarle come opzioni selezionabili, poiché in questo modo si tiene automaticamente traccia delle opzioni disponibili in ciascuna categoria.
- Si può anche utilizzare un’interfaccia grafica di filtro esistente, purché le scelte dei visitatori possano essere convertite in una stringa di filtro
- <x id=“871”/>Per saperne di più sui filtri, leggere qui<x id=“960”/>
Paginazione dei risultati
- I parametri
limit
eoffset
vengono usati insieme per la paginazione limit
controlla la quantità di prodotti da restituire per ogni chiamataoffset
controlla il punto di partenza nell’elenco completo dei risultati.- La prima chiamata dovrebbe avere
offset: 0
, e ogni chiamata successivaoffset: offset + limit
.- Pagina 1:
limite: 60
,offset: 0
- Pagina 2:
limite: 60
,offset: 60
- Pagina 3:
limite: 60
,offset: 120
- … e così via
- Pagina 1:
- La chiave
count
della risposta API contiene la quantità totale di prodotti nella categoria, indipendentemente dallimite
. Può essere usata per calcolare la quantità di pagine dividendocount
conlimit
e arrotondando per eccesso. Es:pagine = ceil(count / limit)
Esempio completo di richiesta e risposta API
Ecco un esempio completo di chiamata e risposta per visualizzare i prodotti su una categoria.
La visualizzazione è configurata:
- Prodotti della categoria con ID 13
- 50 prodotti sulla seconda pagina utilizzando il limite e l’offset di 50
- Prodotti con il tipo “Star Wars” usando i filtri
- Ordinati per prezzo basso-alto utilizzando orderby price con ordine crescente
- Facet per il prezzo e la categoria
// Request
curl --request POST \
--url 'https://api.clerk.io/v2/recommendations/category/popular' \
--header 'accept: application/json' \
--header 'content-type: application/json'
-d '{"key": "Ipkv9tKfxRdpLv3mpMhqxfWGNdqugE0c",
"limit": 50,
"category": 13,
"offset": 50,
"orderby": "price",
"order": "asc",
"attributes": ["id","name","image","price", "url"],
"filter": "type = \"Star Wars\"",
"facets": ["price", "category"]
"labels": ["Category Page Grid - Popular"],
"visitor": "xfgu47fd2"
}'
// Response
{
"status": "ok",
"result": [
27988,
25629,
22482,
26994,
27001,
28098,
22484,
25623,
27746,
28097
],
"count": 11,
"facets": {
"categories": [
{
"type": "unit",
"name": "Home Accessories",
"value": 81,
"count": 1
},
{
"type": "unit",
"name": "Swarovski",
"value": 3436,
"count": 5
},
{
"type": "unit",
"name": "Home Accessories",
"value": 3418,
"count": 5
}
],
"price": [
{
"type": "range",
"name": "50 - 99",
"min": 50,
"max": 99.99,
"count": 1
},
{
"type": "range",
"name": "100 - 149",
"min": 100,
"max": 149.99,
"count": 3
},
{
"type": "range",
"name": "200 - 249",
"min": 200,
"max": 249.99,
"count": 1
},
{
"type": "range",
"name": "300 <",
"min": 299.99,
"max": 383,
"count": 6
}
]
},
"product_data": [
{
"id": 27988,
"image": "https://warstars.com/images/star_wars_tie_fighter_ornament.jpg",
"name": "Swarovski Star Wars Tie Fighter Ornament ",
"price": 76,
"url": "https://warstars.com/products/star_wars_tie_fighter_ornament"
},
{
"id": 25629,
"image": "https://warstars.com/images/swarovski_star_wars_mandalorian_the_child.jpg",
"name": "Swarovski Star Wars Mandalorian, The Child",
"price": 112.5,
"url": "https://warstars.com/products/star_wars_mandalorian_the_child"
},
{
"id": 22482,
"image": "https://warstars.com/images/swarovski_star_wars_master_yoda.jpg",
"name": "Swarovski Star Wars Master Yoda",
"price": 131.52,
"url": "https://warstars.com/products/star_wars_master_yoda"
},
{
"id": 26994,
"image": "https://warstars.com/images/swarovski_star_wars_ewok_wicket.jpg",
"name": "Swarovski Star Wars Ewok Wicket",
"price": 132,
"url": "https://warstars.com/products/star_wars_ewok_wicket"
},
{
"id": 27001,
"image": "https://warstars.com/images/swarovski_star_wars_han_solo.jpg",
"name": "Swarovski Star Wars Han Solo",
"price": 212.5,
"url": "https://warstars.com/products/star_wars_han_solo"
},
{
"id": 28098,
"image": "https://warstars.com/images/swarovski_star_wars_boba_fett.jpg",
"name": "Swarovski Disney Star Wars Boba Fett",
"price": 300,
"url": "https://warstars.com/products/star_wars_boba_fett"
},
{
"id": 22484,
"image": "https://warstars.com/images/swarovski_star_wars_darth_vader.jpg",
"name": "Swarovski Star Wars Darth Vader",
"price": 320,
"url": "https://warstars.com/products/star_wars_darth_vader"
},
{
"id": 25623,
"image": "https://warstars.com/images/swarovski_star_wars_x_wing_starfighter.jpg",
"name": "Swarovski Star Wars X-Wing Starfighter",
"price": 320,
"url": "https://warstars.com/products/star_wars_x_wing_starfighter"
},
{
"id": 27746,
"image": "https://warstars.com/images/swarovski_star_wars_chewbacca.jpg",
"name": "Swarovski Star Wars Chewbacca",
"price": 340,
"url": "https://warstars.com/products/star_wars_chewbacca"
},
{
"id": 28097,
"image": "https://warstars.com/images/swarovski_star_wars_obi_wan_kenobi.jpg",
"name": "Swarovski Disney Star Wars Obi-Wan Kenobi",
"price": 350,
"url": "https://warstars.com/products/star_wars_obi_wan_kenobi"
}
]
}
Utilizzo di Clerk.js
Clerk.js è una libreria che semplifica la chiamata alle API di Clerks, l’applicazione del tracciamento e la gestione dello stile.
- La configurazione funziona in modo molto simile, anche se le chiamate all’API vengono effettuate dal frontend, utilizzando snippet HTML.
- Includendo lo script Clerk.js nell’intestazione, è possibile utilizzare gli snippet direttamente nel frontend.
- Se si utilizzano estensioni o plugin (ad esempio per Magento2 o WooCommerce), probabilmente Clerk.js è già incluso.
- Clerk.js analizza il sito web alla ricerca di qualsiasi snippet con la classe
clerk
ed effettua chiamate API utilizzando i parametridata-
. - Lo styling può essere fatto con il linguaggio di template Liquid, all’interno dello snippet
- Clerk.js può gestire la paginazione senza ulteriore codifica, caricando più risultati sulla pagina al clic di un pulsante, utilizzando questa funzione:
Clerk('content', '#SNIPPET_ID', 'more', LIMIT);
- L’HTML dei facet viene generato configurando lo snippet con i facet, le loro traduzioni e un blocco HTML di destinazione in cui inserirli. Per saperne di più sulle sfaccettature di Clerk.js, cliccare qui
Esempio di snippet completo:
<div id="clerk-category-filters"></div>
<span
id="clerk-category-products"
class="clerk"
data-category="113"
data-facets-target="#clerk-category-filters"
data-facets-attributes='["price","categories"]'
data-facets-titles='{"price": "Pricing", "categories": "Collections", "brand": "Vendor"}'
data-facets-price-prepend="€"
data-facets-in-url="true"
data-facets-view-more-text="View More"
data-facets-searchbox-text="Search for ">
<div class="product-search-result-list">
{% for product in products %}
<div class="product">
<h2 class="product-name">{{ product.name }}</h2>
<img src="{{ product.image }}" title="{{ product.name }}" />
<div class="price">${{ product.price | money }}</div>
<a href="{{ product.url }}">Buy Now</a>
</div>
{% endfor %}
{% if count > products.length %}
<div class="clerk-load-more-button"
onclick="Clerk('content', '#clerk-category-products', 'more', 60);">
Show More Results
</div>
{% endif %}
</div>
</span>