4

I've been searching around the forums recently and have tried many different solutions that either don't work at all or only partially work.

So the issue i am having is I need 3 new fields in the customer registration page. I have added the 3 fields on the front-end but only the "customer number" one actually works as expected & shows up in the admin panel

Customer registration page:

enter image description here

Admin backend:

enter image description here

So I got the customer number field working as i want it (shows up as 12345 at the top of the admin backend picture), but I can't get the company name or account type fields to show up in the backend. Also, the customer number field is duplicated for some reason.

Here are the files i have in my module:

Setup/InstallData.php

namespace sahib\test\Setup;

use Magento\Customer\Model\Customer;
use Magento\Customer\Setup\CustomerSetup;
use Magento\Customer\Setup\CustomerSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

class InstallData implements InstallDataInterface {

/**
 * Customer setup factory
 *
 * @var \Magento\Customer\Setup\CustomerSetupFactory
 */
private $customerSetupFactory;

public function __construct(CustomerSetupFactory $customerSetupFactory) {
    $this->customerSetupFactory = $customerSetupFactory;
}

public function install(ModuleDataSetupInterface $setup, 
ModuleContextInterface $context) {
    $setup->startSetup();
    /** @var CustomerSetup $customerSetup */
    $customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);
$customerSetup->addAttribute(Customer::ENTITY, 'companyname', [
        'label' => 'Company Name',
        'input' => 'text',
        'required' => false,
        'sort_order' => 40,
        'visible' => true,
        'system' => true,
        'is_used_in_grid' => true,
        'is_visible_in_grid' => true,
        'is_filterable_in_grid' => true,
        'is_searchable_in_grid' => true]

    );


            // add attribute to form
    /** @var  $attribute */
   $attribute = $customerSetup->getEavConfig()->getAttribute('customer', 'companyname');
    $attribute->setData('used_in_forms', ['adminhtml_customer', 'customer_account_create', ]);
    $attribute->save(); 

    $customerSetup->addAttribute(Customer::ENTITY, 'customernumber', [
        'label' => 'Customer Number',
        'input' => 'text',
        'required' => false,
        'sort_order' => 40,
        'visible' => true,
        'system' => false,
        'is_used_in_grid' => true,
        'is_visible_in_grid' => true,
        'is_filterable_in_grid' => true,
        'is_searchable_in_grid' => true]

    );


     $attribute = $customerSetup->getEavConfig()->getAttribute('customer', 'customernumber');
    $attribute->setData('used_in_forms', ['adminhtml_customer', 'customer_account_create']);
    $attribute->save(); 


    $customerSetup->addAttribute(Customer::ENTITY, 'accounttype', [
       'type' => 'text',
    'label' => 'Account Type',
    'input' => 'select',
    'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Table',
    'required' => false,
    'visible' => true,
    'user_defined' => true,
    'sort_order' => 101,
    'position' => 101,
    'system' => 0,
    'option' =>
        array (
            'values' =>
                array (
                    0 => 'Retail',
                    1 => 'Cash Account',
                    2 => 'Credit Account',
                ),
        ),
]); $attribute = $customerSetup->getEavConfig()->getAttribute('customer', 'accounttype');
    $attribute->setData('used_in_forms', ['adminhtml_customer', 'customer_account_create']);
    $attribute->save();




    $setup->endSetup();
}
}

view/frontend/layout/customer_account_create.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="form.additional.info">
    <block class="Magento\Framework\View\Element\Template" 
name="additional_info_customer_companyname" 
template="sahib_test::additionalinfocustomer.phtml"/>

</referenceContainer>

view/frontend/templates/additionalinfocustomer.phtml

<fieldset class="fieldset create account" data-hasrequired="<?php /* 
@escapeNotVerified */ echo __('* Required Fields') ?>">
<legend class="legend"><span><?php /* @escapeNotVerified */ echo 
__('Additional Information') ?></span></legend>
<p>
     <div class="field regulation">
    <label for="regulation" class="label"><span><?php /* @escapeNotVerified 
*/
            echo __('Company Name') ?></span></label>
    <div class="control">
        <input type="text" name="companyname" id="companyname" title="<?php 
/* @escapeNotVerified */ echo __('Company Name') ?>" class="input-text" 
data-validate="{required:false}">
    </div>
</div>
<div class="field regulation">
     <label for="regulation" class="label"><span><?php /* @escapeNotVerified 
*/
            echo __('Customer Number') ?></span></label>
    <div class="control">
        <input type="text" name="customernumber" id="customernumber" title="
<?php /* @escapeNotVerified */ echo __('Customer Number') ?>" class="input-
text" 
data-validate="{required:false}">
    </div>
</div>

