Как добавить новое поле на форму регистрации?

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Антон Коробко
  • Группа: Клиент
  • Сообщений: 30
  • Регистрация: 14.01.2015

03.07.2015 07:32

Пишу первый свой модуль, задача которого в форму регистрацию добавить одно поле varchar. И ошибка где-то самая простая потому как информация в табл core_resorce не появляется, и объявление моего атрибута в eav_attribute соответственно тоже нет.

помогите разобраться в чем проблема моя

кратко что куда положила и что написала:

1. /var/www/magento/app/etc/modules

kmv_Phone4Registration.xml

<?xml version="1.0"?>
<config>
    <modules>
        <kmv_Phone4Registration>
            <active>true</active>
            <codePool>local</codePool>
        </kmv_Phone4Registration>
    </modules>
</config> 


2. /var/www/magento/app/code/local/kmv/Phone4Registration/etc

config.xml

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


3. /var/www/magento/app/code/local/kmv/Phone4Registration/sql/kmv_Phone4Registration_setup

install-1.0.0.php

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


4. /var/www/magento/app/code/local/kmv/Phone4Registration/Helper

Data.php

<?php
class kmv_Phone4Registration_Helper_Data extends Mage_Core_Helper_Abstract
{

}


5. /var/www/magento/app/design/frontend/bio/default/layout

kmv_Phone4Registration.xml

<?xml version="1.0"?>

<layout>
    <customer_account_edit>
        <reference name="customer_edit">
            <action method="setTemplate">
                <template>kmv_Phone4Registration/form/edit.phtml</template>
            </action>
        </reference>
    </customer_account_edit>
    <customer_account_create>
        <reference name="customer_form_register">
            <action method="setTemplate">
                <template>kmv_Phone4Registration/register.phtml</template>
            </action>
        </reference>
    
</layout>


6. app/design/frontend/bio/default/template/kmv_Phone4Registration/register.phtml

тут файл скопировала из /var/www/magento/app/design/frontend/bio/default/template/persistent/customer/form
и добавила поле

<li>
							1111<label for="phone"><?php echo $this->__('Phone') ?></label>
							<div class="input-box">
								<input type="text" name="phone" id="phone" value="<?php echo $this->escapeHtml($this->getFormData()->getPhone()) ?>" title="<?php echo $this->__('Phone') ?>" class="input-text" />
							</div>
						</li>


и тоже самое для формы
/app/design/frontend/bio/default/template/kmv_Phone4Registration/form/edit.phtml из (/template/customer/form/edit.phtml)

добавила

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


7. создала файлы переводов..


пожалуйста направьте меня, где моя ошибка, почему модуль мой не устанавливается. :(

Российская сборка Magento 2.43.15 (1.9.1.1)

#2 Антон Коробко
  • Группа: Клиент
  • Сообщений: 30
  • Регистрация: 14.01.2015

03.07.2015 10:05

P.S.: смотрела вашу темку http://magento-forum.ru/topic/842/ по добавлению поля в регистрационную форму, но там шаги 12 и 13 не совместимы с моей версией, так как те файлы которые там указаны практически пустые.. да и подход правки в папке core/code не хочется применять, так как при переходе на новые версии могут затереться мои правки

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

03.07.2015 15:00

Вы решаете те задачи, которые не нужно решать.
Как я уже говорил 5 дней назад, за 8 лет существования Magento все модули для общеупотребительных и неспецифичных для России задач уже написаны.
По последним данным (май 2015 года), 30% всех интернет-магазинов в мире работают на Magento (25.3% - на Magento Community Edition и 4.5% - на Magento Enterprise Edition).
http://blog.aheadworks.com/2015/05/ecommerce-platforms-popularity-may-2015-two-platforms-take-half/

30% от всех интернет магазинов мира - это очень много, сотни тысяч реально работающих магазинов.
Как Вы думаете, скольким владельцам, сотрудникам, администраторам этих магазинов ранее приходила мысль добавлять нестандартное поле на форму регистрации?
Просто используйте какой-нибудь готовый модуль.
Как находить подобные модули - я уже говорил.
Начните с самого очевидного запроса magento custom registration field
Далее аккуратно уточняйте семантическое ядро в соответствии со своими потребностями.
Если Вашим потребностям удовлетворяет только платный модуль, а бесплатных нет, то оцените, сколько стоит Ваш рабочий день (для Вас, для Вашего работодателя), и сколько таких дней потребуется для разработки своего модуля.

Если модуль нужен Вам не для промышленной эксплуатации, а для собственного обучения созданию модулей, то, используя оценку выше стоимости своего рабочего дня, явно говорите себе: "да, я действительно готов потратить на обучение 1 неделю (или сколько там) своего рабочего времени и это будет стоить мне <...>".
Если Вы идёте на это, то не пишите модуль с нуля. Возьмите готовый рабочий модуль с открытым исходным кодом, максимально близкий к Вашим потребностям, и потихоньку его переделывайте, всё время проверяя, не поломали ли Вы его работоспособность. Таким образом:
  • У Вас всегда будет рабочий модуль
  • Вы точно будете знать, как конкретно Вы его поломали


#4 Антон Коробко
  • Группа: Клиент
  • Сообщений: 30
  • Регистрация: 14.01.2015

03.07.2015 20:16

спасибо за ответ! неплохая идея учится на чужих решениях и дорабатывать. Да мне интересно самой несложные проблемы решать, вчасности написать модуль.

А как изначально понять код окрыт или нет до установки? или надо только ставить, а потом уже смотреть файлы..

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

03.07.2015 20:18

Либо прочитать на сайте разработчика, либо (если на сайте явно не написано) - спросить у самого разработчика.

#6 Антон Коробко
  • Группа: Клиент
  • Сообщений: 30
  • Регистрация: 14.01.2015

03.07.2015 21:14

ясненько... ну вот просмотрела модули - поля для регистрации дополнительные, либо платные, либо бесплатные с низким рейтингом, которые под версию 1.9 у людей не становится либо становится с глюками.. тоже самое было когда я искала модуль с Ниво-слайдером из 4 бесплатных модулей ниодин так и не зароботал :(( вот поэтому такие мелочи хотелось бы самому разобраться и писать, а вот аякс-корзину понятное дело лучше купить.

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

03.07.2015 21:33

Ну, бывают ситуации, когда 50 долларов на модуль - это дороже, чем собственное время.
В такой ситуации разумно не инвестировать сразу неделю своего рабочего времени на разработку функциональности модуля с нуля, а лучше поступить осторожнее и инвестировать сначала несколько часов в изучение функциональности имеющихся в открытом доступе модулей.
Пусть у них и отзывы плохие, но у кого-то же они работают.
Постарайтесь запустить их, следуя рекомендациям автора (пусть даже на старой версии Magento для начала, и, разумеется, не на промышленном магазине, а на тестовом).
Если получится запустить - то это уже хорошо: можно будет посмотреть их исходный код, понять, как вообще подобная функциональность работает.
Если что-то будет работать неправильно - то это будет хорошая задача для обучения: намного разумнее учиться на доработке чужого модуля, чем разрабатывать свой с нуля.
Ещё одна разумная альтернатива при отсутствии денег - не делать подобную функциональность сейчас вообще. Заработает интернет-магазин достаточно денег - тогда и купите нормальный модуль, а сейчас может лучше сконцентрироваться на чём-то другом, что действительно способно повысить продажи в интернет-магазине.

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