«

»

Dic 27

Come configurare Opencart in modalità multi-store

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ù).

 

11 comments

Vai al modulo dei commenti

  1. franco

    molto interessante ma non riesco a capire perché opencart le mail di notifica le invia con problemi di lettere accentate

    1. Marco

      Grazie per la segnalazione.
      L’invio delle mail è effettuato da un client scritto in system/library/mail.php; il charset assunto per default è utf-8, bisognerebbe impostarlo con un valore diverso (il nostro – italiano con euro – è iso-8869-15). Non ho mai provato, quando arriverò al problema ci darò un’occhiata. Ciao.

  2. andrea

    ciao, volevo chiederti se é possibile impostare diversi negozi sullo stesso dominio?? Ci sono differenza particolari se il server dove è ospitato il sito principale è aruba? Ho letto un sacco di commenti negativi su aruba…

    1. Marco

      Ciao,
      sì è possibile dirottando il negozio su sottodomini di terzo livello (negozio1.dominio.com, negozio2.dominio.com). Nel post è spiegato come configurare Apache e Opencart per farlo.
      E’ possibile però che se acquisti un dominio tu non possa configurare Apache autonomamente, come descritto nel post, per crearti i virtual host; in quel caso dovresti chiedere assistenza a loro.
      Sul servizio di Aruba non ti so dire, mai usato. Ciao e thanks for visiting 🙂

      1. andrea

        Grazie per la risposta e anche per l’articolo!!!
        Ed invece sai se è possibile avere più negozi utilizzando sotto cartelle, del tipo:

        miosito.it/store1
        miosito.it/store2

        ??

        1. Marco

          Credo che quello che tu proponi equivalga a due installazioni separate di Opencart. Ogni directory di opencart ha la sua sottostruttura (admin/, catalog/, system/ eccetera).

  3. andrea

    ciao e complimenti per il tuo articolo..

    ti contatto perchè a me non funziona e non capisco il perche..

    Premetto che ho due domini diversi sulle stesso server dedicato (non e’ Aruba).

    http://www.dominio1.it e http://www.dominio2.it

    ho seguito la tua procedura dentro OpenCart (inserendo anche lo / alla fine della URL) ..il DNS dei due domini linkano allo stesso server.. ma apache non mi ridireziona bene il sito.. il sito principale che e’ il http://www.dominio1.it funziona bene.. il secondo http://www.dominio2.it non si vede, mi compare la index.html di PARALLELS PLESK .. probabilmente non ho configurato bene APACHE.

    Forse lo devo configurare cosi?

    DocumentRoot /var/www/shop1/httpdocs/
    ServerName http://www.dominio1.it

    DocumentRoot /var/www/shop1/httpdocs/
    ServerName http://www.dominio2.it

    cioe’ la DocumentRoot deve essere quella del dominio1 ??

    Ti ringrazio in anticipo.

    ciao!

    1. Marco

      Scusa, visto solo ora. Direi di sì, ogni sito deve avete la sua docroot, ma penso tu abbia già risolto. Grazie per la visita.

  4. cristian

    Ciao Marco,

    sono nuovo per quanto riguarda opencart e volevo sapere se fosse possibile costruire un sito con acl(access control list), ovvero:
    Quattro livelli di clienti: consumer, B2B, distributors e agencies
    Prezzi diversi
    Conversione automatica del prezzo FOB
    Sperando in una tua risposta ti ringrazio anticipatamente

    1. Marco

      Puoi raggruppare i clienti in gruppi. Non so se ti possa bastare. Nel profilo del cliente poi è possibile impostare la valuta di preferenza.
      Ciao!

  5. Fabio

    ciao Marco, sto provando a creare un nuovo negozio su un sito diverso ma al di là della parte sistemistica (dominio e apache), non ho capito come far vedere la nuova vetrina.
    Sulla root del nuovo dominio non è presente ovviamente nessun file. Devo copiare parti dello store originale o installare un’altra copia di oc o … cosa?
    grazie in anticipo

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>