Neues Feld in der Kundenregistrierung von magento (1.9) hinzufügen


28

Ich möchte ein neues Feld in der Kundenregistrierung und im Formular zur Kundenerstellung hinzufügen.

Der Feldname ist die Lizenznummer . Ich habe so viele Links nach meinen Anforderungen durchsucht, aber diese funktionieren in Magento (1.9) nicht. Sogar ich fand die Erweiterung dazu:

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

Wenn ich die obige Erweiterung mit key installiert habe, wird ein Fehler angezeigt. Können Sie mir bitte eine Idee zu meiner Anforderung geben?



Dies wurde zuvor hier beantwortet: magento.stackexchange.com/questions/14163/…
tecjam

Antworten:


55

Sie müssen eine neue Erweiterung erstellen, um sie sauber zu machen.
Nennen wir die Erweiterung StackExchange_Customer.
Sie benötigen folgende Dateien:

app/etc/modules/StackExchange_Customer.xml - die Anmeldedatei

<?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 - die Konfigurationsdatei

<?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- die Installationsdatei. Fügt das neue Attribut hinzu.

<?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 - der Modul-Haupthelfer

<?php
class StackExchange_Customer_Helper_Data extends Mage_Core_Helper_Abstract
{

}

Dadurch wird Ihr Attribut für den Kunden hinzugefügt.
Es sollte gut im Backend funktionieren.
Leider müssen Sie die Frontend-Vorlagen jetzt manuell bearbeiten, da Magento kein Ereignis oder keinen leeren Block hat, in den Sie Ihre Felder einfügen können.
Dafür benötigen Sie Folgendes.

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>

Und jetzt die Vorlagen.

app/design/frontend/base/default/template/stackexchange_customer/register.phtml- die Registrierungsvorlage.
Machen Sie dazu einen Klon von /app/design/frontend/{package}/{theme}/template/persistent/customer/form/register.phtmlund fügen Sie diesen einfach irgendwo in das Formular ein. Ich muss hier nicht die vollständige Datei posten. Ordnen Sie es wie Sie möchten

<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.phtmlFür diesen einen Klon /app/design/frontend/{package}/{theme}/template/customer/form/edit.phtmlund fügen Sie irgendwo in das Formular Folgendes ein:

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

Sie können auch die Übersetzungsdatei erstellen. Ist nicht verpflichtend, aber schön zu haben

app/locale/en_US/StackExchange_Customer.csv

"License Number","License Number"

Leeren Sie den Cache und Sie sollten eingestellt sein.


Ich folge wie du willst, aber das Feld wird auf der Benutzerseite der Admin-Kiste nicht angezeigt.
Senthil

@senthil. Du hast recht. Das tut mir leid. Ich habe das falsche Installationsskript eingefügt. Ich habe die Antwort mit der richtigen app/code/local/StackExchange/Customer/sql/stackexchange_customer_setup/install-1.0.0.phpDatei aktualisiert . Da Sie das Modul bereits installiert haben, wird das neue Installationsskript nicht erneut ausgeführt. Damit es erneut ausgeführt wird, müssen Sie eav_attributedas Attribut mit dem Code license_numberund core_resourceden Datensatz mit dem Code aus der Tabelle löschen StackExchange_Customer. Leeren Sie den Cache und aktualisieren Sie die Seite. Das Installationsskript sollte erneut ausgeführt werden.
Marius

2
@senthil Wenn Sie andere Felder hinzufügen sollten Sie klonen install-1.0.0zu upgrade-1.0.0-1.0.1und Ihre Änderungen in der geklonten Datei zu tun. Ändern Sie dann den versionTag in config.xmlzu 1.0.1. Sehen Sie hier, wie Upgrade-Skripte funktionieren: magento.stackexchange.com/q/26313/146
Marius

1
Hallo Sir, Sie haben uns nicht gesagt, wie mehrere Attribute festgelegt werden sollen. Ich habe versucht, durch Modifizieren des Codes mehrere Attribute zu verwenden. Funktioniert immer noch nicht . Bitte erklären Sie
Pratik

1
@Haris, für Uploads musst du höchstwahrscheinlich etwas extra machen, aber ich weiß nicht was.
Marius

0

Vielen Dank, Marius, nur eine Sache, das Feld nicht in der Kasse Rechnungsinformationen für die Registrierung angezeigt.

Wie kann ich das Feld in der Checkout-Registrierung anzeigen lassen?

Vielen Dank

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.