Dopo aver visto, attraverso diversi tutorial, come sfruttare a pieno le funzionalità già incluse nel nostro e-commerce Magento, vediamo ora quali sono gli strumenti messi a disposizione dall’applicazione per estendere le sue funzionalità standard. Impareremo a realizzare un modulo per aggiungere un attributo alle categorie del nostro negozio online.
Gli attributi in Magento
Aggiungere attributi ai prodotti del nostro catalogo è una pratica usuale per chi lavora con Magento, e tale pratica è agevolata da un’apposita interfaccia del back-office del nostro ecommerce.

Sfortunatamente, attraverso tale interfaccia, è possibile gestire solamente gli attributi dei prodotti. Nel caso si voglia aggiungere un attributo ad altri elementi (es. catagorie, clienti…) l’unica strada percorribile è quella della realizzazione di un modulo (o estensione) che con delle semplici righe di codice si occupi della creazione di tale attributo.
La struttura del nostro modulo
Il nostro modulo sarà composto da una serie di files. Di seguito l’elenco di quelli che andremo a creare.
- app/etc/modules/Artera_CategoriesAttributes.xml
- app/code/local/Artera/CategoriesAttributes/etc/config.xml
- app/code/local/Artera/CategoriesAttributes/sql/ categoriesattributes_setup/mysql4-install-0.1.0.php
Vediamo ora passo per passo il contenuto dei singoli file.
app/etc/modules/Artera_CategoriesAttributes.xml
<?xml version="1.0"?>
<config>
<modules>
<Artera_CategoriesAttributes>
<active>true</active>
<codePool>local</codePool>
</Artera_CategoriesAttributes>
</modules>
</config>
Obiettivo di questo file è quello di “comunicare” a Magento la presenza del nostro nuovo modulo. In particolare si precisa che sarà contenuto nel “codepool” “local“, che il suo nome è “CategoriesAttributes” e che è inserito all’interno del Namespace “Artera“.
app/code/local/Artera/CategoriesAttributes/etc/config.xml
<?xml version="1.0"?> <config> <modules> <Artera_CategoriesAttributes> <version>0.1.0</version> </Artera_CategoriesAttributes> </modules> <global> <resources> <categoriesattributes_setup> <setup> <module>Artera_CategoriesAttributes</module> <class>Mage_Catalog_Model_Resource_Eav_Mysql4_Setup</class> </setup> <connection> <use>core_setup</use> </connection> </categoriesattributes_setup> </resources> </global> <adminhtml> <events> <catalog_category_prepare_save> <observers> <categoriesattributes> <class>categoriesattributes/observer</class> <method>categorySave</method> </categoriesattributes> </observers> </catalog_category_prepare_save> </events> </adminhtml> </config>
“config.xml” è il file di configurazione del nostro modulo attraverso il quale andremo a informare il core di Magento, sulla presenza di un file contenente le istruzioni per la creazione dell’attributo in questione. Fare molta attenzione: qual’ora avessimo in precedenza modificato (nel file descritto sopra) il nome del modulo (“CategoriesAttributes”) e/o il namespace (“Artera”), tali modifiche vanno apportate anche in questo file.
app/code/local/Artera/CategoriesAttributes/sql/ categoriesattributes_setup/mysql4-install-0.1.0.php
$installer = $this;
$installer->startSetup();
$installer->addAttribute('catalog_category', 'artera_categoriesattributes_mioattributo', array(
'type' => 'decimal',
'backend' => '',
'frontend' => '',
'label' => 'Nome del mio attributo',
'input' => 'text',
'class' => '',
'source' => '',
'global' => 0,
'visible' => 1,
'required' => 0,
'user_defined' => 0,
'default' => '',
'searchable' => 0,
'filterable' => 0,
'comparable' => 0,
'visible_on_front' => 0,
'unique' => 0,
'position' => 1,
));
$installer->endSetup();
Ed ecco finalmente il file con il codice per la creazione dell’attributo. In questo file andremo a definire che tale attributo sarà un attributo di categoria (“‘catalog_category‘”), il suo codice identificativo sarà “artera_categoriesattributes_mioattributo” e l’etichetta del campo mostrato nel back-office sarà “Nome del mio attributo“.
Ora che abbiamo preparato correttamente tutti i file, non ci resta che vedere il nostro modulo all’opera.
Colleghiamoci alla lista delle categorie del nostro store (dal menu “Catalogo“, clicchiamo “Gestione Categorie“). Troveremo il nostro nuovo attributo, come illustrato nell’immagine seguente:

Come disattivare il modulo
Qual’ora volessimo disattivare il modulo appena creato, sarà sufficiente collegarsi nella sezione “Avanzato” dal back-end del nostro negozio (Dal menù “Sistema“, selezioniamo la voce “Configurazione“. Verso il fondo del menù laterale di sinistra, troveremo tale sezione). Come illustrato in figura:

in questa sezione troviamo la lista di tutti i moduli installati nel nostro e-commerce, con la possibilità di attivarli o disattivarli.
Come utilizzare l’attributo
Vediamo infine come recuperare il valore del nuovo attributo che abbiamo creato. Ipotizzando di voler stampare a video, all’interno della lista dei prodotti di una categoria (template catalog/category/view.phtml), il valore dell’attributo appena creato, sarà sufficiente inserire queste semplici righe di codice.
$_category->getData("artera_categoriesattributes_mioattributo");




