Как наделить покупателей дополнительной характеристикой?

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Игорь Сярый
  • Группа: Пользователь
  • Сообщений: 93
  • Регистрация: 22.09.2011

04.04.2012 10:39

Добрый день!
Меня интересует такой вопрос.
Можно ли при регистрации нового пользователя на странице /customer/account/create/ добавить еще поля. Я хочу чтоб там было поле "Фирма" например.
Наперед благодарен.

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

04.04.2012 10:47

Можно, конечно.
Например:

/** @var Df_Customer_Model_Resource_Setup $this */

$this->startSetup();



/* @var Mage_Customer_Helper_Address $addressHelper */
$addressHelper = Mage::helper('customer/address');


/** @var Mage_Core_Model_Store $store */
$store = Mage::app()->getStore(Mage_Core_Model_App::ADMIN_STORE_ID);


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



// update customer address user defined attributes data
$attributes = array (

    /**
     * Обратите внимание, что идентификатор характеристики
     * должен содержать не более 30 символов
     */
    'df_account_number' => array (
        'label' => 'Номер р/c'
        ,
        'frontend_label' => 'Номер р/c'
        ,
        'type' => 'varchar'
        ,
        'backend_type' => 'varchar'
        ,
        'input' => 'text'
        ,
        'frontend_input' => 'text'
        ,
        'is_user_defined' => 1
        ,
        'system' => false
        ,
        'visible' => true
        ,
        'required' => false
        ,
        'multiline_count' => 0
        ,
        'validate_rules' => array (
            'max_text_length'   => 255
            ,
            'min_text_length'   => 1
        )
        ,
        'sort_order' => 140
    )
);


foreach ($attributes as $attributeCode => $data) {

    /** @var string $attributeCode */
    /** @var array $data */

    /** @var Mage_Eav_Model_Entity_Attribute_Abstract $attribute */
    $attribute = $eavConfig->getAttribute('customer_address', $attributeCode);

    $attribute->setData('website', $store->getWebsite());

    $attribute->addData($data);


    $attribute
        ->setData(
            'used_in_forms'
            ,
            array (
                'adminhtml_customer_address'
                ,
                'customer_address_edit'
                ,
                'customer_register_address'
            )
        )
    ;

    $attribute->save();
}


$this->run ("

    ALTER TABLE {$this->getTable('sales_flat_quote_address')}
        ADD COLUMN `df_account_number`
            VARCHAR(255)
            CHARACTER SET utf8
            DEFAULT NULL
    ;

");



/**
 * Таблица sales_flat_order_address отсутствует в Magento 1.4.0.1
 * (и, может быть, в некоторых чуть более поздних версиях)
 */

/** @var Varien_Db_Adapter_Pdo_Mysql $connection  */
$connection = $this->getConnection();

/** @var bool $tableExists  */
$tableExists = false;

try {
    /** @var array $tableDescription  */
    $tableDescription = $connection->describeTable ($this->getTable('sales_flat_order_address'));
    $tableExists = !empty ($tableDescription);
}
catch (Exception $e){

}


if ($tableExists) {

    $this->run ("

        ALTER TABLE {$this->getTable('sales_flat_order_address')}
            ADD COLUMN `df_account_number`
                VARCHAR(255)
                CHARACTER SET utf8
                DEFAULT NULL
        ;

    ");

}


$this->endSetup();


Далее потребуется бизнес-логика, валидаторы, поддержка обмена данными со внешними источниками т.п.

Поделиться темой: