Mentre l'aggiunta di un attributo alla scheda prodotti è un'operazione molto semplice e ricca di opzioni, Magento non consente di gestire dal pannello gli attributi relativi alle categorie. Vediamo allora come ovviare attraverso un modulo.
Magento dispone di un'avanzata gestione degli attributi dei prodotti. Attraverso la voce Catalog/attributes possiamo aggiungere alle schede di inserimento prodotto tutti gli attributi che vogliamo, con opzioni molto avanzate come la scelta del campo form di inserimento, la richiesta obbligatoria del dato, i criteri di validazione di quanto inserito.
Tutto questo sistema non è però disponibile per le categorie, dove possiamo gestire tante cose (meta dati, fotografie, layout grafico) ma non aggiungere dei nuovi tipi di dato. Vediamo allora come ovviare attraverso un modulo personalizzato, che ho avuto occasione di creare per un cliente che mi aveva chiesto di poter gestire, per ogni categoria, una percentuale di ricarico che lui applica al listino fornitori.
La prima cosa da fare è creare dentro la cartella app/code/local una directory per il nostro modulo. Chiamatela come volete, usando un nome univoco (se avete una ditta va benissimo quello), nel mio caso "Infocurci". Usate l'iniziale maiuscola. All'interno di questa directory, create una nuova cartella con il nome del modulo (nel mio caso l'ho chiamato "Categoria", anche qui usate il nome che volete -senza spazi o caratteri strani- iniziando con la lettera maiuscola.
Creiamo ora una cartella chiamata "etc" e dentro un file config.xml con questo contenuto:
<?xml version="1.0"?>
<config>
<modules>
<Infocurci_Categoria>
<version>0.0.1</version>
</Infocurci_Categoria>
</modules>
<global>
<resources>
<add_category_attribute>
<setup>
<module>Infocurci_Categoria</module>
<class>Mage_Catalog_Model_Resource_Setup</class>
</setup>
<connection>
<use>core_setup</use>
</connection>
</add_category_attribute>
<add_category_attribute_write>
<connection>
<use>core_write</use>
</connection>
</add_category_attribute_write>
<add_category_attribute_read>
<connection>
<use>core_read</use>
</connection>
</add_category_attribute_read>
</resources>
</global>
</config>
Ovviamente al posto di "Infocurci_Categoria" dovete usare i due nomi che avete scelto in precedenza. Il resto potete lasciarlo invariato.
Creiamo ora dentro /app/code/local/Infocurci/Categoria (cambiando sempre con i vostri percorsi personalizzati) una nuova sottodirectory chiamata "sql" con dentro una cartella "add_category_attribute" ed un file chiamato mysql4-install-0.0.1.php.
Riepilogando, il file mysql4-install-0.0.1.php va dentro app/code/local/Infocurci/Categoria/sql/add_category_attribute/ . Il contenuto è questo:
<?php
$this->startSetup();
$this->addAttribute(Mage_Catalog_Model_Category::ENTITY, 'ricarico_categoria', array(
'group' => 'General Information',
'input' => 'text',
'type' => 'decimal',
'label' => 'Ricarico categoria',
'backend' => '',
'visible' => true,
'required' => false,
'visible_on_front' => false,
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
));
$this->endSetup();
Credo che tutte le informazioni richieste siano sufficientemente comprensibili. Con "group" decidiamo in quale tab del pannello di gestione categoria va mostrato il campo, con "input" il tipo di input html e con "type" il tipo di dato richiesto.
Ultima cosa da fare. è attivare il modulo. Creiamo dentro /app/etc/modules/ un file chiamato "Infocurci_Categoria.xml" (personalizzato con i due nomi scelti in precedenza, ma usando sempre il maiuscolo per la prima lettera) e inseriamo dentro questo contenuto:
<?xml version="1.0"?>
<config>
<modules>
<Infocurci_Categoria>
<active>true</active>
<codePool>local</codePool>
</Infocurci_Categoria>
</modules>
</config>
Ed ecco qui il nostro campo in azione! Possiamo poi risalire la valore inserito con getRicaricoCategoria() e impostarlo con setRicaricoCategoria(), ovviamente richiamato su un oggetto di tipo categoria, creato ad esempio con
Mage::getModel('catalog/category')->load($categoriaId);