Categorie
Blog

Carrelli abbandonati: ecco i trucchi per evitarli!

Il  carrelli abbandonati sono un problema che riguarda il presente ed il dato che più preoccupa è che  la frequenza con la quale i carrelli vengono abbandonati sta crescendo di anno in anno.

Ecco a voi, in forma di 2 infografiche, ovvero immagini utili assieme a dati e testo, alcuni consigli utili per  abbassare la frequenza con la quale i vostri clienti abbandonano i carrelli sugli e-commerce:

Categorie
Blog

Corsi Magento – Formazione e-commerce Magento

Tutti coloro che lavorano sui negozi online, sia che essi siano degli amministratori, sia che siano dei grafici o che sviluppino la piattaforma, si sono fatti almeno una volta nella loro carriera questa domanda:

Spendere del denaro in un corso di formazione su ecommerce è davvero utile?

Ho passato vari mesi della mia vita a pormi questa domanda nel mio passato fino a che, un giorno, ho avuto la fortuna di frequentare un corso online Magento!

Posso dire che tutte le ore spese davanti al video corso sono state spese al meglio, e che rispenderei tutti i soldi di nuovo per poter migliorare le mie conoscenze su Magento!

Ma quali sono i corsi che e’ possibile frequentare e che hanno come argomento la piattaforma e-commerce Magento?

Fondamentalmente, senza contare il grado di approfondimento e difficoltà, che possono essere infinite, posso dire che su Magento distinguiamo 2 tipologie di corsi di formazione:

Corsi Base

  • Corsi di amministratore di piattaforma magento
  • Corsi di programmazione backend (sviluppo e creazione estensioni)
  • Corsi di programmazione frontend (sviluppo e creazione template grafici)

Corsi Avanzati

  • Corso avanzato di programmazione e sviluppo moduli
  • Corso avanzato di programmazione frontend
  • Corso ottimizzazione SEO interna sull’ecommerce
  • Corso di usabilità, ovvero essere in grado di capire quali sono i comportamenti degli utenti sul proprio al fine di migliorare le vendite

Le tipologie dei corsi che vengono offerti in questi campi sono molte, ma questi sopra elencanti sono la base che ogni Web Agency, ogni Azienda, programmatore o consulente dovrebbe frequentare prima di offrire il proprio servizio.

Approfondire uno di questi aspetti, poi, e se possibile diventarne un esperto è quello che fa diventare un programmatore un ottimo consulente e un grafico un esperto di usabilità.

Questo è un piccolo sommario che riassume, in breve, i vari aspetti che non devono essere trascurati durante il percorso di gestione e/o creazione di un ecommerce.

Se hai bisogno di maggiori informazioni sui corsi, o se ne vuoi crearne uno ad hoc per la tua azienda non esitare a contattarmi!

Categorie
Blog

La fattura e scontrino sono obbligatori nell’e-commerce?

Ciao a tutti, tocchiamo oggi un argomento assai delicato, un argomento del quale tutti coloro che vivono il mondo della vendita online parlano, ma che, purtroppo, rimane oscuro, o almeno sconosciuto alla gran parte del pubblico.
L’argomento che tratteremo è quello della fatturazione, ovvero l’emissione del documento fiscale relativo ad ogni vendita online.

La domanda fatidica è la seguente: E’ obbligatorio emettere fattura (o scontrino fiscale) per ogni vendita che passa attraverso un e-commerce?
Da consulente e programmatore di molti e-commerce, posso dire che ho visto il tutto ed il contrario di tutto: negozi che richiedono la fattura obbligatoria, negozi online che emettono scontrino, ed ecommerce che non la emettono, insomma di tutto e di più. La cosa certa è che la persona più indicata per queste cose è l’agenzia delle entrate oppure il vostro commercialista. Dal mio punto di vista però, ovvero da quello di un architetto di e-commerce, potete prendere spunto per capire quale strada seguire, ed buttiamoci, anche come stanno realmente le cose.

