Aggiungi un nuovo campo in magento (1.9) registrazione cliente


28

Mi piace aggiungere un nuovo campo nella registrazione del cliente e nel modulo di creazione del cliente amministratore.

Il nome del campo è il numero di licenza . Ho cercato tanti link relativi alle mie esigenze ma quelli non funzionano in Magento (1.9). Anche io ho trovato l'estensione relativa a questo:

http://www.magentocommerce.com/magento-connect/custome-account-profile-13594.html

Quando ho installato l'estensione sopra usando la chiave, mostra un errore. Potete per favore dare qualche idea relativa alle mie esigenze?


Fornisci anche quale errore stai
riscontrando

È stata precedentemente fornita una
tecjam,

Risposte:


55

È necessario creare una nuova estensione per renderla pulita.
Chiamiamo l'estensione StackExchange_Customer.
Avrai bisogno dei seguenti file:

app/etc/modules/StackExchange_Customer.xml - il file di dichiarazione

<?xml version="1.0"?>
<config>
    <modules>
        <StackExchange_Customer>
            <active>true</active>
            <codePool>local</codePool>
            <depends><Mage_Customer/></depends>
        </StackExchange_Customer>
    </modules>
</config> 

app/code/local/StackExchange/Customer/etc/config.xml - il file di configurazione

<?xml version="1.0"?>
<config>
    <modules>
        <StackExchange_Customer>
            <version>1.0.0</version>
        </StackExchange_Customer>
    </modules>
    <global>
        <helpers>
            <stackexchange_customer>
                <class>StackExchange_Customer_Helper</class>
            </stackexchange_customer>
        </helpers>
        <resources>
            <stackexchange_customer_setup>
                <setup>
                    <module>StackExchange_Customer</module>
                    <class>Mage_Customer_Model_Resource_Setup</class>
                </setup>
            </stackexchange_customer_setup>
        </resources>
    </global>
    <frontend>
        <layout>
            <updates>
                <stackexchange_customer>
                    <file>stackexchange_customer.xml</file>
                </stackexchange_customer>
            </updates>
        </layout>
        <translate>
            <modules>
                <StackExchange_Customer>
                    <files>
                        <default>StackExchange_Customer.csv</default>
                    </files>
                </StackExchange_Customer>
            </modules>
        </translate>
    </frontend>
</config>

app/code/local/StackExchange/Customer/sql/stackexchange_customer_setup/install-1.0.0.php- il file di installazione. Aggiungerà il nuovo attributo.

<?php
$this->addAttribute('customer', 'license_number', array(
    'type'      => 'varchar',
    'label'     => 'License Number',
    'input'     => 'text',
    'position'  => 120,
    'required'  => false,//or true
    'is_system' => 0,
));
$attribute = Mage::getSingleton('eav/config')->getAttribute('customer', 'license_number');
$attribute->setData('used_in_forms', array(
    'adminhtml_customer',
    'checkout_register',
    'customer_account_create',
    'customer_account_edit',
));
$attribute->setData('is_user_defined', 0);
$attribute->save();

app/code/local/StackExchange/Customer/Helper/Data.php - l'helper principale del modulo

<?php
class StackExchange_Customer_Helper_Data extends Mage_Core_Helper_Abstract
{

}

Questo aggiungerà il tuo attributo per il cliente.
Dovrebbe funzionare bene sul backend.
Purtroppo ora devi modificare manualmente i modelli di frontend perché Magento non ha alcun evento o blocco vuoto in cui puoi inserire i tuoi campi.
Per questo è necessario quanto segue.

app/design/frontend/base/default/layout/stackexchange_customer.xml

<?xml version="1.0"?>
<layout>
    <customer_account_edit>
        <reference name="customer_edit">
            <action method="setTemplate">
                <template>stackexchange_customer/form/edit.phtml</template>
            </action>
        </reference>
    </customer_account_edit>
    <customer_account_create>
        <reference name="customer_form_register">
            <action method="setTemplate">
                <template>stackexchange_customer/register.phtml</template>
            </action>
        </reference>
    </customer_account_create>
</layout>

E ora i modelli.

app/design/frontend/base/default/template/stackexchange_customer/register.phtml- il modello di registrazione.
Per questo crea un clone del /app/design/frontend/{package}/{theme}/template/persistent/customer/form/register.phtmle inserisci questo da qualche parte all'interno del modulo. Non ho bisogno di pubblicare il file completo qui. Organizzalo come preferisci

<li>
    <label for="license_number"><?php echo $this->__('License Number') ?></label>
    <div class="input-box">
        <input type="text" name="license_number" id="license_number" value="<?php echo $this->escapeHtml($this->getFormData()->getLicenseNumber()) ?>" title="<?php echo $this->__('License Number') ?>" class="input-text" />
    </div>
</li>

/app/design/frontend/base/default/template/stackexchange_customer/form/edit.phtmlPer questo clone /app/design/frontend/{package}/{theme}/template/customer/form/edit.phtmle inserisci da qualche parte all'interno del modulo questo:

<li>
    <label for="license_number"><?php echo $this->__('License Number') ?></label>
    <div class="input-box">
        <input type="text" name="license_number" id="license_number" value="<?php echo $this->htmlEscape($this->getCustomer()->getLicenseNumber()) ?>" title="<?php echo $this->__('License Number') ?>" class="input-text" />
    </div>
</li>

Puoi anche creare il file di traduzione. Non è obbligatorio ma è bello averlo

app/locale/en_US/StackExchange_Customer.csv

"License Number","License Number"

Svuota la cache e dovresti essere impostato.


seguo come da te, ma il campo non viene visualizzato nella pagina utente della cassa di amministrazione.
senthil,

@senthil. Hai ragione. Mi dispiace per quello. Ho incollato lo script di installazione errato. Ho aggiornato la risposta con il app/code/local/StackExchange/Customer/sql/stackexchange_customer_setup/install-1.0.0.phpfile corretto . Poiché hai già installato il modulo, il nuovo script di installazione non verrà più eseguito. Per eseguirlo nuovamente è necessario eliminare dalla tabella eav_attributel'attributo con il codice license_numbere dalla tabella core_resourceil record con il codice StackExchange_Customer. Svuota la cache e aggiorna la pagina. Lo script di installazione dovrebbe essere eseguito nuovamente.
Marius

2
@senthil Se si prevede di aggiungere altri campi si dovrebbe clonare install-1.0.0per upgrade-1.0.0-1.0.1e fare le modifiche nel file clonato. Quindi modificare il versiontag config.xmla 1.0.1. Scopri come funzionano gli script di aggiornamento qui: magento.stackexchange.com/q/26313/146
Marius

1
Salve signore, non ci ha detto come impostare più attributi? Ho provato per più attrs modificando il tuo codice. Continua a non funzionare . Per favore, spiega
Pratik,

1
@Haris, per i caricamenti, molto probabilmente devi fare qualcosa in più, ma non so cosa.
Marius

0

Grazie Marius, solo una cosa, il campo non viene visualizzato nelle informazioni di fatturazione per la registrazione.

Come posso mostrare il campo nella registrazione del checkout?

Grazie

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.