Magento 2- Como adicionar um campo personalizado no cadastro do cliente (disponível apenas para o Admin)

O campo personalizado de exemplo que iremos adicionar é o corporate_id, tipo String “TYPE_TEXT”.

Todos os arquivos no vendor files

customer_form.xml

<field name="corporate_id">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="label" xsi:type="string" translate="true">Corporate ID</item>
 <item name="dataType" xsi:type="string">text</item>
 <item name="formElement" xsi:type="string">input</item>
 <item name="source" xsi:type="string">customer</item>
 </item>
 </argument>
...

customer_list.xml

...
<column name="corporate_id">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="filter" xsi:type="string">text</item>
 <item name="label" xsi:type="string" translate="true">Corporate ID</item>
 <item name="sortOrder" xsi:type="number">30</item>
 </item>
 </argument>
</column>

installSchema.xml

/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */

namespace Magento\Customer\Setup;

use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;

/**
 * @codeCoverageIgnore
 */
class InstallSchema implements InstallSchemaInterface
{
 /**
 * {@inheritdoc}
 * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
 */
 public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
 {
 $installer = $setup;
 $installer->startSetup();

 /**
 * Create table 'customer_entity'
 */
 $table = $installer->getConnection()->newTable(
 $installer->getTable('customer_entity')
 )->addColumn(
 'entity_id',
 \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
 null,
 ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
 'Entity Id'
 )->addColumn(
 'website_id',
 \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
 null,
 ['unsigned' => true],
 'Website Id'
 )->addColumn(
 'email',
 \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
 255,
 [],
 'Email'
 )->addColumn(
 'corporate_id',
 \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
 255,
 [],
 'Corporate Id'
 )->addColumn(
 'group_id',
 \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
 null,
 ['unsigned' => true, 'nullable' => false, 'default' => '0'],
 'Group Id'
 ['unsigned' => true, 'nullable' => true, 'default' => null],
 'Default Billing Address'
 )->addIndex(
 $installer->getIdxName(
 'customer_entity',
 ['email', 'website_id'],
 \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE
 ),
 ['email', 'website_id'],
 ['type' => \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE]
 )->addIndex(
 $installer->getIdxName('customer_entity', ['website_id']),
 ['website_id']
 )->addIndex(
 $installer->getIdxName('customer_entity', ['firstname']),
 ['firstname']
 )->addIndex(
 $installer->getIdxName('customer_entity', ['corporate_id']),
 ['corporate_id']
 )->addIndex(
 $installer->getIdxName('customer_entity', ['lastname']),
 ['lastname']
 )->addForeignKey(
 $installer->getFkName('customer_entity', 'store_id', 'store', 'store_id'),
 'store_id',
 $installer->getTable('store'),
 'store_id',
 \Magento\Framework\DB\Ddl\Table::ACTION_SET_NULL
 )->addForeignKey(
 $installer->getFkName('customer_entity', 'website_id', 'store_website', 'website_id'),
 'website_id',
 $installer->getTable('store_website'),
 'website_id',
 \Magento\Framework\DB\Ddl\Table::ACTION_SET_NULL
 )->setComment(
 'Customer Entity'
 );
 $installer->getConnection()->createTable($table);

 /**
 * Create table 'customer_address_entity'
 */
 
 /**
 * Create table 'customer_eav_attribute_website'
 */
 $table = $installer->getConnection()->newTable(
 $installer->getTable('customer_eav_attribute_website')
 )->addColumn(
 'attribute_id',
 \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
 null,
 ['unsigned' => true, 'nullable' => false, 'primary' => true],
 'Attribute Id'
 )->addColumn(
 'website_id',
 \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
 null,
 ['unsigned' => true, 'nullable' => false, 'primary' => true],
 'Website Id'
 )->addColumn(
 'is_visible',
 \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
 null,
 ['unsigned' => true],
 'Is Visible'
 )->addColumn(
 'is_required',
 \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
 null,
 ['unsigned' => true],
 'Is Required'
 )->addColumn(
 'default_value',
 \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
 '64k',
 [],
 'Default Value'
 )->addColumn(
 'multiline_count',
 \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
 null,
 ['unsigned' => true],
 'Multiline Count'
 )->addIndex(
 $installer->getIdxName('customer_eav_attribute_website', ['website_id']),
 ['website_id']
 )->addForeignKey(
 $installer->getFkName('customer_eav_attribute_website', 'attribute_id', 'eav_attribute', 'attribute_id'),
 'attribute_id',
 $installer->getTable('eav_attribute'),
 'attribute_id',
 \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
 )->addForeignKey(
 $installer->getFkName('customer_eav_attribute_website', 'website_id', 'store_website', 'website_id'),
 'website_id',
 $installer->getTable('store_website'),
 'website_id',
 \Magento\Framework\DB\Ddl\Table::ACTION_CASCADE
 )->setComment(
 'Customer Eav Attribute Website'
 );
 $installer->getConnection()->createTable($table);

 /**
 * Create table 'customer_visitor'
 */
 $table = $installer->getConnection()->newTable(
 $installer->getTable('customer_visitor')
 )->addColumn(
 'visitor_id',
 \Magento\Framework\DB\Ddl\Table::TYPE_BIGINT,
 null,
 ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
 'Visitor ID'
 )->addColumn(
 'customer_id',
 \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
 null,
 [],
 'Customer Id'
 )->addColumn(
 'session_id',
 \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
 64,
 ['nullable' => true, 'default' => null],
 'Session ID'
 )->addColumn(
 'last_visit_at',
 \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
 null,
 ['nullable' => false],
 'Last Visit Time'
 )->addIndex(
 $installer->getIdxName('customer_visitor', ['customer_id']),
 ['customer_id']
 )->setComment(
 'Visitor Table'
 );
 $installer->getConnection()->createTable($table);

 $table = $installer->getConnection()
 ->newTable(
 $installer->getTable('customer_log')
 )
 ->addColumn(
 'log_id',
 \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
 null,
 [
 'nullable' => false,
 'identity' => true,
 'primary' => true
 ],
 'Log ID'
 )
 ->addColumn(
 'customer_id',
 \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
 null,
 [
 'nullable' => false
 ],
 'Customer ID'
 )
 ->addColumn(
 'last_login_at',
 \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
 null,
 [
 'nullable' => true,
 'default' => null
 ],
 'Last Login Time'
 )
 ->addColumn(
 'last_logout_at',
 \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP,
 null,
 [
 'nullable' => true,
 'default' => null
 ],
 'Last Logout Time'
 )
 ->addIndex(
 $installer->getIdxName(
 $installer->getTable('customer_log'),
 ['customer_id'],
 \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE
 ),
 ['customer_id'],
 [
 'type' => \Magento\Framework\DB\Adapter\AdapterInterface::INDEX_TYPE_UNIQUE
 ]
 )
 ->setComment('Customer Log Table');
 $installer->getConnection()->createTable($table);

 $installer->endSetup();

 }
}

