Magento 2 ui_component रूप में ग्राहक विशेषता दिखाएं


14

मैंने ui_component फॉर्म बनाया है।

जहाँ मुझे ग्राहक विवरण दिखाने की आवश्यकता है, वही ग्राहक संपादन के रूप में ।

लेकिन, मैं customer_entityतालिका से उनका डेटा दिखाने में सक्षम हूं ।

DataProvider.php

public function getData()
{
    if (isset($this->loadedData)) {
        return $this->loadedData;
    }

    // {Vendor}\{Module}\Model\GridFactory 
    // Returns Customer Resource Model
    $items = $this->gridFactory->create()->getCollection();

   $items->getSelect()->join('customer_entity_text as second', 'main_table.entity_id = second.entity_id');
    //print_r($items->getData()); exit;
    foreach($items as $contact){
        $this->loadedData[$contact->getEntityId()]['contact'] = $contact->getData();
    }

    return $this->loadedData;
}

मैंने customer_entity_textअपने कारखाने में प्रदर्शन status(ग्राहक विशेषता) प्रदर्शित करने के लिए टेबल के साथ जुड़ गया है ।

अब मेरा दूसरा गुण fileटाइप है। यह अंदर है customer_entity_varchar, सबसे पहले मैंने सोचा कि एक और जुड़ना है लेकिन मुझे लगता है कि यह अच्छा तरीका नहीं है।

तो, क्या इसका कोई समाधान है? मुझे Customer Attributeअपने फॉर्म में दोनों को दिखाना होगा ।

ui_component

<field name="value">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="label" xsi:type="string">Status</item>
                <item name="visible" xsi:type="boolean">true</item>
                <item name="dataType" xsi:type="string">text</item>
                <item name="formElement" xsi:type="string">input</item>
                <item name="source" xsi:type="string">contact</item>
            </item>
        </argument>
    </field>

1)। उपरोक्त घटक स्थिति के लिए अच्छा काम कर रहा है, लेकिन प्रोफ़ाइल छवि के लिए नहीं, जो छवि प्रकार है।

<field name="value">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="label" xsi:type="string">Profile Image</item>
                <item name="visible" xsi:type="boolean">true</item>
                <item name="formElement" xsi:type="string">fileUploader</item>
                <item name="uploaderConfig" xsi:type="array">
                    <item name="url" xsi:type="url" path="path_controller"/>
                </item>
            </item>
        </argument>
    </field>

यहां तक ​​कि अगर मैं एक ही नाम के साथ एक क्षेत्र को हटाता हूं तो form elementयह काम नहीं लगता है।

पर एक नजर डालें fieldनाम है कि valueके लिए स्थिति

अगर मैं के लिए एक ही बात का उपयोग छवि छवि घटक से क्षेत्र से गायब हो गया है।

नोट : मुझे पता नहीं है कि Magento के रूप में नाम का उपयोग करने की अनुमति क्यों नहीं है value

क्योंकि मैं संग्रह में शामिल हो गया हूं इसलिए मुझे valueसरणी कुंजी के रूप में मिल रहा है ।

** प्रश्न: मैं संग्रह में शामिल हुए बिना इस रूप में ग्राहक विशेषताएँ कैसे प्राप्त कर सकता हूँ?

इसके अलावा यदि आपके पास अन्य समाधानों की तुलना में सबसे अधिक स्वागत योग्य है। *


क्या आप जाँच सकते हैं कि आपके द्वारा उपयोग की जा रही नई विशेषता (डिफ़ॉल्ट) ग्राहक इकाई के डिफ़ॉल्ट विशेषता सेट में हैं?
अस्पष्ट

क्या आप अपना स्वयं का प्रश्न फिर से पढ़ सकते हैं: प्रश्न को पढ़ते समय मुझे इससे कोई मतलब नहीं है। और इसलिए यह आपकी समस्या को हल करने में हमारी मदद नहीं करता है?
हेरिव ट्रिब्यूयिल

बाकी चीजों को भूल जाइए, अगर आप इस बात का जवाब दे सकते हैं कि मैं अपने कस्टम यूआई फॉर्म में ग्राहक विशेषताओं को कैसे प्रदर्शित कर सकता हूं? एक छवि के साथ है और अन्य एक पाठ है।
टीबीएस मेंज

क्या आपका सवाल फ्रंटएंड या बैकएंड में फॉर्म बनाने का है?
हेव ट्रिब्युलॉय

जवाबों:


0

आपको सेटअप स्क्रिप्ट का उपयोग करके customer_entity तालिका के संबंध के साथ अपनी कस्टम तालिका बनाने की आवश्यकता है:

$relationalTable = 'custom_table';  
$table = $setup->getConnection()
    ->newTable($setup->getTable($relationalTable))
    // --- Add your other columns here ---
    ->addColumn('customer_id', Table::TYPE_INTEGER, 10, ['nullable' => false, 'unsigned' => true],
            'Customer Id')
    ->addForeignKey(
        $setup->getFkName(
            $relationalTable,           // priTableName
            'customer_id',              // priColumnName
            'customer_entity',          // refTableName
            'entity_id'                 // refColumnName
        ),
        'customer_id',                  // column
        $setup->getTable('customer_entity'),    
        'entity_id',                    // refColumn
        Table::ACTION_CASCADE           // onDelete
    )
    ->setComment('Customer relation table');

$setup->getConnection()->createTable($table);

फिर आपको ग्राहक मॉडल को लोड करने और अपने कस्टम टेबल को getData () में DataProvider.php के फंक्शन में शामिल करने की आवश्यकता है:

protected $_customerModel;

public function __construct(
    \Magento\Customer\Model\CustomerFactory $customerModel
) {
    $this->_customerModel = $customerModel;
}

public function getData()
{
    if (isset($this->loadedData)) {
        return $this->loadedData;
    }

   $customer = $this->_customerModel->create();
    $collection = $customer->getCollection();
    $collection->getSelect()->join(
        ['custom' => $this->_resource->getTableName('custom_table')],
        'e.entity_id = custom.customer_id'
    );

    foreach($collection as $item){
        $this->loadedData[$item->getId()]['contact'] = $item->getData();
        // Using $item->getData(), you can get customer object with custom attributes as $item->getStatus() or $item->getProfileImage()
    }

    return $this->loadedData;
}

अब आप ui_component में फ़ील्ड नामों का उपयोग इस प्रकार कर सकते हैं:

<field name="status"> <!-- your custom attribute code as field name -->
...
</field>

<field name="profile_image"> <!-- your custom attribute code as field name -->
...
</field>

आशा है कि यह समाधान आपकी समस्या को हल कर सकता है।


मुझे अपने प्रश्न " magento.stackexchange.com/questions/257577/… " के माध्यम से जाने की जरूरत है
Rv Singh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.