Magento2 添加和修改客户随机属性(customer attribute)

步骤:

    一、添加客户属性

    二、配置后台客户详情页面可修改该属性

    三、如何在别处修改该属性

 

一、添加客户属性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()方法

    备注:加上下述红框的代码

    2a4345a4b0483df1b98121e22fd88480789.jpg

    2、重写Magento\Customer\Model\Data\Customer文件,多加几个方法

    备注:加上下述红框的代码

    1dc453dc405aa1921aa2a0abdcd4b962800.jpg

 

    到此,你可以在后台客户详情页面修改该属性了,如图:

105282ee0e47ecbe16a77b1602dc8b05ec0.jpg

62f107dc2b587575adc70efdbfa7da22fc0.jpg

 

三、如何在别处修改该属性

<?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());
    }
}
?>

 

转载于:https://my.oschina.net/ganfanghua/blog/3064869

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值