Consulente ecommerce

Professionalità ed esperienza al servizio del tuo E-commerce!

magento

No public Twitter messages.





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:

                  $categoriesList = array(
                  "categoria padre1",
                  "categoria padre1|sottocategoria1",
                  "categoria padre1|sottocategoria2",
                  "categoria padre1|sottocategoria1|sotto_sottocategoria1",
                  );
        

        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:

            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();
            }
        

        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.

            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;
            }
        

        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!

        Altri posts


        Login with Facebook:

        Soluzioni POS (point of sale)

        Parlare di POS (dall'inglese "Point of Sale"), significa fare riferimento ...

        Ottimizzare i propri feed vers

        Se avete molti feed prodotti saprete già che mantenerli ed ...

        Magento Community Edition Vs M

        Quando si decide di far crescere il proprio business e ...

        L'evoluzione di Internet in 10

        Ecco una interessante infografica che mostra come si è evoluto ...

        Misurare le performance del co

        In questo breve post vi mostrerò come misurare le performance ...