Ajout d'un attribut personnalisé au formulaire d'inscription client

8

J'avais besoin de créer deux nouveaux attributs client. J'ai suivi le guide sur: http://www.fontis.com.au/blog/magento/know-more-about-your-customers-adding-custom-signup-attributes

pour créer ces attributs. J'ai vérifié la table 'eav_attribute' dans la base de données et je peux confirmer que les deux attributs existent. La seule chose était que je ne savais pas comment créer un attribut de case à cocher, j'ai donc créé les deux attributs comme «Oui / Non».

de suivre le code sur la façon d'afficher le champ sur le formulaire d'inscription que j'ai fait:

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

Où l'identifiant d'attribut est 'publisheroffer'. Lorsque le compte est créé, il se crée correctement mais les champs d'attributs personnalisés ne changent pas.

Comment afficher cet attribut sous forme de case à cocher sur la page d'inscription et comment traiter les valeurs.

Merci pour toute l'aide à l'avance.

user1669256
la source
Le module de champ d'enregistrement personnalisé de Magento est vraiment un bon moyen d'étendre l'enregistrement des utilisateurs de Magento, fonctionne très bien avec d'autres modules ainsi que marketplace store.webkul.com/Magento-Extensions/…
webkul

Réponses:

12

Pour permettre de publier un attribut dans le formulaire d'inscription et dans d'autres pages de formulaire, vous devez définir que le ou les attributs sont disponibles pour ces formulaires.

Pour ce faire, voici un exemple de code à mettre dans votre configuration SQL ci-dessous. Vous pouvez trouver le reste du code que j'ai utilisé pour mon module de nom d'utilisateur Magento sur mon compte 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é
la source
Bonjour, les attributs sont autorisés sur les formulaires d'inscription. J'ai fait le même processus pour les types d'entrée «texte» et ils se mettent à jour correctement lors de la soumission de l'inscription. Le problème que je rencontre est que je dois utiliser un type d'entrée «oui / non» qui est une case à cocher sur le formulaire d'inscription.
user1669256
Pourquoi ne pas définir dans la balise html inputl'attribut checkedlorsque la valeur de $this->getFormData()->getPublisheroffer() == 1. Vous aurez <input ... value="1" <?php echo ($this->getFormData()->getPublisheroffer() == 1): 'checked' : ''; ?>Vous devriez retirer value="<?php echo $this->htmlEscape(...)"et régler value="1"(ou bien)
Sylvain Rayé
0

Vous pouvez essayer le code suivant pour créer un attribut personnalisé de case à cocher.

$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();

Utilisez l'entrée «booléen» au lieu de «case à cocher».

Henry Roger
la source