Creiamo un modulo che inizializzi il nostro e-commerce Magento – Parte 1
Iniziamo la settimana con un nuovo articolo su Magento, oggi vi propongo un utility che ho deciso di creare per un e-commerce riguardante la vendita dei libri. Durante lo sviluppo, sul mio server locale, ho dovuto inserire parecchi attributi personalizzati all’oggetto prodotto, ottenendo così un vasto insieme che dovrei riportare nel database in produzione. Il modulo si occuperà dell’inserimento di tutti gli attributi, pagine e blocchi necessari per l’istallazione del negozio.
Ho chiamato il modulo Bootstrap, per indicarne il suo scopo; oggi inizieremo con l’importazione degli attributi relativi al prodotto, impostiamo la struttura basilare del modulo nel seguente modo:
\---Audero | \---Bootstrap | \---Model | \---Resource | \---Eav | \---Mysql4 | \---Setup.php | \---etc | \---config.xml | \---slq | \---bootstrap_setup | \---mysql4-install-0.0.1.php
Partiamo creando il file principale di configurazione nel seguente modo:
<config> <modules> <Audero_Bootstrap> <version>0.0.1</version> </Audero_Bootstrap> </modules> <global> <models> <bootstrap> <class>Audero_Bootstrap_Model</class> </bootstrap> </models> <resources> <bootstrap_setup> <setup> <module>Audero_Bootstrap</module> <class>Audero_Bootstrap_Model_Resource_Eav_Mysql4_Setup</class> </setup> <connection> <use>core_setup</use> </connection> </bootstrap_setup> <bootstrap_write> <connection> <use>core_write</use> </connection> </bootstrap_write> <bootstrap_read> <connection> <use>core_read</use> </connection> </bootstrap_read> </resources> </global> </config>
Creiamo il file di setup mysql4-install-0.0.1.php e inseriamo le seguenti righe:
<?php $installer = $this; $installer->installEntities();
il model che fa riferimento la variabile $this è una classe che estende Mage_Eav_Model_Entity_Setup. Il metodo richiamato, installEntities, chiama al suo interno un ulteriore metodo getDefaultEntities che deve restituire le entità da aggiungere.
Entriamo ora nel cuore del modulo e creiamo la nostra classe, estensione di Mage_Eav_Model_Entity_Setup, per dichiarare gli attributi da inserire con l’installazione del modulo:
<?php
class Audero_Bootstrap_Model_Resource_Eav_Mysql4_Setup extends Mage_Eav_Model_Entity_Setup
{
protected function _prepareValues($attr)
{
$data = parent::_prepareValues($attr);
$data = array_merge($data, array(
'frontend_input_renderer' => $this->_getValue($attr, 'input_renderer'),
'is_global' => $this->_getValue(
$attr, 'global', Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL
),
'is_visible' => $this->_getValue($attr, 'visible', 1),
'is_searchable' => $this->_getValue($attr, 'searchable', 0),
'is_filterable' => $this->_getValue($attr, 'filterable', 0),
'is_comparable' => $this->_getValue($attr, 'comparable', 0),
'is_visible_on_front' => $this->_getValue($attr, 'visible_on_front', 0),
'is_wysiwyg_enabled' => $this->_getValue($attr, 'wysiwyg_enabled', 0),
'is_html_allowed_on_front' => $this->_getValue($attr, 'is_html_allowed_on_front', 0),
'is_visible_in_advanced_search' => $this->_getValue($attr, 'visible_in_advanced_search', 0),
'is_filterable_in_search' => $this->_getValue($attr, 'filterable_in_search', 0),
'used_in_product_listing' => $this->_getValue($attr, 'used_in_product_listing', 0),
'used_for_sort_by' => $this->_getValue($attr, 'used_for_sort_by', 0),
'apply_to' => $this->_getValue($attr, 'apply_to'),
'position' => $this->_getValue($attr, 'position', 0),
'is_configurable' => $this->_getValue($attr, 'is_configurable', 1),
'is_used_for_promo_rules' => $this->_getValue($attr, 'used_for_promo_rules', 0)
));
return $data;
}
public function getDefaultEntities()
{
return array(
'catalog_product' => array(
'entity_model' => 'catalog/product',
'attribute_model' => 'catalog/resource_eav_attribute',
'table' => 'catalog/product',
'additional_attribute_table' => 'catalog/eav_attribute',
'entity_attribute_collection' => 'catalog/product_attribute_collection',
'attributes' => array(
// -------------------------------------------------Scheda libro
'edizione' => array(
'group' => 'Libro',
'label' => 'Edizione',
'sort_order' => 1,
'type' => 'varchar',
'input' => 'text',
'visible' => true,
'required' => true,
'searchable' => true,
'filterable' => true,
'comparable' => true,
'visible_on_front' => true,
'visible_in_advanced_search' => true,
),
'sottotitolo' => array(
'group' => 'Libro',
'label' => 'Sottotitolo',
'type' => 'varchar',
'input' => 'text',
'visible' => true,
'required' => false,
'searchable' => true,
'comparable' => false,
'visible_on_front' => true,
),
'autore' => array(
'group' => 'Libro',
'label' => 'Autore',
'sort_order' => 1,
'type' => 'varchar',
'input' => 'text',
'visible' => true,
'required' => true,
'searchable' => true,
'filterable' => true,
'comparable' => true,
'visible_on_front' => true,
'visible_in_advanced_search' => true,
),
'isbn' => array(
'group' => 'Libro',
'label' => 'Isbn',
'type' => 'varchar',
'input' => 'text',
'visible' => true,
'required' => true,
'searchable' => true,
'filterable' => true,
'comparable' => true,
'visible_on_front' => true,
'visible_in_advanced_search' => true,
'unique' => true
),
// -------------------------------------------------------Schede
'indice' => array(
'group' => 'Schede libro',
'label' => 'Indice',
'sort_order' => 2,
'type' => 'varchar',
'input' => 'textarea',
'visible' => true,
'required' => false,
'wysiwyg_enabled' => true,
'is_html_allowed_on_front' => true,
'comparable' => false,
'visible_on_front' => true,
),
'errata_corrige' => array(
'group' => 'Schede libro',
'label' => 'Errata corrige',
'sort_order' => 4,
'type' => 'varchar',
'input' => 'textarea',
'visible' => true,
'required' => false,
'wysiwyg_enabled' => true,
'is_html_allowed_on_front' => true,
'comparable' => false,
'visible_on_front' => true,
),
)
)
);
}
}
Per l’esempio ho inserito solo pochi attributi e da come si può vedere le proprietà, associate a ciascun attributo, sono abbastanza autodescrittive per cui non le tratteremo all’interno di quest articolo. Abbiamo poi aggiunto un altro metodo _prepareValues, richiamato dal metodo addAttribute nella classe Mage_Eav_Model_Entity_Setup, per impostare delle proprietà di default ai nostri attributi evitandoci la ripetizione delle stesse proprietà all’interno dell’array associativo attributes.
Una volta terminato con questi file, non ci resta che dichiarare il modulo all’interno del file etc come nei precedenti articoli e avviare il nostro e-commerce. Entrando nell’area di amministrazione e creando un nuovo prodotto, possiamo notare le schede nuove coi nuovi attributi dichiarati.
Con questo abbiamo terminato la prima parte riguardante il modulo personalizzato di bootstrap, vedremo nei prossimi articoli come procedere per gli altri componenti. A presto

