Добавить новое поле в magento (1.9) регистрация клиентов

28

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

Имя поля - номер лицензии . Я искал так много ссылок, связанных с моим требованием, но они не работают в Magento (1.9). Даже я нашел расширение, связанное с этим:

http://www.magentocommerce.com/magento-connect/custome-account-profile-13594.html

Когда я установил вышеупомянутое расширение, используя ключ, это показывает ошибку. Можете ли вы дать некоторую идею, связанную с моим требованием?

Senthil
источник
Также укажите, какую ошибку вы получаете в вышеприведенном расширении ... пожалуйста, пришлите как можно больше подробностей.
Сиддхарт Вагасия
На этот вопрос ранее уже был дан ответ: magento.stackexchange.com/questions/14163/…
tecjam

Ответы:

55

Вам нужно создать новое расширение, чтобы сделать его чистым.
Давайте назовем расширение StackExchange_Customer.
Вам понадобятся следующие файлы:

app/etc/modules/StackExchange_Customer.xml - файл декларации

<?xml version="1.0"?>
<config>
    <modules>
        <StackExchange_Customer>
            <active>true</active>
            <codePool>local</codePool>
            <depends><Mage_Customer/></depends>
        </StackExchange_Customer>
    </modules>
</config> 

app/code/local/StackExchange/Customer/etc/config.xml - файл конфигурации

<?xml version="1.0"?>
<config>
    <modules>
        <StackExchange_Customer>
            <version>1.0.0</version>
        </StackExchange_Customer>
    </modules>
    <global>
        <helpers>
            <stackexchange_customer>
                <class>StackExchange_Customer_Helper</class>
            </stackexchange_customer>
        </helpers>
        <resources>
            <stackexchange_customer_setup>
                <setup>
                    <module>StackExchange_Customer</module>
                    <class>Mage_Customer_Model_Resource_Setup</class>
                </setup>
            </stackexchange_customer_setup>
        </resources>
    </global>
    <frontend>
        <layout>
            <updates>
                <stackexchange_customer>
                    <file>stackexchange_customer.xml</file>
                </stackexchange_customer>
            </updates>
        </layout>
        <translate>
            <modules>
                <StackExchange_Customer>
                    <files>
                        <default>StackExchange_Customer.csv</default>
                    </files>
                </StackExchange_Customer>
            </modules>
        </translate>
    </frontend>
</config>

app/code/local/StackExchange/Customer/sql/stackexchange_customer_setup/install-1.0.0.php- установочный файл. Добавлю новый атрибут.

<?php
$this->addAttribute('customer', 'license_number', array(
    'type'      => 'varchar',
    'label'     => 'License Number',
    'input'     => 'text',
    'position'  => 120,
    'required'  => false,//or true
    'is_system' => 0,
));
$attribute = Mage::getSingleton('eav/config')->getAttribute('customer', 'license_number');
$attribute->setData('used_in_forms', array(
    'adminhtml_customer',
    'checkout_register',
    'customer_account_create',
    'customer_account_edit',
));
$attribute->setData('is_user_defined', 0);
$attribute->save();

app/code/local/StackExchange/Customer/Helper/Data.php - главный помощник модуля

<?php
class StackExchange_Customer_Helper_Data extends Mage_Core_Helper_Abstract
{

}

Это добавит ваш атрибут для клиента.
Это должно хорошо работать на бэкэнде.
К сожалению, вам сейчас нужно редактировать шаблоны внешнего интерфейса вручную, потому что в Magento нет ни одного события или пустого блока, куда вы можете поместить свои поля.
Для этого вам нужно следующее.

app/design/frontend/base/default/layout/stackexchange_customer.xml

<?xml version="1.0"?>
<layout>
    <customer_account_edit>
        <reference name="customer_edit">
            <action method="setTemplate">
                <template>stackexchange_customer/form/edit.phtml</template>
            </action>
        </reference>
    </customer_account_edit>
    <customer_account_create>
        <reference name="customer_form_register">
            <action method="setTemplate">
                <template>stackexchange_customer/register.phtml</template>
            </action>
        </reference>
    </customer_account_create>
</layout>

А теперь шаблоны.

app/design/frontend/base/default/template/stackexchange_customer/register.phtml- шаблон регистрации.
Для этого сделайте клон /app/design/frontend/{package}/{theme}/template/persistent/customer/form/register.phtmlи просто вставьте его где-нибудь внутри формы. Мне не нужно размещать полный файл здесь. Расставь как хочешь

<li>
    <label for="license_number"><?php echo $this->__('License Number') ?></label>
    <div class="input-box">
        <input type="text" name="license_number" id="license_number" value="<?php echo $this->escapeHtml($this->getFormData()->getLicenseNumber()) ?>" title="<?php echo $this->__('License Number') ?>" class="input-text" />
    </div>
</li>

/app/design/frontend/base/default/template/stackexchange_customer/form/edit.phtmlДля этого один клон /app/design/frontend/{package}/{theme}/template/customer/form/edit.phtmlи вставьте где-нибудь внутри формы это:

<li>
    <label for="license_number"><?php echo $this->__('License Number') ?></label>
    <div class="input-box">
        <input type="text" name="license_number" id="license_number" value="<?php echo $this->htmlEscape($this->getCustomer()->getLicenseNumber()) ?>" title="<?php echo $this->__('License Number') ?>" class="input-text" />
    </div>
</li>

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

app/locale/en_US/StackExchange_Customer.csv

"License Number","License Number"

Очистите кеш, и вы должны быть установлены.

Мариус
источник
Я следую за вами, но поле не отображается на странице пользователя.
Senthil
@senthil. Вы правы. Прости за это. Я вставил неправильный скрипт установки. Я обновил ответ с правильным app/code/local/StackExchange/Customer/sql/stackexchange_customer_setup/install-1.0.0.phpфайлом. Поскольку вы уже установили модуль, новый скрипт установки больше не будет запускаться. Чтобы запустить его снова, вам нужно удалить из таблицы eav_attributeатрибут с кодом license_numberи из таблицы core_resourceзапись с кодом StackExchange_Customer. Очистите кеш и обновите страницу. Сценарий установки должен запуститься снова.
Мариус
2
@senthil Если вы планируете добавить другие поля , которые вы должны клонировать , install-1.0.0чтобы upgrade-1.0.0-1.0.1и сделать ваши изменения в клонированный файл. Затем измените versionтег config.xmlна 1.0.1. Посмотрите, как работают скрипты обновления здесь: magento.stackexchange.com/q/26313/146
Marius
1
Привет, сэр, вы не сказали нам, как установить несколько атрибутов? Я попробовал несколько атрибутов, изменив код. До сих пор не работает . Пожалуйста, объясните
Pratik
1
@Haris, для загрузки вам, скорее всего, придется сделать что-то дополнительное, но я не знаю что.
Мариус
0

Спасибо Мариусу, только одно, поле не показывать в кассе для выставления счетов за регистрацию.

Как я могу сделать показ поля при оформлении заказа?

Благодарность

Danmar
источник