Magento 2 Müşteri özelliğini ui_component formunda göster


14

Ui_component formu oluşturdum .

Müşteri ayrıntılarını göstermem gereken yer, Müşteri Düzenleme ile aynı .

Ancak, verilerini customer_entitytablodan gösterebilirim .

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

(Müşteri Özelliği) customer_entity_textgörüntülemek için Fabrikamla masaya katıldım status.

Şimdi İkinci özniteliğim filetür. İçinde customer_entity_varchar, öncelikle başka bir katılma eklemeyi düşündüm ama bence iyi bir yol değil.

Bunun için bir çözüm var mı? Her ikisini Customer Attributede formumda göstermem gerekiyor .

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). Yukarıdaki bileşen Durum için iyi çalışıyor ancak Görüntü türü olan Profil Görüntüsü için çalışmıyor .

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

Aynı adı taşıyan bir alanı kaldırsam bile form elementişe yaramıyor gibi görünüyor.

Bir göz atın fieldolduğunu isim valueiçin Status .

Görüntü alanı için aynı şeyi kullanırsam görüntü bileşeni kaybolur.

Not : Magento'nun neden adı kullanmasına izin vermediği hakkında hiçbir fikrim yok value.

Çünkü ben valuedizi anahtarı olarak alıyorum bu yüzden koleksiyona katıldım .

** Soru: Koleksiyona katılmadan bu formdaki müşteri özelliklerini nasıl alabilirim?

Ayrıca en hoş karşılanan başka bir çözüm varsa. **


Kullandığınız yeni özelliklerin, müşteri varlığının Varsayılan özellik kümesinde olup olmadığını kontrol edebilir misiniz?
belirsiz

Kendi sorunuzu tekrar okuyabilir misiniz: soru okurken bana mantıklı gelmiyor. Bu nedenle sorununuzu çözmemize yardımcı olmaz mı?
Herve Tribouilloy

Geri kalan şeyleri unutun, Müşteri özniteliklerini özel kullanıcı arayüzü formumda nasıl görüntüleyebilirim? biri Resim ile, diğeri metin.
TBS Mage

ön uçta veya arka uçta form oluşturmak için sorunuz mu?
Herve Tribouilloy

Yanıtlar:


0

Aşağıdaki gibi kurulum komut dosyasını kullanarak customer_entity tablosu ilişkisiyle özel tablonuzu oluşturmanız gerekir :

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

Ardından, DataProvider.php dosyasının getData () işlevinde aşağıdaki gibi müşteri modelini yüklemeniz ve özel tablonuza katılmanız gerekir:

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

Artık ui_component içindeki alan adlarını aşağıdaki gibi kullanabilirsiniz:

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

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

Umarım bu çözüm sorununuzu çözebilir.


Yardıma ihtiyacım var lütfen sorumu geç " magento.stackexchange.com/questions/257577/… "
Rv Singh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.