<div class="field regulation">
    <label for="regulation" class="label"><span><?php /* @escapeNotVerified 
*/
            echo __('Account Type') ?></span></label>
    <div class="control">
        <input type="dropdown" name="accounttype" id="accounttype" title="<?
php /* @escapeNotVerified */ echo __('Account Type') ?>" class="input-
select" data-validate="{required:false}">
    </div>
</div>
</p>
</fieldset>

Thanks!

1
  • I have added your code and in my front end it doesn't show any Additional Fields in my front end. please help me with that !
    – Prits
    Jun 5, 2020 at 10:09

1 Answer 1

1

phtml file : view/frontend/templates/form/register.phtml

<?php echo $block->getChildHtml('form_fields_before')?>
<?php /* Extensions placeholder */ ?>
<?php echo $block->getChildHtml('customer.form.register.extra')?>
<form class="form create account form-create-account" action="<?php /* @escapeNotVerified */ echo $block->getPostActionUrl() ?>" method="post" id="form-validate" enctype="multipart/form-data" autocomplete="off">
    <fieldset class="fieldset create info">
        <legend class="legend"><span><?php /* @escapeNotVerified */ echo __('Personal Information') ?></span></legend><br>
        <input type="hidden" name="success_url" value="<?php /* @escapeNotVerified */ echo $block->getSuccessUrl() ?>">
        <input type="hidden" name="error_url" value="<?php /* @escapeNotVerified */ echo $block->getErrorUrl() ?>">
        <?php echo $block->getLayout()->createBlock('Magento\Customer\Block\Widget\Name')->setObject($block->getFormData())->setForceUseCustomerAttributes(true)->toHtml() ?>
        <?php if ($block->isNewsletterEnabled()): ?>
            <div class="field choice newsletter">
                <input type="checkbox" name="is_subscribed" title="<?php /* @escapeNotVerified */ echo __('Sign Up for Newsletter') ?>" value="1" id="is_subscribed"<?php if ($block->getFormData()->getIsSubscribed()): ?> checked="checked"<?php endif; ?> class="checkbox">
                <label for="is_subscribed" class="label"><span><?php /* @escapeNotVerified */ echo __('Sign Up for Newsletter') ?></span></label>
            </div>
            <?php /* Extensions placeholder */ ?>
            <?php echo $block->getChildHtml('customer.form.register.newsletter')?>
        <?php endif ?>

        <?php $_dob = $block->getLayout()->createBlock('Magento\Customer\Block\Widget\Dob') ?>
        <?php if ($_dob->isEnabled()): ?>
            <?php echo $_dob->setDate($block->getFormData()->getDob())->toHtml() ?>
        <?php endif ?>

        <?php $_taxvat = $block->getLayout()->createBlock('Magento\Customer\Block\Widget\Taxvat') ?>
        <?php if ($_taxvat->isEnabled()): ?>
            <?php echo $_taxvat->setTaxvat($block->getFormData()->getTaxvat())->toHtml() ?>
        <?php endif ?>

        <?php $_gender = $block->getLayout()->createBlock('Magento\Customer\Block\Widget\Gender') ?>
        <?php if ($_gender->isEnabled()): ?>
            <?php echo $_gender->setGender($block->getFormData()->getGender())->toHtml() ?>
        <?php endif ?>
    </fieldset>
    <?php if ($block->getShowAddressFields()): ?>
        <fieldset class="fieldset address">
            <legend class="legend"><span><?php /* @escapeNotVerified */ echo __('Address Information') ?></span></legend><br>
            <input type="hidden" name="create_address" value="1" />
            <div class="field company">
                <label for="company" class="label"><span><?php /* @escapeNotVerified */ echo __('Company') ?></span></label>
                <div class="control">
                    <input type="text" name="company" id="company" value="<?php echo $block->escapeHtml($block->getFormData()->getCompany()) ?>" title="<?php /* @escapeNotVerified */ echo __('Company') ?>" class="input-text <?php /* @escapeNotVerified */ echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('company') ?>">
                </div>
            </div>
            <div class="field telephone">
                <label for="telephone" class="label"><span><?php /* @escapeNotVerified */ echo __('Phone Number') ?></span></label>
                <div class="control">
                    <input type="text" name="telephone" id="telephone" value="<?php echo $block->escapeHtml($block->getFormData()->getTelephone()) ?>" title="<?php /* @escapeNotVerified */ echo __('Phone Number') ?>" class="input-text <?php /* @escapeNotVerified */ echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('telephone') ?>">
                </div>
            </div>

            <?php $_streetValidationClass = $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('street'); ?>

            <div class="field street required">
                <label for="street_1" class="label"><span><?php /* @escapeNotVerified */ echo __('Street Address') ?></span></label>
                <div class="control">
                    <input type="text" name="street[]" value="<?php echo $block->escapeHtml($block->getFormData()->getStreet(0)) ?>" title="<?php /* @escapeNotVerified */ echo __('Street Address') ?>" id="street_1" class="input-text <?php /* @escapeNotVerified */ echo $_streetValidationClass ?>">
                    <div class="nested">
                        <?php $_streetValidationClass = trim(str_replace('required-entry', '', $_streetValidationClass)); ?>
                        <?php for ($_i = 2, $_n = $this->helper('Magento\Customer\Helper\Address')->getStreetLines(); $_i <= $_n; $_i++): ?>
                            <div class="field additional">
                                <label class="label" for="street_<?php /* @escapeNotVerified */ echo $_i ?>">
                                    <span><?php /* @escapeNotVerified */ echo __('Address') ?></span>
                                </label>
                                <div class="control">
                                    <input type="text" name="street[]" value="<?php echo $block->escapeHtml($block->getFormData()->getStreetLine($_i - 1)) ?>" title="<?php /* @escapeNotVerified */ echo __('Street Address %1', $_i) ?>" id="street_<?php /* @escapeNotVerified */ echo $_i ?>" class="input-text <?php /* @escapeNotVerified */ echo $_streetValidationClass ?>">
                                </div>
                            </div>
                        <?php endfor; ?>
                    </div>
                </div>
            </div>

            <div class="field required">
                <label for="city" class="label"><span><?php /* @escapeNotVerified */ echo __('City') ?></span></label>
                <div class="control">
                    <input type="text" name="city" value="<?php echo $block->escapeHtml($block->getFormData()->getCity()) ?>" title="<?php /* @escapeNotVerified */ echo __('City') ?>" class="input-text <?php /* @escapeNotVerified */ echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('city') ?>" id="city">
                </div>
            </div>

            <div class="field region required">
                <label for="region_id" class="label"><span><?php /* @escapeNotVerified */ echo __('State/Province') ?></span></label>
                <div class="control">
                    <select id="region_id" name="region_id" title="<?php /* @escapeNotVerified */ echo __('State/Province') ?>" class="validate-select" style="display:none;">
                        <option value=""><?php /* @escapeNotVerified */ echo __('Please select a region, state or province.') ?></option>
                    </select>
                    <input type="text" id="region" name="region" value="<?php echo $block->escapeHtml($block->getRegion()) ?>" title="<?php /* @escapeNotVerified */ echo __('State/Province') ?>" class="input-text <?php /* @escapeNotVerified */ echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('region') ?>" style="display:none;">
                </div>
            </div>

            <div class="field zip required">
                <label for="zip" class="label"><span><?php /* @escapeNotVerified */ echo __('Zip/Postal Code') ?></span></label>
                <div class="control">
                    <input type="text" name="postcode" value="<?php echo $block->escapeHtml($block->getFormData()->getPostcode()) ?>" title="<?php /* @escapeNotVerified */ echo __('Zip/Postal Code') ?>" id="zip" class="input-text validate-zip-international <?php /* @escapeNotVerified */ echo $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('postcode') ?>">
                </div>
            </div>

            <div class="field country required">
                <label for="country" class="label"><span><?php /* @escapeNotVerified */ echo __('Country') ?></span></label>
                <div class="control">
                    <?php echo $block->getCountryHtmlSelect() ?>
                </div>
            </div>
            <?php $addressAttributes = $block->getChildBlock('customer_form_address_user_attributes');?>
            <?php if ($addressAttributes): ?>
                <?php $addressAttributes->setEntityType('customer_address'); ?>
                <?php $addressAttributes->setFieldIdFormat('address:%1$s')->setFieldNameFormat('address[%1$s]');?>
                <?php $block->restoreSessionData($addressAttributes->getMetadataForm(), 'address');?>
                <?php echo $addressAttributes->setShowContainer(false)->toHtml()?>
            <?php endif;?>
            <input type="hidden" name="default_billing" value="1">
            <input type="hidden" name="default_shipping" value="1">
        </fieldset>

    <?php endif; ?>
    <fieldset class="fieldset create account" data-hasrequired="<?php /* @escapeNotVerified */ echo __('* Required Fields') ?>">
        <legend class="legend"><span><?php /* @escapeNotVerified */ echo __('Sign-in Information') ?></span></legend><br>
        <div class="field required">
            <label for="email_address" class="label"><span><?php /* @escapeNotVerified */ echo __('Email') ?></span></label>
            <div class="control">
                <input type="email" name="email" autocomplete="email" id="email_address" value="<?php echo $block->escapeHtml($block->getFormData()->getEmail()) ?>" title="<?php /* @escapeNotVerified */ echo __('Email') ?>" class="input-text" data-validate="{required:true, 'validate-email':true}">
            </div>
        </div>
        <!-- Right your code which field you want to add -->


        <div class="field password required" data-mage-init='{"passwordStrengthIndicator": {}}'>
            <label for="password" class="label"><span><?php /* @escapeNotVerified */ echo __('Password') ?></span></label>
            <div class="control">
                <input type="password" name="password" id="password"
                       title="<?php /* @escapeNotVerified */ echo __('Password') ?>"
                       class="input-text"
                       data-password-min-length="<?php echo $block->escapeHtml($block->getMinimumPasswordLength()) ?>"
                       data-password-min-character-sets="<?php echo $block->escapeHtml($block->getRequiredCharacterClassesNumber()) ?>"
                       data-validate="{required:true, 'validate-customer-password':true}"
                       autocomplete="off">
                <div id="password-strength-meter-container" data-role="password-strength-meter" >
                    <div id="password-strength-meter" class="password-strength-meter">
                        <?php /* @escapeNotVerified */ echo __('Password Strength'); ?>:
                        <span id="password-strength-meter-label" data-role="password-strength-meter-label" >
                            <?php /* @escapeNotVerified */ echo __('No Password'); ?>
                        </span>
                    </div>
                </div>
            </div>

        </div>
        <div class="field confirmation required">
            <label for="password-confirmation" class="label"><span><?php /* @escapeNotVerified */ echo __('Confirm Password') ?></span></label>
            <div class="control">
                <input type="password" name="password_confirmation" title="<?php /* @escapeNotVerified */ echo __('Confirm Password') ?>" id="password-confirmation" class="input-text" data-validate="{required:true, equalTo:'#password'}" autocomplete="off">
            </div>
        </div>
        <?php echo $block->getChildHtml('form_additional_info'); ?>
    </fieldset>
    <div class="actions-toolbar">
        <div class="primary">
            <button type="submit" class="action submit primary" title="<?php /* @escapeNotVerified */ echo __('Create an Account') ?>"><span><?php /* @escapeNotVerified */ echo __('Create an Account') ?></span></button>
        </div>
        <div class="secondary">
            <a class="action back" href="<?php echo $block->escapeUrl($block->getBackUrl()) ?>"><span><?php /* @escapeNotVerified */ echo __('Back') ?></span></a>
        </div>
    </div>
