Agregar atributo personalizado al formulario de registro del cliente

8

Necesitaba crear dos nuevos atributos de cliente. He seguido la guía de: http://www.fontis.com.au/blog/magento/know-more-about-your-customers-adding-custom-signup-attributes

para crear estos atributos. He comprobado la tabla 'eav_attribute' en la base de datos y puedo confirmar que ambos atributos existen. Lo único es que no sabía cómo crear un atributo de casilla de verificación, así que he creado ambos atributos como 'Sí / No'.

de seguir el código sobre cómo mostrar el campo en el formulario de registro que he hecho:

<li class="control">
<div class="input-box">
    <label for="publisheroffer"><?php echo $this->__('Publisher Offer') ?><span class="required">*</span></label><br />
    <input type="checkbox" name="publisheroffer" id="publisheroffer" value="<?php echo $this->htmlEscape($this->getFormData()->getPublisheroffer()) ?>" title="<?php echo $this->__('Publisher Offer') ?>" class="input-text" />
</div>
</li>

Donde el id del atributo es 'publisheroffer'. Cuando se crea la cuenta, se crea bien, pero los campos de atributos personalizados no cambian.

¿Cómo visualizo este atributo como una casilla de verificación en la página de registro y cómo procesar los valores?

Gracias por toda la ayuda de antemano.

usuario1669256
fuente
El módulo de campo de registro personalizado de Magento es una forma realmente agradable de extender el registro de usuario de magento, funciona muy bien con otro módulo y también como marketplace store.webkul.com/Magento-Extensions/…
webkul

Respuestas:

12

Para permitir la publicación de un atributo en el formulario de registro y en algunos otros formularios, debe establecer que los atributos estén disponibles para esos formularios.

Para hacerlo, aquí hay un código de muestra para poner en su configuración sql a continuación. Puede encontrar el resto del código que utilicé para mi módulo de nombre de usuario de Magento en mi cuenta de github.

/* @var $installer Diglin_Username_Model_Entity_Setup */
$installer = $this;

/* @var $eavConfig Mage_Eav_Model_Config */
$eavConfig = Mage::getSingleton('eav/config');

$store = Mage::app()->getStore(Mage_Core_Model_App::ADMIN_STORE_ID);

$attributes = $installer->getAdditionalAttributes();

foreach ($attributes as $attributeCode => $data) {
    $installer->addAttribute('customer', $attributeCode, $data);

    $attribute = $eavConfig->getAttribute('customer', $attributeCode);
    $attribute->setWebsite( (($store->getWebsite()) ? $store->getWebsite() : 0));

    if (false === ($attribute->getIsSystem() == 1 && $attribute->getIsVisible() == 0)) {
        $usedInForms = array(
            'customer_account_create',
            'customer_account_edit',
            'checkout_register',
        );
        if (!empty($data['adminhtml_only'])) {
            $usedInForms = array('adminhtml_customer');
        } else {
            $usedInForms[] = 'adminhtml_customer';
        }
        if (!empty($data['adminhtml_checkout'])) {
            $usedInForms[] = 'adminhtml_checkout';
        }

        $attribute->setData('used_in_forms', $usedInForms);
    }
    $attribute->save();
}
Sylvain Rayé
fuente
Hola, los atributos están permitidos en los formularios de registro. He hecho el mismo proceso para los tipos de entrada de 'texto' y se actualizan bien al enviar el registro. El problema que tengo es que necesito usar un tipo de entrada 'sí / no', que es una casilla de verificación en el formulario de registro.
user1669256
¿Por qué no establecer en la etiqueta html inputel atributo checkedcuando el valor de $this->getFormData()->getPublisheroffer() == 1. Tendrás que <input ... value="1" <?php echo ($this->getFormData()->getPublisheroffer() == 1): 'checked' : ''; ?>eliminar value="<?php echo $this->htmlEscape(...)"y configurar value="1"(o si no)
Sylvain Rayé
0

Puede probar el siguiente código para crear un atributo personalizado de casilla de verificación.

$customerSetup->addAttribute(Customer::ENTITY, 'customer_approved', [
            'type' => 'int',
            'label' => 'Customer Approved',
            'input' => 'boolean',
            'required' => false,
            'visible' => true,
            'user_defined' => true,
            'sort_order' => 1001,
            'position' => 1001,
            'system' => 0,
        ]);

        $attribute = $customerSetup->getEavConfig()->getAttribute(Customer::ENTITY, 'customer_approved')
        ->addData([
            'attribute_set_id' => $attributeSetId,
            'attribute_group_id' => $attributeGroupId,
            'used_in_forms' => ['adminhtml_customer'],
        ]);

        $attribute->save();

Use la entrada 'boolean' en lugar de 'checkbox'.

Henry Roger
fuente