Magento 2 Tampilkan atribut pelanggan dalam bentuk ui_component


14

Saya telah membuat formulir ui_component .

Di mana saya perlu menampilkan detail pelanggan, Sama seperti Edit Pelanggan .

Tapi, saya bisa menampilkan data mereka dari customer_entitytabel.

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;
}

Saya sudah bergabung customer_entity_textdengan Pabrik saya untuk menampilkan status(Atribut Pelanggan).

Atribut My Second adalah filetipe. Ada di customer_entity_varchar, Pertama saya berpikir untuk menambahkan gabung lain tapi saya pikir itu bukan cara yang baik.

Jadi, apakah ada solusi untuk ini? Saya perlu menampilkan keduanya Customer Attributedi formulir saya.

komponen 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). Komponen di atas berfungsi baik untuk Status tetapi tidak untuk Gambar Profil yang merupakan tipe Gambar.

<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>

Bahkan jika saya menghapus satu bidang dengan nama yang sama form elementsepertinya tidak berfungsi.

Lihatlah fieldnama yang valueuntuk Status .

Jika saya menggunakan hal yang sama untuk gambar lapangan dari komponen gambar menghilang.

Catatan : Saya tidak tahu mengapa Magento tidak mengizinkan untuk menggunakan nama value.

Karena saya sudah bergabung dalam koleksi jadi saya mendapatkan valuesebagai kunci array.

** Pertanyaan: Bagaimana saya bisa mendapatkan atribut pelanggan dalam formulir ini tanpa bergabung dalam koleksi?

Juga jika Anda memiliki solusi lain selain sebagian besar juga paling disambut. **


Bisakah Anda memeriksa apakah atribut baru yang Anda gunakan ada dalam rangkaian atribut default entitas pelanggan?
jelas

Bisakah Anda membaca pertanyaan Anda lagi: pertanyaan itu tidak masuk akal bagi saya ketika membacanya. Dan karena itu tidak membantu kami untuk menyelesaikan masalah Anda?
Herve Tribouilloy

Lupakan hal-hal lainnya, Jika Anda bisa menjawab untuk bagaimana saya bisa menampilkan atribut pelanggan dalam bentuk ui kustom saya? satu dengan Gambar dan yang lainnya adalah teks.
TBS Mage

Apakah pertanyaan Anda untuk membangun formulir di frontend atau backend?
Herve Tribouilloy

Jawaban:


0

Anda perlu membuat tabel khusus Anda dengan hubungan tabel customer_entity menggunakan skrip penyiapan sebagai berikut:

$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);

Maka Anda perlu memuat model pelanggan dan bergabung dengan tabel kustom Anda di fungsi getData () dari DataProvider.php sebagai berikut:

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;
}

Sekarang Anda dapat menggunakan nama bidang di ui_component sebagai berikut:

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

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

Semoga solusi ini dapat menyelesaikan masalah Anda.


Saya butuh bantuan, silakan buka pertanyaan saya " magento.stackexchange.com/questions/257577/… "
Rv Singh
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.