</form>
<script>
require([
    'jquery',
    'mage/mage'
], function($){

    var dataForm = $('#form-validate');
    var ignore = <?php /* @escapeNotVerified */ echo $_dob->isEnabled() ? '\'input[id$="full"]\'' : 'null'; ?>;

    dataForm.mage('validation', {
    <?php if ($_dob->isEnabled()): ?>
        errorPlacement: function(error, element) {
            if (element.prop('id').search('full') !== -1) {
                var dobElement = $(element).parents('.customer-dob'),
                    errorClass = error.prop('class');
                error.insertAfter(element.parent());
                dobElement.find('.validate-custom').addClass(errorClass)
                    .after('<div class="' + errorClass + '"></div>');
            }
            else {
                error.insertAfter(element);
            }
        },
        ignore: ':hidden:not(' + ignore + ')'
    <?php else: ?>
        ignore: ignore ? ':hidden:not(' + ignore + ')' : ':hidden'
    <?php endif ?>
    }).find('input:text').attr('autocomplete', 'off');
});
</script>
<?php if ($block->getShowAddressFields()): ?>
<script type="text/x-magento-init">
    {
        "#country": {
            "regionUpdater": {
                "optionalRegionAllowed": <?php /* @escapeNotVerified */ echo($block->getConfig('general/region/display_all') ? 'true' : 'false'); ?>,
                "regionListId": "#region_id",
                "regionInputId": "#region",
                "postcodeId": "#zip",
                "form": "#form-validate",
                "regionJson": <?php /* @escapeNotVerified */ echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>,
                "defaultRegion": "<?php /* @escapeNotVerified */ echo $block->getFormData()->getRegionId() ?>",
                "countriesWithOptionalZip": <?php /* @escapeNotVerified */ echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?>
            }
        }
    }
</script>
<?php endif; ?>

layout file : view/frontend/layout/customer_account_create.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">

        <referenceBlock name="customer_form_register">
            <action method="setTemplate">
                <argument name="template" xsi:type="string">Company_Module::form/register.phtml</argument>
            </action>
         </referenceBlock>
</page>
2
  • I just tried this exact code and im still having the same issue. Customer number is stored and appears in the admin panel but the account type and company name do not. Any ideas? Thanks for the help!
    – schmeeb
    Aug 31, 2017 at 13:50
  • I have added your code and in my front end it doesn't show any Additional Fields in my front end. please help me with that !
    – Prits
    Jun 5, 2020 at 10:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.