Aggiungere al cliente un campo personalizzato in Magento 1.5/1.6

Magento è una tra le più note applicazioni open-source e gratuite dedicate al mondo dell’e-commerce. Essendo nato e cresciuto per essere distribuito sul mercato americano ha rapidamente preso piede anche all’estero. Per adattarlo ai vari paesi sono necessari però alcune personalizzazioni.

In questo post vedremo come aggiungere un campo personalizzato ai clienti, visibile all’atto della registrazione e della modifica di un utente. Per fare ciò scriveremo una estensione di magento. Questo software prevede infatti la personalizzazione di tutte le sue parti mediante la scrittura di codice che vada a sostituire i moduli originali (o parte di questi), senza sovrascrivere i sorgenti ufficiali.

Per prima cosa si dovrà creare un file xml che descriva l’ambito in cui verrà inserito il nostro modulo:

creiamolo in app/code/etc/modules/Glocal_All.xml

Al suo interno inseriamo le seguenti righe:

<!--?xml version="1.0"?-->
<config>
	<modules>
		<Glocal_Customer>
			<active>true</active>
			<codePool>local</codePool>
		</Glocal_Customer>
	</modules>
</config>

Con queste direttive abbiamo stabilito che nell’ambito Glocal andremo a creare un nuovo modulo chiamato Customer il quale risiederà nel codePool local (ossia nella cartella app/code/local/).

Andiamo quindi nel codePool definito e creiamo la nostra cartella Glocal nella quale andremo ad inserire i files del nostro modulo.

Creiamo poi una cartella app/code/local/Glocal/Customer/ e al suo interno creiamo le cartelle app/code/local/Glocal/Customer/etcapp/code/local/Glocal/Customer/Model/Entity.

Create le cartelle, copiamo il file app/code/core/Mage/Customer/etc/config.xml in app/code/local/Glocal/Customer/etc e apriamolo in modifica.

Sostituiamo il codice seguente

<modules>
        <Mage_Customer>
            <version>x.x.x</version>
        </Mage_Customer>
</modules>

con

<modules>
        <Glocal_Customer>
            <version>0.1.0</version>
        </Glocal_Customer>
</modules>

al fondo dell’xml scope <global><fieldsets><customer_account> aggiungiamo la linea del nostro campo personalizzato:

<codfisc><create>1</create><update>1</update></codfisc>

salviamo e chiudiamo il file.

Creiamo il file app/code/local/Glocal/Customer/Model/Entity/Setup.php dichiarando al suo interno la classe class Glocal_Customer_Model_Entity_Setup extends Mage_Customer_Model_Entity_Setup e copiamoci dentro il metodo getDefaultEntities dal file app/code/core/Mage/Customer/Model/Entity/Setup.php.

Nel metodo appena copiato cerchiamo l’array attributes e aggiungiamo al fondo di questo il seguente codice:

'cod_fisc' => array(
      'label'	=> 'Codice fiscale',
      'visible'	=> true,
      'required'=> false,
),

Se il campo sarà richiesto e non potrà essere nullo dovremmo impostare a true la proprietà ‘required’.

Ora non ci rimane che creare il campo sul db inserendo questo codice in una pagina del template facilmente richiamabile:

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$setup->addAttribute('customer', 'codfisc', array(
	'label'		=> 'Codice fiscale',
	'type'		=> 'varchar',
	'input'		=> 'text',
	'visible'	=> true,
	'required'	=> true,
        'user_defined'  => true,
	'position'	=> 1,
	));
$eavConfig = Mage::getSingleton('eav/config');
$attribute = $eavConfig->getAttribute('customer', 'codfisc');
$attribute->setData('used_in_forms', array('customer_account_edit',
'customer_account_create',
'adminhtml_customer'));
$attribute->save();

Visitando la pagina in cui abbiamo inserito il codice (dopo averlo fatto rimuovere il codice dalla pagina, altrimenti verrà creato un altro campo identico alla prossima visita) creeremo il campo sul db, e di conseguenza aggiornando la cache dal backend potremo notare che il campo sarà presente sia in aggiunta sia in modifica cliente.

Ora possiamo aggiungere il campo nel form di registrazione con il seguente codice:

<li>
                    <label for="codfisc"><?php echo $this->__('Codice fiscale') ?></label>
                    <div class="input-box">
                        <input type="text" name="codfisc" id="codfisc" value="<?php echo $this->htmlEscape($this->getFormData()->getCodfisc()) ?>" title="<?php echo $this->__('Codice fiscale') ?>" class="input-text" />
                    </div>
                </li>

E nel form di modifica con:

<li>
                <label for="codfisc"><?php echo $this->__('Codice fiscale') ?></label>
                <div class="input-box">
                    <input type="text" name="codfisc" id="codfisc" value="<?php echo $this->htmlEscape($this->getCustomer()->getCodfisc()) ?>" title="<?php echo $this->__('Codice fiscale') ?>" class="input-text" />
                </div>
            </li>

Ora il nostro nuovo campo sarà visibile e pronto per essere utilizzato.

7 Commenti su “Aggiungere al cliente un campo personalizzato in Magento 1.5/1.6”

  • Sabrina scrive:

    Nel mio Setup.php non ho niente solo l’intestazione con il nome della classe come faccio???

  • Sabrina scrive:

    l’ultima stabile la 1.6.2.0 ma nel mio app/code/core/Mage/Customer/Model/Entity/Setup.php c’è solo l’intestazione della classe.
    Grazie della risposta Davide! l’ho istallata in locale.

    • Davide scrive:

      Io effettivamente uso la versione 1.5.1… Ho provato su una 1.6 che avevo installato sul mio portatile e sembra che quella classe app/code/core/Mage/Customer/Model/Entity/Setup.php sia estesa da app/code/core/Mage/Customer/Model/Resource/Setup.php. Prova a vedere se qui riesci ad inserire il codice. Ovviamente devi testarlo e non ti assicuro del corretto funzionamento perchè non l’ho provato.

  • Luca scrive:

    Ciao…
    ho lo stesso problema anche io nel 1.6 … prendo la classe da setup.php, volevo sapere se funziona, e sopratutto dove lo metto su /model/entity o su model/resource ???

  • Nicola scrive:

    ciao, ho seguito la guida e funziona alla perfezione, solo non so come inserire il codice fiscale nella fattura, ho provato ad inserire {{depend codfisc}}CF: {{var codfisc}}{{/depend}} ma non sembra funzionare, come posso risolvere?

Lascia un commento