La risposta alla domanda è “NO”, ovvero non è obbligatorio emettere fattura se il sito e-commerce è di tipo indiretto (che differisce dalla vendita di tipo diretta). Per vendita elettronica indiretta (o comunemente e-commerce indiretto) si intende una transazione telematica che avviene tramite l’e-commerce alla quale segue una spedizione di merce fisica (beni o materiali fisici); quindi “indiretta” appunto perchè all’acquisto segue una spedizione tramite corriere. Una transazione diretta invece può essere l’acquisto di un servizio, un software, o dei contenuti scaricabili.

Come riportato sul sito dell’AICEL (associazione italiana commercio elettronico), le vendite online sono riconducibili alle vendite per corrispondenza e quindi senza obbligo di fattura come previsto nell’articolo 22 del d.P.R. n. 633 del 1972, e senza obbligo di emissione di scontrino fiscale come previsto nell’articolo 2, lettera oo), del d.P.R. 21 dicembre 1996, n. 696.

Questo significa che la spedizione di merce senza documenti fiscali allegati è consentita.

Come funziona per la lotta all’evasione fiscale nei negozi online?
Il proprietario del negozio online è tenuto a tenere traccia delle transazioni (che essendo online sono tracciabili e riconducibili, vedi modalità di pagamento con carta di credito, bonifico) in un registro i dati di tutti gli acquisti/transazioni effettuate (registro corrispettivi – previsto dall’ articolo 24 del d.P.R. n. 633 del 1972).
La fonte di questo articolo è il sito AICEL (http://www.aicel.info/notizie/)

Categorie
Blog

Recuperare il valore dell’etichetta admin di un attributo prodotto

Questo post sarà brevissimo ma risolverà molti problemi e mal di testa a tutti coloro che lavorano su Magento.

Capita spesso di avere la necessità di recuperare il valore di un attributo di un prodotto. Come tutti sanno ogni attributo ha 2 valori quando è associato ad un prodotto: il valore admin e il valore della vista (che è la sua traduzione per quella lingua e/o vista).

Di seguito il metodo per recuperare entrambi i valori (nell’esempio si recupera il valore dell’attributo Manufacturer):

1) Recuperare l’etichetta admin:
[sourcecode language=”php”]

$curProduct = Mage::getModel("catalog/product")->load($_product->getId());
$manufacturerAdminLabel = null;
$_attribute= $curProduct->getResource()->getAttribute("manufacturer");
$_options= $_attribute->getSource()->getAllOptions(true, true);
foreach($_options as $option){
if ($option[‘value’] == $curProduct->getData("manufacturer")){
$manufacturerAdminLabel = $option["label"];
Mage::log($manufacturerAdminLabel);
}
}

[/sourcecode]

2) Recuperare l’etichetta della vista corrente:
[sourcecode language=”php”]

$curProduct->getAttributeText("manufacturer");

[/sourcecode]

Categorie
Blog

Fedeltà clienti – Dare ai clienti una ragione di tornare nel tuo ecommerce

Il seguente post parla della fedeltà clienti, ovvero di quel senso di fiducia che si instaura tra il cliente ed il venditore che fa si che l’utente ritorni ad acquistare, si fidi dei consigli del negoziante e che reagisca a tutti gli stimoli che questo gli propone, come ad esempio newsletter, codici promozionali o promozioni del momento.
Tutto si gioca nel fatto che l’utente ritorni sul’ecommerce ad acquistare; chiaramente il fattore principale per i quale i clienti tornano sono il prezzo, la varietà degli articoli e la loro qualità. Non possiamo però trascurare il fatto che a parità di prezzo e qualità ci possono essere dei metodi che riescano a convincere il cliente a preferire il nostro sito rispetto a quello di un rivale: ecco che entrano in gioco i metodi di fidelizzazione dei clienti.

Oggi voglio parlarvi di una ottima estensione di fidelizzazione clienti per magento; l’estensione della quale vi sto parlando si chiama Sweet Tooth e permette di impostare una infinità di regole/azioni per fare in modo che il cliente torni sul vostro sito.

