Opencart ha l’utilissima (nel mio caso) caratteristica che consente di costruire più di un negozio elettronico con la medesima installazione.
Dal punto di vista del database, esiste l’entità store ogni riga della quale definisce un negozio separato, ognuno con logo, aspetto e catalogo distinti. La differenziazione degli articoli viene poi fatta agganciando le categorie agli store tramite la tabella category_to_store. L’interfaccia di amministrazione consente di gestire separatamente i cataloghi per le diverse aziende.
Le istruzioni per costruire un multi negozio elettronico sono relativamente poche e nemmeno troppo complicate, ma il tralasciare uno stupido slash (“/”) può costare ore di lavoro.
Operazioni da interfaccia di amministrazione
Nella interfaccia di amministrazione di Opencart seguire il menu Sistema > Impostazioni (o System > Settings).
E’ definito sempre un negozio di default, che ha 0 come store_id. Possiamo definirne altri (non c’è limitazione) premendo il pulsante Inserisci, e in ognuno di questi dobbiamo inserire queste informazioni basilari:
- * URL negozio: in questa casella di testo scriviamo l’URL del singolo negozio; meglio se in un dominio a parte o in un dominio almeno di secondo livello. Ad esempio potremmo scrivere http://hifi.esempio.com/ oppure se proprio è qualcosa di completamente separato (ad esempio due clienti distinti) http://www.hifi.com/; per un secondo negozio sceglieremo http://computers.esempio.com/ oppure http://www.computers.com/. Questo campo è obbligatorio (vedi l’asterisco rosso), e vediamo più avanti come va gestito anche il dominio.
Attenzione: lo slash finale (/) è assolutamente obbligatorio (l’avverbio è inutile, ma serve a rendere l’idea del tempo che si può perdere…) pena la redirezione al negozio predefinito!
- Nome negozio: qui consiglio di scrivere un nome possibilmente breve per il negozio: nella tendina “Vai al negozio” dell’interfaccia amministratore si vedrà l’elenco degli store creati e, se il descrittore è troppo lungo, la lista si vedrà male.
- Il resto dei campi compiliamolo a discrezione.
Operazioni su Apache
Ora è necessario agire sull’httpd server che viene invocato quando andiamo a visitare i negozi. Per ora sto allestendo un setup sperimentale in una sola macchina per cui mi arrangio modificando solo alcuni file (quelli di apache e il file hosts), in un ambiente di produzione occorre mettere mano anche ai DNS, se serve.
Io uso Apache 2.2 e per definire due diversi host modifico la configurazione dei VirtualHosts:
- /etc/apache2/apache2.conf delega le configurazione personalizzate ai file sites-enabled/*, per cui creo un nuovo file /etc/apache2/sites-available/opencart che contiene la definizione dei virtual hosts:
<VirtualHost *:80>
DocumentRoot /var/www/opencart/
ServerName negozio1.opencart.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/opencart/
ServerName negozio2.opencart.com
</VirtualHost>
Come si vede, sto puntando alla stessa istanza di opencart, la selezione dei cataloghi è a carico di Opencart in base all’URL digitato dall’utente.
- devo anche creare un link simbolico nella directory sistes-enabled per abilitare il virtual host
$ cd /etc/apache2/conf.d/sites-enabled
$ ln -s ../sites-available/opencart .
Alla fine riavvio Apache
$ sudo apachectl graceful
Come ultima modifica, devo dire al sistema operativo di invocare localhost quando cerco opencart.com (si può scrivere anche un tld di fantasia quando si lavora in locale, tipo opencart.tld):
127.0.0.1 negozio1.opencart.com negozio2.opencart.com
Ora devo splittare i cataloghi nel database: quando ho importato i dati dal gestionale aziendale ho avuto cura di distinguere le categorie e i prodotti in base ad una informazione company_id che ho introdotto nel database di Opencart per non perdere il legame. Ora basta che valorizzi in modo coerente category_to_store per utilizzare questa informazione per il multi store (in realtà non era necessario modificare la base dati per questo motivo, ma ho comunque dovuto aggiungere della complessità a OpenCart a partire da un gestionale che aveva parecchie complicazioni in più).
Commenti recenti