Ajouter un nouveau champ dans l'enregistrement client magento (1.9)

28

J'aime ajouter un nouveau champ dans le formulaire d'inscription client et de création client admin.

Le nom du champ est le numéro de licence . J'ai recherché tant de liens liés à mes besoins mais ceux-ci ne fonctionnent pas dans Magento (1.9). Même moi, j'ai trouvé l'extension liée à cela:

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

Lorsque j'ai installé l'extension ci-dessus à l'aide de la clé, elle affiche une erreur. Pouvez-vous s'il vous plaît donner une idée liée à mes besoins?

senthil
la source
Indiquez
Cela a déjà été répondu ici: magento.stackexchange.com/questions/14163/…
tecjam

Réponses:

55

Vous devez créer une nouvelle extension pour la rendre propre.
Appelons l'extension StackExchange_Customer.
Vous aurez besoin des fichiers suivants:

app/etc/modules/StackExchange_Customer.xml - le dossier de déclaration

<?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 - le fichier de configuration

<?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- le fichier d'installation. Ajoutera le nouvel attribut.

<?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'aide principale du module

<?php
class StackExchange_Customer_Helper_Data extends Mage_Core_Helper_Abstract
{

}

Cela ajoutera votre attribut pour le client.
Cela devrait bien fonctionner sur le backend.
Malheureusement, vous devez modifier les modèles frontaux manuellement maintenant, car Magento n'a aucun événement ou bloc vide où vous pouvez placer vos champs.
Pour cela, vous avez besoin des éléments suivants.

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>

Et maintenant les modèles.

app/design/frontend/base/default/template/stackexchange_customer/register.phtml- le modèle d'enregistrement.
Pour celui-ci, faites un clone du /app/design/frontend/{package}/{theme}/template/persistent/customer/form/register.phtmlet insérez-le simplement quelque part dans le formulaire. Je n'ai pas besoin de poster le dossier complet ici. Arrangez-le comme bon vous semble

<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.phtmlPour celui-ci, clonez /app/design/frontend/{package}/{theme}/template/customer/form/edit.phtmlet insérez quelque part à l'intérieur du formulaire ceci:

<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>

Vous pouvez également créer le fichier de traduction. N'est pas obligatoire mais c'est bien d'avoir

app/locale/en_US/StackExchange_Customer.csv

"License Number","License Number"

Videz le cache et vous devriez être prêt.

Marius
la source
je suis selon vous, mais le champ ne s'affiche pas sur la page utilisateur de la caisse d'administration.
senthil
@senthil. Vous avez raison. Désolé pour ça. J'ai collé le mauvais script d'installation. J'ai mis à jour la réponse avec le bon app/code/local/StackExchange/Customer/sql/stackexchange_customer_setup/install-1.0.0.phpfichier. Puisque vous avez déjà installé le module, le nouveau script d'installation ne s'exécutera plus. Pour le relancer, vous devez supprimer de la table eav_attributel'attribut avec le code license_numberet de la table core_resourcel'enregistrement avec le code StackExchange_Customer. Videz le cache et actualisez la page. Le script d'installation devrait s'exécuter à nouveau.
Marius
2
@senthil Si vous prévoyez d'ajouter d' autres champs que vous devez cloner install-1.0.0pour upgrade-1.0.0-1.0.1et faire vos modifications dans le fichier cloné. Puis changez la versionbalise dans config.xmlla 1.0.1. Découvrez comment les scripts de mise à niveau fonctionnent ici: magento.stackexchange.com/q/26313/146
Marius
1
Salut monsieur, vous ne nous avez pas dit comment définir plusieurs attributs? J'ai essayé plusieurs attr en modifiant votre code. Ne fonctionne toujours pas . Veuillez expliquer
Pratik
1
@Haris, pour les téléchargements, vous devez très probablement faire quelque chose de plus, mais je ne sais pas quoi.
Marius
0

Merci Marius, seulement une chose, le champ n'affiche pas les informations de facturation pour l'enregistrement.

Comment puis-je faire apparaître le champ lors de l'inscription à la caisse?

Merci

DanMar
la source