步骤:
一、添加客户属性
二、配置后台客户详情页面可修改该属性
三、如何在别处修改该属性
一、添加客户属性is_vip_customer
1、在InstallData.php添加
<?php
namespace Silk\Customer\Setup;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
class InstallData implements InstallDataInterface
{
protected $customerSetupFactory;
public function __construct(\Magento\Customer\Setup\CustomerSetupFactory $customerSetupFactory)
{
$this->customerSetupFactory = $customerSetupFactory;
}
/**
* @param ModuleDataSetupInterface $setup
* @param ModuleContextInterface $context
*/
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
$setup->startSetup();
$customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);
$attributesInfo = [
'is_new_customer' => [
'type' => 'int',
'label' => 'New Customer',
'input' => 'select',
'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
'sort_order' => 90,
'default' => 0,
'position' => 90,
'required' => false,
'adminhtml_only' => 1,
]
];
foreach ($attributesInfo as $attributeCode => $attributeParams) {
$customerSetup->addAttribute(\Magento\Customer\Model\Customer::ENTITY, $attributeCode, $attributeParams);
$attribute = $customerSetup->getEavConfig()->getAttribute('customer', $attributeCode);
$attribute->setData(
'used_in_forms',
['adminhtml_customer']
);
$attribute->save();
}
$setup->endSetup();
}
}
2、在UpgradeData.php中添加
备注:需要修改这个模块的module.xml文件版本号:0.0.5
<?php
namespace Silk\Customer\Setup;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\UpgradeDataInterface;
use Magento\Customer\Model\Customer;
/**
* Upgrade the CatalogStaging module DB scheme
*/
class UpgradeData implements UpgradeDataInterface
{
/** @var \Magento\Customer\Setup\CustomerSetupFactory */
protected $customerSetupFactory;
public function __construct(\Magento\Customer\Setup\CustomerSetupFactory $customerSetupFactory)
{
$this->customerSetupFactory = $customerSetupFactory;
}
/**
* Upgrades DB schema for a module
*
* @param SchemaSetupInterface $setup
* @param ModuleContextInterface $context
* @return void
*
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
*/
public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
$customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);
$setup->startSetup();
if (version_compare($context->getVersion(), '0.0.5', '<')) {
$attributesInfo = [
'is_vip_customer' => [
'type' => 'int',
'label' => 'Vip Customer',
'input' => 'select',
'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
'sort_order' => 90,
'default' => 0,
'position' => 90,
'required' => false,
'adminhtml_only' => 1,
'nullable' => true,
'length' => 4,
'comment' => 'is new customer quote item'
]
];
foreach ($attributesInfo as $attributeCode => $attributeParams) {
$customerSetup->addAttribute(\Magento\Customer\Model\Customer::ENTITY, $attributeCode, $attributeParams);
$attribute = $customerSetup->getEavConfig()->getAttribute('customer', $attributeCode);
$attribute->setData(
'used_in_forms',
['adminhtml_customer']
);
$attribute->save();
}
}
$setup->endSetup();
}
}
二、配置后台客户详情页面可修改该属性
1、重写Magento\Customer\Model\ResourceModel\CustomerRepository文件的save()方法
备注:加上下述红框的代码
2、重写Magento\Customer\Model\Data\Customer文件,多加几个方法
备注:加上下述红框的代码
到此,你可以在后台客户详情页面修改该属性了,如图:
三、如何在别处修改该属性
<?php
namespace Silk\Customer\Controller\Adminhtml\Vip;
class Customer extends \Magento\Backend\App\Action
{
public function execute()
{
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
// 修改属性
$customerRepoInterface = $objectManager->get('\Magento\Customer\Api\CustomerRepositoryInterface');
$customer = $customerRepoInterface->get('test621@qq.com', 1);
$customer->setIsVipCustomer(0);
$customerRepoInterface->save($customer);
// 读取属性
$customerManager = $objectManager->get('\Magento\Customer\Model\Customer');
$customer = $customerManager->load(38966);
var_dump($customer->getIsVipCustomer());
}
}
?>