Добавление пользовательского атрибута в форму регистрации клиента

8

Мне нужно было создать два новых атрибута клиента. Я следовал руководству от: http://www.fontis.com.au/blog/magento/know-more-about-your-customers-adding-custom-signup-attributes

создать эти атрибуты. Я проверил таблицу 'eav_attribute' в базе данных и могу подтвердить, что оба атрибута существуют. Единственное, что я не знал, как создать атрибут флажка, поэтому я создал оба атрибута как «Да / Нет».

следуя коду о том, как отобразить поле в регистрационной форме, которую я сделал:

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

Где идентификатор атрибута является «publisheroffer». Когда учетная запись создается, она создает нормально, но настраиваемые поля атрибутов не меняются.

Как отобразить этот атрибут в виде флажка на странице регистрации и как обработать значения.

Спасибо за всю помощь заранее.

user1669256
источник
Модуль поля пользовательской регистрации Magento - это действительно хороший способ продлить регистрацию пользователя в magento, очень хорошо работать с другим модулем, а также с marketplace store.webkul.com/Magento-Extensions/…
webkul

Ответы:

12

Чтобы разрешить публиковать атрибут в форме регистра и на странице некоторых других форм, вы должны установить, что атрибуты доступны для этих форм.

Для этого ниже приведен пример кода для установки в SQL. Остальную часть кода, который я использовал для моего модуля имени пользователя Magento, вы можете найти в моей учетной записи на 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();
}
Сильвен Райе
источник
Привет, атрибуты допустимы в регистрационных формах. Я проделал тот же процесс для «текстовых» типов ввода, и они прекрасно обновляются при отправке регистрации. Проблема в том, что мне нужно использовать тип ввода «да / нет», который является флажком в регистрационной форме.
user1669256
Почему бы не установить в тег HTML inputатрибут, checkedкогда значение $this->getFormData()->getPublisheroffer() == 1. Вы будете иметь, <input ... value="1" <?php echo ($this->getFormData()->getPublisheroffer() == 1): 'checked' : ''; ?>Вы должны удалить value="<?php echo $this->htmlEscape(...)"и установить value="1"(или иначе)
Сильвен Райе
0

Вы можете попробовать следующий код для создания пользовательского атрибута флажка.

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

Используйте вход «логическое» вместо «флажок».

Генри Роджер
источник