Incluindo Atributo Customizado no Formulário de Registro do Cliente

8

Eu precisava criar dois novos atributos de cliente. Segui o guia em: http://www.fontis.com.au/blog/magento/know-more-about-your-customers-adding-custom-signup-attributes

para criar esses atributos. Verifiquei a tabela 'eav_attribute' no banco de dados e posso confirmar se os dois atributos existem. A única coisa é que eu não sabia como criar um atributo de caixa de seleção, então criei os dois atributos como 'Sim / Não'.

de seguir o código sobre como exibir o campo no formulário de registro que fiz:

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

Onde o ID do atributo é 'publisheroffer'. Quando a conta é criada, ela cria uma multa, mas os campos de atributos personalizados não são alterados.

Como exibir esse atributo como uma caixa de seleção na página de registro e como processar os valores.

Obrigado por toda a ajuda com antecedência.

user1669256
fonte
Módulo de campo de registro personalizado Magento é realmente agradável maneira de estender magento registo do utilizador, o trabalho muito bem com outro módulo, bem como marketplace store.webkul.com/Magento-Extensions/...
webkul

Respostas:

12

Para permitir a publicação de um atributo no formulário de registro e em algumas outras páginas do formulário, é necessário definir que os atributos estão disponíveis para esses formulários.

Para fazer isso, aqui está um código de exemplo para colocar na sua configuração sql abaixo. Você pode encontrar o restante do código que usei para o meu módulo Magento Username na minha conta do 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é
fonte
Olá, os atributos são permitidos nos formulários de inscrição. Fiz o mesmo processo para os tipos de entrada 'texto' e eles são atualizados com o envio do registro. O problema que estou tendo é que preciso usar um tipo de entrada 'sim / não', que é uma caixa de seleção no formulário de registro.
user1669256
Por que não definir na tag html inputo atributo checkedquando o valor de $this->getFormData()->getPublisheroffer() == 1. Você terá <input ... value="1" <?php echo ($this->getFormData()->getPublisheroffer() == 1): 'checked' : ''; ?>que remover value="<?php echo $this->htmlEscape(...)"e configurar value="1"(ou então)
Sylvain Rayé
0

Você pode tentar o código a seguir para criar um atributo personalizado da caixa de seleção.

$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 a entrada 'boolean' em vez de 'caixa de seleção'.

Henry Roger
fonte