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(атрибути клієнта).

Тепер атрибут My Second - 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як ключ масиву.

** Питання: Як я можу отримати атрибути клієнтів у цій формі без приєднання до колекції?

Крім того, якщо у вас є інше рішення, ніж більшість, також найкраще вітаються **.


Чи можете ви перевірити, чи використовуються ваші нові атрибути в наборі атрибутів за замовчуванням суб'єкта клієнта?
незрозумілий

Чи можете ви ще раз прочитати власне запитання: це питання для мене не має сенсу. І тому це не допомагає нам вирішити ваше питання?
Ерве Трибуйлой

Забудьте про інші речі, якщо ви можете, ніж відповісти, як я можу відображати атрибути клієнта у моїй спеціальній формі інтерфейсу? один із зображенням, а другий - текст.
TBS Mage

Ваше запитання щодо формування форми у фронталі чи бекенде?
Ерве Трибулейло

Відповіді:


0

Вам потрібно створити власну таблицю із співвідношенням таблиця_ клієнт, використовуючи сценарій налаштування таким чином:

$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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.