La domanda che mi sono fatto subito è stata: in che modo questa estensione riesce a fare ritornare il cliente sul mio sito?

La risposta è questa: Attraverso un insieme di regole/azioni ( che l’amministratore del sito può impostare) i clienti possono guadagnare e spendere punti nel sito. Si, funziona proprio come le famose carte fedeltà dei grandi magazzini, ad una azione buona corrisponde un guadagno di punti che possono essere rispesi o regalati.

La bellezza di questa estensione è proprio la numerosa gamma di azioni che si possono impostare per rendere partecipe l’utente sul sito e fargli guadagnare punti; ecco una lista di azioni che è possibile impostare per fare guadagnare punti agli utenti:

  • Login utente
  • Scrivere una recensione
  • Votare un prodotto
  • Rispondere ad un sondaggio
  • Inviare prodotti agli amici
  • Iscriversi alla newsletter
  • Inserire tag ai prodotti
  • Promuovere il sito agli amici
  • Comprare certi prodotti sul sito

Tutte le azioni precedenti fanno guadagnare punti. I punti possono poi essere spesi, regalati ad amici, o sottratti agli acquisti per avere degli sconti.

Tutte le regole dell’amministrazione funzionano attraverso il sistema delle promozioni, quindi tutte le regole che vengono solitamente applicate per le promozioni di catalogo e carrello possono a sua volta essere applicate per i punti (ex: 100 punti a tutte le t-shirt con taglia S, quindi regola di punti su un attributo dei prodotti).

Veniamo quindi alle conclusioni: come ogni estensione complessa Sweet Tooth ha dei pro e contro:

Contro: meccanismo di impostazione regole punti non semplice, si deve essere abbastanza esperti. L’installazione su template non standard comporta alcune modifiche grafiche per rendere l’estensione al 100% compatibile

Pro: è la marcia in più per di un ecommerce. Non deve essere l’unica arma di marketing, ma associata in maniera corretta a newsletter, promozioni e social può essere una soluzione assolutamente vincente.

Voto: 8

Ecco uno screenshot del frontend:


Categorie
Blog

Creare le categorie in modo automatico