Ciao,
complimenti per l’articolo!
Ho usato il modulo in una vecchia installazione di Magento e funzionava perfettamente. Reinstallato Magento per un nuovo progetto (stesso hosting, stesso dominio, stessa versione di Magento) ma non mi visualizza l’attributo nè sulla finestra di Gestione Categorie nè lo ha creato nel db mentre riconosce il modulo nella sezione Avanzate.
Da cosa potrebbe dipendere?
Ciao,
molto curiosa come cosa. Ti dico i tentativi che farei io per capire cosa è andato storto:
- aggiornare cache/indici
- verificare la presenza, nella tabella “core_resource”, della voce “categoriesattributes_setup”. In caso affermativo cancellerei tale voce (fai un bel back-up del database per sicurezza) in modo da far ripetere l’installazione del modulo a Magento.
- Attivare in sistema->configurazione->avanzato->sviluppatore la voce “impostazioni di log” e provare a vedere se trovi qualche informazione utile nel file “exception.log” (il file viene compilato solo in caso di eccezioni, quindi potresti anche trovarlo vuoto)
Spero che almeno uno di questi tentativi possa risolverti il problema.
Ciao
Ciao, grazie mille per la risposta intanto!
Purtroppo nel frattempo ho fatto l’ennesima reinstallazione di Magento, cosa che è alquanto normale quando si lavora ad un progetto. Finora almeno 3 o 4 installazioni minime per ogni progetto ci sono volute. Comunque una volta disinstallato tutto funziona, almeno per ora.
Posso però risponderti al primo punto confermandoti che la causa non dipende nè dalla cache (disabilitate tutte) nè dagli indici (li avevo già reindicizzati).
Una domanda relativa al secondo punto: se ho ben capito cancellando quella voce viene ricaricato il file php giusto del modulo?
Ciao,
viene eseguito di nuovo il codice di installazione dell’attributo contenuto in “app/code/local/Artera/CategoriesAttributes/sql/categoriesattributes_setup/mysql4-install-0.1.0.php”. Ti ho consigliato di provare questa strada solo perchè dicevi di non vedere presente il nuovo attributo neanche nel database. Infatti tale operazione ti darebbe errore nel caso il nuovo attributo fosse già presente nel database.
ciao
Grazie mille per l’aiuto,
un’ultima domanda e non ti disturbo più!
Sto lavorando ad un import delle categorie attraverso CSV e sui campi tradizionali non ci sono problemi, riesco ad importarli tranquillamente. Il problema si pone però con gli attributi che ho aggiunto io utilizzando questo modulo.
Per salvare i campi tradizionali importati faccio qualcosa di questo genere:
$cat = Mage::getModel(‘catalog/category’)
->setStoreId($store->getId())
->setPath($path)
->setName($catName)
->setIsActive(1)
->setIsAnchor(1)
->setDisplayMode($dispMode)
->save();
Vorrei aggiungere un valore anche al nuovo campo ma, finora, senza successo. Prima del metodo save() ho provato ad utilizzare il metodo:
setAttributeDefaultValue(‘nome_campo’,'valore’);
ma non sono neppure sicuro che sia il metodo giusto.
Esiste un metodo per agire anche sugli attributi non standard?
Ciao, hai provato con ->setNomeCampo(‘valore) ?
La verità??
E’ la prima cosa che ho fatto ma non l’ho messa nel commento perchè pensavo fosse una scemenza!
Cmq si ho provato ma non funziona purtroppo.
No dai, non era una scemenza .-)
Di che tipo è l’attributo? E’ per caso di tipo “dropdown” ?
Ciao
No no! E’ un semplice campo text.
Per capirci, le cose che ho cambiato rispetto a questo articolo sono il nome, il type e la label che sono diventate:
nome: ‘adhoc_category’
type: ‘text’
label: ‘Adhoc Category’
Ho provato a salvare il dato con:
setAdhocCategory(‘AAAAA’)
ma purtroppo niente.
Aggiungo una cosa sempre piu strana.
Se per esempio provo ad aggiungere la Url Key funzionano entrambi i metodi:
- setUrlKey(‘valore’)
- setData(‘url_key’, ‘valore’)
mentre se provo ad aggiungere la descrizione non funziona nemmeno uno dei due metodi:
- setDescription(‘valore’)
- setData(‘description’,'valore’)
quindi suppongo non sia un problema dell’attributo bensì di qualcos altro. Ma da cosa?
Mi rispondo da solo avendo risolto il problema, nella speranza che possa essere utile a voi o a qualcun altro.
In pratica alcuni campi non li fa mettere, non so perchè, durante la creazione della Categoria. Una volta salvata, basta ricaricare la categoria tramite l’ID e fare tutte le aggiunte di cui si ha bisogno.
In questo caso funzionano tutti i metodi, setDescription, setNomeCampo, ecc.
Grazie mille per la disponibilità.
bene… grazie di aver condiviso la tua soluzione.
Ciao