Agregar nuevo campo en magento (1.9) registro de clientes

28

Me gusta agregar un nuevo campo en el registro de clientes y en el formulario de creación de clientes administrativos.

El nombre del campo es el número de licencia . Busqué muchos enlaces relacionados con mi requisito, pero esos no funcionan en Magento (1.9). Incluso encontré la extensión relacionada con esto:

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

Cuando instalé la extensión anterior usando la clave, muestra un error. ¿Me puede dar alguna idea relacionada con mi requisito?

senthil
fuente
También proporcione el error que está recibiendo en la extensión anterior ... envíe tantos detalles como sea posible ...
Siddharth Vaghasia
Esto se ha respondido anteriormente aquí: magento.stackexchange.com/questions/14163/…
tecjam

Respuestas:

55

Necesita crear una nueva extensión para que quede limpia.
Llamemos a la extensión StackExchange_Customer.
Necesitará los siguientes archivos:

app/etc/modules/StackExchange_Customer.xml - el archivo de declaración

<?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 - el archivo de configuración

<?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- el archivo de instalación. Agregará el nuevo atributo.

<?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 - el ayudante principal del módulo

<?php
class StackExchange_Customer_Helper_Data extends Mage_Core_Helper_Abstract
{

}

Esto agregará su atributo para el cliente.
Debería funcionar bien en el backend.
Desafortunadamente, debe editar las plantillas frontend manualmente ahora porque Magento no tiene ningún evento o bloque vacío donde pueda colocar sus campos.
Para esto necesitas lo siguiente.

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>

Y ahora las plantillas.

app/design/frontend/base/default/template/stackexchange_customer/register.phtml- la plantilla de registro.
Para este, haga un clon del /app/design/frontend/{package}/{theme}/template/persistent/customer/form/register.phtmle simplemente inserte esto en algún lugar dentro del formulario. No necesito publicar el archivo completo aquí. Organízalo como quieras

<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.phtmlPara este clon /app/design/frontend/{package}/{theme}/template/customer/form/edit.phtmle inserte en algún lugar dentro del formulario esto:

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

También puede crear el archivo de traducción. No es obligatorio pero es bueno tener

app/locale/en_US/StackExchange_Customer.csv

"License Number","License Number"

Borre el caché y debería estar configurado.

Marius
fuente
Lo sigo según su manera, pero el campo no se muestra en la página de usuario de administración.
senthil
@senthil. Tienes razón. Lo siento por eso. Pegué el script de instalación incorrecto. Actualicé la respuesta con el app/code/local/StackExchange/Customer/sql/stackexchange_customer_setup/install-1.0.0.phparchivo correcto . Como ya instaló el módulo, el nuevo script de instalación no volverá a ejecutarse. Para que vuelva a ejecutarse, debe eliminar de la tabla eav_attributeel atributo con el código license_numbery de la tabla core_resourceel registro con el código StackExchange_Customer. Borre el caché y actualice la página. El script de instalación debería ejecutarse nuevamente.
Marius
2
@senthil Si va a agregar otros campos se debe clonar install-1.0.0a upgrade-1.0.0-1.0.1y hacer las modificaciones en el archivo clonado. Luego cambie la versionetiqueta config.xmla 1.0.1. Vea cómo funcionan los scripts de actualización aquí: magento.stackexchange.com/q/26313/146
Marius
1
Hola señor, no nos dijo ¿Cómo establecer múltiples atributos? Traté de múltiples atributos modificando su código. Sigue sin funcionar . Por favor explique
Pratik
1
@Haris, para las cargas, lo más probable es que tengas que hacer algo extra, pero no sé qué.
Marius
0

Gracias Marius, solo una cosa, el campo no se muestra en la información de facturación de pago para el registro.

¿Cómo puedo hacer que el campo se muestre en el registro de pago?

Gracias

DanMar
fuente