Ciao a tutti.
in questo articolo vi mostrerò come creare una categoria prodotto all’interno di magento con del semplice codice php. Come ogni modifica ed estensione iniziate creando un modulo pulito in modo da contenere un Helper che potrete richiamare in qualunque modo.
Le domande che mi sono posto prima di creare questo codice di inserimento categorie sono le seguenti:

    Come si fa a creare le categorie con il codice magento?

      “Solitamente” in che modo i clienti mi forniscono la lista delle categorie?

        Sembrerà strano, ma ho trovato una grande difficoltà a rispondere alla seconda domanda; questo perchè ogni cliente fornisce le categorie in un modo “unico”: chi le fornisce assieme ai prodotti, chi le fornisce in un excel, chi le fornisce in modo sbagliato e chi non le fornisce.

        Ho pensato quindi di fare un po’ di chiarezza e di impostare delle regole.

        La prima regola è stabilire il formato delle nostre categorie in input.

        Il formato sarà il seguente:

        • un array di stringhe ognuna delle quali rappresenta una categoria
        • ogni stringa rappresenta il path di una categoria
        • la divisione tra padre e figlio (relazione tra categorie) viene fatta attraverso un carattere separatore, in questo caso “|”

        Faccio un esempio di 4 categorie:

        [sourcecode language=”php”]
        $categoriesList = array(
        "categoria padre1",
        "categoria padre1|sottocategoria1",
        "categoria padre1|sottocategoria2",
        "categoria padre1|sottocategoria1|sotto_sottocategoria1",
        );
        [/sourcecode]

        Questo array è l’array delle nostre future categorie nel nostro ecommerce. Come potete notare il formato è molto semplice, è un elenco che stabilisce le relazioni tra categorie padri e figli.

        Passiamo adesso al codice che inserisce una singola categoria:

        [sourcecode language=”php”]
        public function createCategory($name, $parentId) {
        Mage::log("createCategory method ".$name."-".$parentId);
        $category = Mage::getModel(‘catalog/category’);
        $parentId_load = $parentId;
        //imposta il tuo corretto default store id
        $category->setStoreId(0);
        if ($parentId == NULL)
        $parentId_load = Mage::app()->getStore(1)->getRootCategoryId();
        $parentCategory = Mage::getModel(‘catalog/category’)->load($parentId_load);
        //Controllo se la categoria esiste
        $subcats = $parentCategory->getAllChildren();
        $subcats_array = array();
        if ($subcats != "") {
        $subcats_array = explode(",", $subcats); $subcats = $parentCategory->getAllChildren();
        }
        foreach ($subcats_array as $_subcat) {
        if ($name == Mage::getModel(‘catalog/category’)->load($_subcat)->getName()) {
        return $_subcat;
        }
        }

        $category->setParentId($parentId_load);
        $category->setPath($parentCategory->getPath());
        $category->setName($name);
        $category->setIsActive(1);
        $category->setDysplayMode("PRODUCTS");
        $category->setIsAnchor(1);
        $category->setPosition(100);
        $category->save();
        return $category->getId();
        }
        [/sourcecode]

        Questo metodo crea una categoria se non esiste e ritorna l’id in ogni caso. Come parametri prende il nome della categoria ex: “category1” (nome alcun separatore “|”, l’array precedente lo utilizzeremo in seguito) ed l’id della sua categoria padre (se l’id del padre è nullo allora è una categoria di primo livello).

        Adesso che sappiamo creare una categoria andiamo a vedere come possiamo utilizzare l’array di categorie per crearle tutte assieme in una volta.
        Il metodo si chiamerà createCategories e prenderà in input l’array $categoriesList creato in precedenza.

        [sourcecode language=”php”]
        public function createCategories($categoriesList) {
        Mage::log("CreateCategories method");
        $lastCategory = null;
        foreach ($categoriesList as $category) {
        // il parametro 4 fa si che sia abbiano fino ad un massimo di 3 sottocategorie
        $cat_array = explode(Static_Data::$category_char_separator, $category, 4);
        if (isset($cat_array[0])) {
        $root_cat = trim($cat_array[0]);
        } else {
        $root_cat = null;
        }

        if (isset($cat_array[1])) {
        $sub_cat = trim($cat_array[1]);
        } else {
        $sub_cat = null;
        }

        if (isset($cat_array[2])) {
        $sub_sub_cat = trim($cat_array[2]);
        } else {
        $sub_sub_cat = null;
        }

        if (isset($cat_array[3])) {
        $sub_sub_sub_cat = trim($cat_array[3]);
        } else {
        $sub_sub_sub_cat = null;
        }

        if ($root_cat != null && $root_cat != "") {
        $root_cat_id = $this->createCategory($root_cat, null);
        $lastCategory = $root_cat_id;
        } else {
        echo "No root category at line: " . $category;
        continue;
        }

        if ($sub_cat != null && $sub_cat != "") {
        $sub_cat_id = $this->createCategory($sub_cat, $root_cat_id);
        $lastCategory = $sub_cat_id;
        } else {
        continue;
        }

        if ($sub_sub_cat != null && $sub_sub_cat != "") {
        $sub_sub_cat_id = $this->createCategory($sub_sub_cat, $sub_cat_id);
        $lastCategory = $sub_sub_cat_id;
        } else {
        continue;
        }

        if ($sub_sub_sub_cat != null && $sub_sub_sub_cat != "") {
        $sub_sub_sub_cat_id = $this->createCategory($sub_sub_sub_cat, $sub_sub_cat_id);
        $lastCategory = $sub_sub_sub_cat_id;
        } else {
        continue;
        }
        }
        return $lastCategory;
        }
        [/sourcecode]

        Questo è tutto, il metodo prende l’array, fa un semplice parsing delle categorie e le inserisce.
        Il metodo è stato testato in un magento 1.5.1.
        Nel prossimo articolo vi mostrerò come riuscire a passa un file csv dal backend di magento a questo nostro metodo in modo da creare un importatore custom di categorie.
        Alla prossima!

        Categorie
        Blog

        Creare uno script cron con Magento

        Tra tutte le attività di programmazione ci sono quelli che devono essere ripetute ad intervalli regolari. Una di queste può essere l’invio di email o newsletter, la pulizia dei log, la generazoine di sitemap e molto altro.
        Come si fa in Magento a creare uno script che esegue ripetutamente (ad intervalli regolari) una funziona php?

        Come in tutti i sistemi unix la risposta è CRON.
        Cron è un programma che permette di eseguire ad intervalli regolari altri programmi, ma passiamo immediatamente al nostro magento.
        Per prima cosa è necessario creare un modulo con la seguente configurazione:

        [sourcecode language=”xml”]
        <?xml version="1.0"?>
        <config>
        <modules>
        <IacopoPecchi_Varie>
        <version>0.1.0</version>
        </IacopoPecchi_Varie>
        </modules>
        <global>
        <models>
        <varie>
        <class>IacopoPecchi_Varie_Model</class>
        </varie>
        </models>
        </global>
        <crontab>
        <jobs>
        <buoni_send>
        <schedule>
        <cron_expr>* * * * *</cron_expr>
        </schedule>
        <run>
        <model>varie/observer::funzioneDaRchiamare</model>
        </run>
        </buoni_send>
        </jobs>
        </crontab>
        </config>
        [/sourcecode]

        Come vedere non c’è nulla di particolare se non le impostazoini del model e quelle del cron.
        Particolare importanza va data alla riga
        [sourcecode language=”xml”]
        <cron_expr>* * * * *</cron_expr>
        [/sourcecode]
        che sta ad indicare la frequenza con la quale richiamare lo script php, o meglio la funzione funzioneDaRchiamare

        Gli asterischi hanno un valore posizionale e rispettivamente significano secondi, ore, giorni, settimane, mesi ed anni. Questa tabella presa da wikipedia spiega meglio come impostare il periodo:

        Entry Description Equivalent To
        @yearly (or @annually) Run once a year, midnight, Jan. 1st 0 0 1 1 *
        @monthly Run once a month, midnight, first of month 0 0 1 * *
        @weekly Run once a week, midnight on Sunday 0 0 * * 0
        @daily Run once a day, midnight 0 0 * * *
        @hourly Run once an hour, beginning of hour 0 * * * *
        @reboot Run at startup

        Fatto questo sara necessario solamente creare il file Observer.php all’interno della directory Model del nostro modulo con il seguente contenuto:
        [sourcecode language=”php”]
        <?php
        class IacopoPecchi_Varie_Model_Observer
        {

        public function funzioneDaRchiamare()
        {
        Mage::log("ciao");
        }

        }
        ?>
        [/sourcecode]

        Magento in questo modo è predisposto per eseguire script ad intervalli di tempo previssati. L’ultima cosa da fare è quella di richiamare il file /path_to_magento/cron.php ad intervalli regolari (tanto frenquenti quanto quelli impostati nel modulo) per fare comunicare il cron di magento con il cron di sistema linux.
        Per i dettagli su come inserire uno script cron nei sistemi unix/linux potete leggere qua su wikipedia: Crontab

        Categorie
        Blog

        Ottenere la lista di prodotti di un bundle

        Un prodotto bundle, è un prodotto composto da un insieme di altri prodotti. Capita a volte di volere stampare la lista dei prodotti all’interno dei prodotti bundle per costruire delle promozioni, delle liste di prodotti, o solamente per visualizzare al meglio il prodotto bundle.
        Per ottenere la lista di prodotti di cui un bundle è composto è possibile utilizzare il seguente codice:
        [sourcecode language=”php”]
        //$bundle_product è il nostro prodotto bundle

        $selectionCollection = $bundle_product->getTypeInstance(true)->getSelectionsCollection(
        $bundle_product->getTypeInstance(true)->getOptionsIds($bundle_product), $bundle_product
        );

        $bundled_items = array();
        foreach($selectionCollection as $option)
        {
        $bundled_items[] = $option->product_id;
        }

        var_dump($bundled_items);
        [/sourcecode]

        Categorie
        Blog

        Impostare un layout personalizzato per una categoria

        Capita molto spesso di dover impostare un template personalizzato solamente per un categoria di prodotti.

        Tutti i prodotti della categoria che vogliamo mostrare in modo differente possono avere delle esigenze particolari, tipo una grafica ad-hoc, dei blocchi particolari e chi più ne ha più ne metta.

        Quale è la soluzione che ci viene subito alla mente?

        Creare un nuovo template uguale al precedente ed customizzare il list.phtml ed il view.phtml inserendo li tutte le modifiche che vogliamo. Questa soluzione funziona ma non è delle più corrette perchè in futuro dovremo portarci tutte le modifiche in due posti, il template originale e quello della nuova categoria.

        La soluzione corretta è quindi quella copiare il file
        [sourcecode language=”php”]
        /app/design/frontend/default/il-tuo-tema/template/page/list.phtml

        nel nuovo file

        /app/design/frontend/default/il-tuo-tema/template/page/list-new.phtml
        [/sourcecode]

        Poi accediamo al magento, nell’amministrazione: Catalogo > Gestione Categorie, clicchiamo sulla categoria della quale vogliamo impostare il nuovo template, andiamo nel tab Design Personalizzato, selezioniamo il tema sotto il quale abbiamo creato il list-new.phtml e dentro Custom Layout Update inseriamo il seguente codice:

        [sourcecode language=”xml”]
        <reference name="product_list">
        <action method="setTemplate">
        <template>catalog/product/list-new.phtml</template>
        </action>
        </reference>
        [/sourcecode]

        Questo è tutto. La nostra categoria avrà un nuovo design senza dover creare un nuovo tema!

        Categorie
        Blog

        Modificare il numero di fattura e la generazione dei numeri di fattura

        Come in tutte le attività imprenditoriali, prima o poi, chi realizza un e-commerce deve scontrarsi nella fatturazione, ovvero la generazione dei documenti fiscali che provano le vendite/acquisti.

        Capita che ogni cliente abbia una propria storia e delle personali esigenze, e di conseguenza capita che ogni cliente mi chieda delle personalizzazioni nella creazione di fatture ed in particolare nel numero di queste (ecco un po’ di esempi):

        • C’è chi vuole che il numero di fattura parta da un determinato numero
        • C’è colui che vuole partire da zero
        • C’è il cliente che vuole poter saltare alcuni numeri
        • C’è chi vuole inserire il numero della prossima fattura da poter generare

        Come è possibile che si debba rispondere a tutte queste esigenze ben diverse?

        La soluzione è conoscere come vengono generati i numeri di fattura a partire dal database di magento.

        I numeri di fattura vengono salvati nella tabella `eav_entity_store`, precisamente nel campo `increment_last_id` che appunto indica l’ultimo numero utilizzato per la fattura, ordine, nota di credito e spedzione.
        Per capire quale riga andare a modificare basterà controllare l’id della colonna entity_type_id ,che nel mio caso è 6 ed indica la fattura (invoice).
        Modificando il campo increment_last_id andremo a modificare il prossimo numero di fattura che verrà generato.
        Di default Magento crea un numero di fattura per ogni store, del tipo: tutte le fattura dello store con id 1 hanno come prefisso il numreo 1, quelle dello store due utilizza 2 come prefisso. E’ cosa buona solitamente andare ad unificare queste numerazioni diverse. Per farlo dovremo andare a modificare la tabella `eav_entity_type` , ed esattamente il campo increment_per_store impostandolo a 0 da 1 che è si default.
        Lo zero indica che la numerazione delle fattura è unica per tutti gli store!

        Per qualunque domanda o chiarimento contattatemi!