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?

senthil
quelle
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.

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

DanMar
quelle