
Il successo di un buon sito di eCommerce è il risultato di ogni miglioramento che quotidianamente, lo scrupoloso gestore del negozio online, mette in pratica per rendere il sito fruibile, efficace, ottimizzato per i motori di ricerca.
Oggi prendiamo in considerazione un aspetto dei prodotti non più disponibili in catalogo, i cosiddetti “Out of stock”. In effetti questo argomento richiederebbe un articolo molto più ampio, soprattutto in ottica SEO del sito.
Riprenderemo questo argomento in modo più approfondito in uno dei prossimi post, ma sappiamo che, in merito ai prodotti esauriti o non più riforniti, è meglio evitare quanto segue:
- rimuovere l’articolo dal catalogo generando un errore 410/404;
- reindirizzare l’articolo esaurito alla homepage;
- evitare di reindirizzare verso prodotti casuali che non sono correlati con il prodotto desiderato (in pratica, evitare di reindirizzare verso un Iphone se si stava cercando un Samsung).
In questo articolo ci occupiamo di mostrare i prodotti esauriti alla fine dell’elenco su Magento 2, lasciando quelli disponibili all’inizio della pagina.
La soluzione seguente è stata pensata per piattaforme di eCommerce Magento 2.
Perché mostrare i prodotti esauriti alla fine della categoria?
Il motivo principale che ci spinge ad adottare questa scelta è quello di evitare al cliente la frustrazione di visualizzare prodotti non disponibili soprattutto quando questi sono tanti.
Lo scopo di ogni bravo venditore online è quello di cercare di mantenere il cliente più tempo possibile sul proprio sito ed evitare che si rivolga altrove quando trova molti dei prodotti di suo interesse non disponibili.
Queste motivazioni sarebbero già sufficienti per applicare la soluzione che stiamo per suggerire, ma se aggiungiamo che in ottica di ottimizzazione SEO il sito ne trae beneficio, non rimane altro che procedere.
Come fare per visualizzare i prodotti “out of stock” alla fine della pagina?
Purtroppo non è possibile mostrare i prodotti esauriti alla fine dell’elenco su Magento 2 tramite un’auspicabile configurazione nel pannello di controllo. Quindi, per ottenere questa funzionalità, dobbiamo armarci di pazienza e realizzare un modulo personalizzato per sovrascrivere l’ordine di visualizzazione standard dei prodotti nella categoria.
Ci sono 2 soluzioni diverse che illustriamo di seguito, la prima è destinata alle piattaforme Magento inferiori alla versione 2.4 e la seconda per quelle dalla 2.4 in poi.
Mettiamoci quindi al lavoro ma non prima di aver effettuato un rassicurante backup di tutto il sito e del database.
Ordinare i prodotti in base alla disponibilità su Magento 2 fino alla 2.3.9
Questa soluzione si differenzia dalla successiva perché fino alla versione 2.3.9 non è obbligatorio utilizzare Elasticsearch per la ricerca a differenza della versione 2.4.
Ovviamente se è stato implementato Elasticsearch anche nelle versioni precedenti la 2.4, questa soluzione potrebbe non funzionare.
Tempo richiesto: 7 minuti
Procediamo con la realizzazione del modulo personalizzato
- creare l’albero delle directory del modulo Magento 2
Creare le cartelle nella directory app/code per costruire l’estensione in una specifica struttura definita come NomeVendor_NomeModulo. In questo caso la struttura sarà Webzone_Outstocklast, dove la prima parte è il nome del vendor (Webzone) e la seconda parte è il nome del modulo (Outstocklast). Quindi l’albero della directory sarà: app/code/Webzone/Outstocklast.
- dichiarare il modulo
Dichiarare il modulo utilizzando il file di configurazione. Durante lo sviluppo del modulo, il file system cerca il file di configurazione del modulo che si trova nella directory “etc” del modulo.
Quindi creare la direcctory etc in app/code/Webzone/Outstocklast, dove inserire il file module.xml con dentro il seguente codice:<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Webzone_Outstocklast" setup_version="1.0.0"></module>
</config> - registrare il modulo creato in Magento 2
Il modulo deve essere registrato nel sistema utilizzando la classe Magento Component Registrar che definisce come individuare il modulo.
Quindi creare il file registration.php nella directory principale del modulo: app/code/Webzone/Outstocklast/ ed inserire questo testo:<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Webzone_Outstocklast',
__DIR__
); - specificare la Dependency Injection
Con questo file denominato “di.xml” si dichiara a Magento che deve tener conto delle implementazioni del modulo che stiamo realizzando per le funzionalità desiderate.
Creare quindi il file di.xml nella directory app/code/Webzone/Outstocklast/etc/ con il seguente codice:<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
<type name="Magento\Catalog\Model\Layer">
<plugin name="webzone_outstocklast_catalog_model_layer" type="Webzone\Outstocklast\Plugin\Catalog\Model\Layer" sortOrder="1000" />
</type>
</config> - creare il file con le implementazioni per la modifica
Ora generiamo il file che contiene la modifica alla funzionalità standard di Magento che stabilisce l’ordine di visualizzazione dei prodotti non disponibili nella categoria. Infatti specifichiamo che i prodotti non disponibili devono essere visualizzati dopo quelli disponibili.
Il file da creare si chiama Layer.php e va inserito nella directory app/code/Webzone/Outstocklast/Plugin/Catalog/Model/, creando prima le directory non esistenti.
Inseriamo questo codice nel file Layer.php<?php
namespace Webzone\Outstocklast\Plugin\Catalog\Model;
/**
* Class Layer
* @package Webzone\Outstocklast\Plugin\Catalog\Model\Layer
*/
class Layer
{
/**
* Sort items that are not salable last
*
* @return \Magento\Catalog\Model\ResourceModel\Product\Collection
*/
public function afterGetProductCollection(
\Magento\Catalog\Model\Layer $subject,
\Magento\Catalog\Model\ResourceModel\Product\Collection $collection
) {
$collection->getSelect()->order('is_salable DESC');
return $collection;
}
}
Notare che nella quartultima riga del codice è impostato l’ordine in modalità “DESC” (discendente), volendo si può impostare al contrario “ASC” (ascendente), di conseguenza i prodotti non disponibili saranno visualizzati all’inizio. - applichiamo il nuovo modulo
Ora bisogna “installare” il modulo tramite i seguenti comandi da inviare tramite linea di comando:
php bin/magento setup:upgrade
php bin/magento setup:di:compile
Verifichiamo se il modulo è abilitato:php bin/magento module:status
Diversamente lo abilitiamo così:php bin/magento module:enable Webzone_Outstocklast
Poi reindicizziamo l’indice e puliamo la cache:php bin/magento indexer:reindex
php bin/magento cache:clean
Una volta verificati i permessi corretti ai file, visualizza una qualsiasi categoria per verificare che i prodotti esauriti siano posizionati alla fine dell’elenco. Se il sistema restituisce un errore, esegui questi comandi:php bin/magento deploy:mode:set developer
php bin/magento deploy:mode:set production
Come ottenere la stessa cosa su Magento 2.4?
Su Magento 2.4 e successivi, la procedura è diversa perché da questa versione Magento utilizza Elasticsearch per la ricerca e la visualizzazione degli articoli nelle pagine di categoria.
Per mostrare i prodotti terminati alla fine dell’elenco su Magento 2.4, installa questo modulo gratuito: https://github.com/tuyennn/magento2-outofstockatlast, nella stessa pagina troverai anche le indicazioni per l’installazione.