Как создать пользовательские поля, такие как номер мобильного телефона, в форме регистрации клиента без изменения основных файлов magento? - PullRequest
4 голосов
/ 29 сентября 2010

Как создать настраиваемые поля, такие как номер мобильного телефона, в форме регистрации клиента без изменения основных файлов magento? Я пытался, но номер мобильного телефона не сохраняется в БД

Я переопределил класс Mage_Customer_Model_Entity_Setup с помощью Myown_Mage_Customer_Model_Entity_Setup, создав Model / Entity / Setup.php в папке моих модулей и добавив следующий код в массив в getDefaultEntities

'mobilenumber' => array(
                        'label'        => 'Mobile Number',
                        'visible'    => true,
                        'required'    => true,
                    ),

также мой конфигурационный файл содержит следующий код

<models>
        <customer_entity>
            <rewrite>
                  <customer>Myown_Mage_Customer_Model_Entity_Setup</customer>
            </rewrite>
        </customer_entity>
    </models>

Также у меня есть это поле в шаблоне / customer / form / register.phtml

<input type="text" name="mobilenumber" id="mobilenumber" value="<?php echo $this->htmlEscape($this->getFormData()->getMobilenumber()) ?>" title="<?php echo $this->__('Mobile Number') ?>" class="required-entry input-text" />  

Есть ли что-то, чего мне не хватает в этой конфигурации? Я хочу сохранить номер мобильного телефона в БД и впоследствии восстановить его.

Ответы [ 2 ]

1 голос
/ 01 октября 2010

Мне пришлось создать аналогичное поле (в данном случае refer_by) для клиента Enterprise, так что вот как это произошло:

Сначала я создал модуль, в котором было бы все это забавно.Я добавил свою собственную запись настройки сущности для клиента, чтобы мне не пришлось полагаться на стандартную клиентскую или переписывать какие-либо модели без необходимости (со временем вы начинаете конфликтовать с самим собой при переписывании).Похоже, ваш код сущности работает, так что вы сами можете его реорганизовать.

Затем я добавил поле в наборы полей клиента, что, похоже, поможет Magento понять, какие данные сохранить в базе данных:

<global>
    <fieldsets>
        <customer_account>
            <referred_by>
                <create>1</create>
                <update>0</update>
                <to_order>customer_referred_by</to_order>
            </referred_by>
        </customer_account>
    </fieldsets> 
</global>

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

class Company_Module_Model_Checkout_Type_Onepage extends Mage_Checkout_Model_Type_Onepage {
    public function saveBilling($data, $customerAddressId) {
        if (isset($data['referred_by'])) {
            // set referred for later use.
            $session    = Mage::getSingleton("customer/session");
            $session->setData("referred_by", $data['referred_by']);
        }

        return parent::saveBilling($data, $customerAddressId);
    }//end saveBilling
}

И:

<global>
    <models>
        <checkout>
            <rewrite>
                <type_onepage>Company_Module_Model_Checkout_Type_Onepage</type_onepage>
            </rewrite>
        </checkout>
    </models>   
</global>

После этого данные были правильно сохранены в базе данных.Ура!

Надеюсь, это поможет!Спасибо, Джо

0 голосов
/ 02 октября 2010

Относительно вашего кода:

  1. Вам не нужно переопределять Mage_Customer_Model_Entity_Setup, поскольку этот класс используется только для установки атрибутов клиента.Решение состоит в том, чтобы иметь свой собственный класс установки, который наследуется от Mage_Customer_Model_Entity_Setup.

  2. Вам также нужен установочный файл mysql4-install

Чтобы увидеть, как именно добавить новые атрибуты для клиента, посмотрите этот модуль magento.сделано: https://code.google.com/p/magento-code-snippets/source/browse/#svn/trunk/PWS_ExtCustomerFields

...