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สำหรับสถานะ

หากฉันใช้ในสิ่งเดียวกันสำหรับภาพฟิลด์กว่าองค์ประกอบภาพที่หายไป

หมายเหตุ : valueฉันคิดว่าทำไมวีโอไอพีไม่อนุญาตให้ใช้ชื่อเป็น

เพราะฉันเข้าร่วมการสะสมดังนั้นฉันจึงได้รับvalueเป็นคีย์อาร์เรย์

** คำถาม: ฉันจะรับคุณลักษณะของลูกค้าในแบบฟอร์มนี้ได้อย่างไรโดยไม่เข้าร่วมในการรวบรวม

นอกจากนี้หากคุณมีวิธีการแก้ปัญหาอื่น ๆ นอกจากยินดีต้อนรับมากที่สุด **


คุณสามารถตรวจสอบว่ามีแอททริบิวใหม่ที่คุณใช้อยู่ในชุดแอตทริบิวต์เริ่มต้นของเอนทิตีของลูกค้าหรือไม่
ปิดบัง

คุณสามารถอ่านคำถามของคุณเองอีกครั้ง: คำถามนั้นไม่สมเหตุสมผลสำหรับฉันเมื่ออ่าน และดังนั้นจึงไม่ช่วยเราแก้ไขปัญหาของคุณ?
Herve Tribouilloy

ลืมสิ่งที่เหลือถ้าคุณตอบได้ดีกว่าฉันจะแสดงคุณลักษณะของลูกค้าในรูปแบบ UI ที่กำหนดเองได้อย่างไร หนึ่งคือกับรูปภาพและอื่น ๆ เป็นข้อความ
TBS Mage

เป็นคำถามของคุณในการสร้างแบบฟอร์มในส่วนหน้าหรือส่วนหลัง?
Herve Tribouilloy

คำตอบ:


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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.