Magento 2: ग्राहक कस्टम विशेषता कैसे बनाएं?


17

Magento 2 में ग्राहक इकाई के लिए एक कस्टम विशेषता बनाने के लिए क्या कदम हैं?


मैग्नेटो 2 लेख में ATTRIBUTE PROGRAMMATICALLY को atwix.com/magento/adding-attribute-programatically-magento2 पर जोड़कर इसे चरण दर चरण
danielruedaa 19

जवाबों:


28

मैगेंटो 2 लेख में : ग्राहक विशेषता कैसे बनाएं? इसे चरण दर चरण बताएं।

मुख्य भाग DataInstall::installनीचे विधि है:

public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {

        /** @var CustomerSetup $customerSetup */
        $customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);

        $customerEntity = $customerSetup->getEavConfig()->getEntityType('customer');
        $attributeSetId = $customerEntity->getDefaultAttributeSetId();

        /** @var $attributeSet AttributeSet */
        $attributeSet = $this->attributeSetFactory->create();
        $attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);

        $customerSetup->addAttribute(Customer::ENTITY, '{attributeCode}', [
            'type' => 'varchar',
            'label' => '{attributeLabel}',
            'input' => 'text',
            'required' => false,
            'visible' => true,
            'user_defined' => true,
            'sort_order' => 1000,
            'position' => 1000,
            'system' => 0,
        ]);
        //add attribute to attribute set
        $attribute = $customerSetup->getEavConfig()->getAttribute(Customer::ENTITY, 'magento_username')
        ->addData([
            'attribute_set_id' => $attributeSetId,
            'attribute_group_id' => $attributeGroupId,
            'used_in_forms' => ['adminhtml_customer'],
        ]);

        $attribute->save();


    }

CustomerSetupFactoryसीधे इंजेक्शन लगाने के बजाय इंजेक्शन लगाने से क्या लाभ है CustomerSetup? समझाने के लिए धन्यवाद।
विनय

@Vinai, लुक्स ग्राहकवेटअप लगता है कि कंस्ट्रक्टर में ModuleDataSetupInterface की उम्मीद है लेकिन यह क्लास इंस्टॉल विधि का तर्क है।
7

चूंकि ModuleDataSetupInterfaceकोई राज्य नहीं है जो सेटअप वर्ग के लिए विशिष्ट है, तो क्या यह बेहतर नहीं होगा कि ऑब्जेक्ट मैनजर को उदाहरण की निर्भरता बनाने के लिए जिम्मेदार ठहराया जाए? इस तरह से CustomerSetupग्राहक कार्यान्वयन के लिए कम युग्मित होगा। जहा तक मै देख सकता हू।
विनई

मॉड्यूल को हटाने से विशेषता को हटाया नहीं जाता है, फिर इसे कैसे हटाया जाना चाहिए?
डेवोनडाहोन

हम एक से अधिक fieds या विशेषताएँ कैसे जोड़ सकते हैं?
जय

1

अपने मॉड्यूल में, इस फ़ाइल को नीचे लागू करें जो एक नई ग्राहक इकाई बनाएगा ।

टेस्ट \ CustomAttribute \ Setup \ InstallData.php

<?php
namespace test\CustomAttribute\Setup;

use Magento\Customer\Setup\CustomerSetupFactory;
use Magento\Customer\Model\Customer;
use Magento\Eav\Model\Entity\Attribute\Set as AttributeSet;
use Magento\Eav\Model\Entity\Attribute\SetFactory as AttributeSetFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

/**
 * @codeCoverageIgnore
 */
class InstallData implements InstallDataInterface
{

    /**
     * @var CustomerSetupFactory
     */
    protected $customerSetupFactory;

    /**
     * @var AttributeSetFactory
     */
    private $attributeSetFactory;

    /**
     * @param CustomerSetupFactory $customerSetupFactory
     * @param AttributeSetFactory $attributeSetFactory
     */
    public function __construct(
        CustomerSetupFactory $customerSetupFactory,
        AttributeSetFactory $attributeSetFactory
    ) {
        $this->customerSetupFactory = $customerSetupFactory;
        $this->attributeSetFactory = $attributeSetFactory;
    }


    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {

        /** @var CustomerSetup $customerSetup */
        $customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);

        $customerEntity = $customerSetup->getEavConfig()->getEntityType('customer');
        $attributeSetId = $customerEntity->getDefaultAttributeSetId();

        /** @var $attributeSet AttributeSet */
        $attributeSet = $this->attributeSetFactory->create();
        $attributeGroupId = $attributeSet->getDefaultGroupId($attributeSetId);

        $customerSetup->addAttribute(Customer::ENTITY, 'custom_attribute', [
            'type' => 'varchar',
            'label' => 'Custom Attribute',
            'input' => 'text',
            'required' => false,
            'visible' => true,
            'user_defined' => true,
            'position' =>999,
            'system' => 0,
        ]);

        $attribute = $customerSetup->getEavConfig()->getAttribute(Customer::ENTITY, 'custom_attribute')
        ->addData([
            'attribute_set_id' => $attributeSetId,
            'attribute_group_id' => $attributeGroupId,
            'used_in_forms' => ['adminhtml_customer'],//you can use other forms also ['adminhtml_customer_address', 'customer_address_edit', 'customer_register_address']
        ]);

        $attribute->save();
    }
}

काम नहीं कर रहा है ....
सरफराज सिपई

इसने मेरे लिए मैग्नेटो 2.3 ibnab.com/en/blog/magento-2/…
रईस देजुस

@ राफेल कोरगा गोम्स क्या इस पद्धति का उपयोग करके कई विशेषताओं को बनाना संभव है? कैसे?
प्रागमन

@ZUBU के लिए आपको बस एक नया $ customerSetup जोड़ना होगा-> पहले एक के बाद AddAttribute, आप खोज सकते हैं -> AddAttribute को कोर में देखें।
राफेल कोरपा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.