customerSetup.xml

public function getDefaultEntities(){
 $entities = [
 'customer' => [
 'entity_type_id' => \Magento\Customer\Api\CustomerMetadataInterface::ATTRIBUTE_SET_ID_CUSTOMER,
 'entity_model' => 'Magento\Customer\Model\ResourceModel\Customer',
 'attribute_model' => 'Magento\Customer\Model\Attribute',
 'table' => 'customer_entity',
 'increment_model' => 'Magento\Eav\Model\Entity\Increment\NumericValue',
 'additional_attribute_table' => 'customer_eav_attribute',
 'entity_attribute_collection' => 'Magento\Customer\Model\ResourceModel\Attribute\Collection',
 'attributes' => [
 'website_id' => [
 'type' => 'static',
 'label' => 'Associate to Website',
 'input' => 'select',
 'source' => 'Magento\Customer\Model\Customer\Attribute\Source\Website',
 'backend' => 'Magento\Customer\Model\Customer\Attribute\Backend\Website',
 'sort_order' => 10,
 'position' => 10,
 'adminhtml_only' => 1,
 ],
 'store_id' => [
 'type' => 'static',
 'label' => 'Create In',
 'input' => 'select',
 'source' => 'Magento\Customer\Model\Customer\Attribute\Source\Store',
 'backend' => 'Magento\Customer\Model\Customer\Attribute\Backend\Store',
 'sort_order' => 20,
 'visible' => false,
 'adminhtml_only' => 1,
 ],
 'corporate_id' => [
 'type' => 'static',
 'input' => 'text',
 'backend' => 'Magento\Customer\Model\Customer\Attribute\Backend\Corporate',
 'required' => false,
 'sort_order' => 20,
 'visible' => false,
 'position' => 20,
 'adminhtml_only' => 1,
 ],]]
 ...
}

indexer.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="urn:magento:framework:Indexer/etc/indexer.xsd">
 <indexer id="customer_grid" view_id="customer_dummy" class="Magento\Framework\Indexer\Action\Entity" primary="customer">
 <title translate="true">Customer Grid</title>
 <description translate="true">Rebuild Customer grid index</description>

 <fieldset name="customer" source="Magento\Customer\Model\ResourceModel\Customer\Collection"
 provider="Magento\Customer\Model\Indexer\AttributeProvider">
 <field name="corporate_id" xsi:type="searchable" dataType="varchar"/> 
 <field name="name" xsi:type="searchable" dataType="text" handler="CustomerNameHandler"/>
 <field name="email" xsi:type="searchable" dataType="varchar"/>

 <field name="group_id" xsi:type="filterable" dataType="int"/>
 <field name="created_at" xsi:type="filterable" dataType="timestamp"/>
 <field name="website_id" xsi:type="filterable" dataType="int"/>
 <field name="confirmation" xsi:type="filterable" dataType="varchar"/>
 <field name="created_in" xsi:type="filterable" dataType="text"/>
 <field name="dob" xsi:type="filterable" dataType="date"/>
 <field name="gender" xsi:type="filterable" dataType="int"/>
 <field name="taxvat" xsi:type="searchable" dataType="varchar"/>
 <field name="lock_expires" xsi:type="filterable" dataType="timestamp" />
 </fieldset>

 <fieldset name="shipping" source="Magento\Customer\Model\ResourceModel\Address\Collection">
 <reference fieldset="customer" from="entity_id" to="default_shipping"/>
 <field name="full" xsi:type="searchable" dataType="text" handler="ShippingAddressHandler"/>
 </fieldset>

 <fieldset name="billing" source="Magento\Customer\Model\ResourceModel\Address\Collection"
 provider="Magento\Customer\Model\Indexer\Address\AttributeProvider">
 <reference fieldset="customer" from="entity_id" to="default_billing"/>
 <field name="full" xsi:type="searchable" dataType="text" handler="BillingAddressHandler"/>
 <field name="firstname" xsi:type="searchable" dataType="varchar"/>
 <field name="lastname" xsi:type="searchable" dataType="varchar"/>
 <field name="telephone" xsi:type="searchable" dataType="varchar"/>
 <field name="postcode" xsi:type="searchable" dataType="varchar"/>
 <field name="country_id" xsi:type="filterable" dataType="varchar"/>
 <field name="region" xsi:type="searchable" dataType="varchar"/>
 <field name="street" xsi:type="searchable" dataType="varchar"/>
 <field name="city" xsi:type="searchable" dataType="varchar"/>
 <field name="fax" xsi:type="searchable" dataType="varchar"/>
 <field name="vat_id" xsi:type="searchable" dataType="varchar"/>
 <field name="company" xsi:type="searchable" dataType="varchar"/>
 </fieldset>

 <saveHandler class="Magento\Framework\Indexer\SaveHandler\Grid"/>
 <structure class="Magento\Framework\Indexer\GridStructure"/>
 </indexer>
</config>

fieldset.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="urn:magento:framework:Object/etc/fieldset.xsd">
 <scope id="global">
 <fieldset id="customer_account">
 <field name="prefix">
 <aspect name="create" />
 <aspect name="update" />
 <aspect name="name" />
 </field>
 <field name="corporate_id">
 <aspect name="create" />
 <aspect name="update" />
 </field>
 <field name="firstname">
 <aspect name="create" />
 <aspect name="update" />
 <aspect name="name" />
 </field>
 <field name="middlename">
 <aspect name="create" />
 <aspect name="update" />
 <aspect name="name" />
 </field>
 <field name="lastname">
 <aspect name="create" />
 <aspect name="update" />
 <aspect name="name" />
 </field>
 <field name="suffix">
 <aspect name="create" />
 <aspect name="update" />
 <aspect name="name" />
 </field>
 <field name="email">
 <aspect name="create" />
 <aspect name="update" />
 </field>
 <field name="password">
 <aspect name="create" />
 </field>
 <field name="confirmation">
 <aspect name="create" />
 </field>

 </fieldset>
 </scope>
</config>
2017-06-13T13:27:38+00:00

RECEBA DICAS VALIOSAS NO SEU EMAIL

x