Magento 2 Mostrar atributo do cliente no formato ui_component

14

Eu criei o formulário ui_component .

Onde eu preciso mostrar os detalhes do cliente, Igual à Edição do Cliente .

Mas, eu posso mostrar seus dados da customer_entitytabela.

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

Associei a customer_entity_texttabela à minha fábrica para exibir status(Atributo do cliente).

Agora, meu segundo atributo é do filetipo É em customer_entity_varchar, primeiro lugar eu pensei que para adicionar outro juntar-se, mas eu acho que não é o bom caminho.

Então, existe alguma solução para isso? Eu preciso exibir os dois Customer Attributeno meu formulário.

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) O componente acima está funcionando bem para Status, mas não para a Imagem de perfil que é do tipo Imagem.

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

Mesmo se eu remover um campo com o mesmo nome form element, isso não parece funcionar.

Dê uma olhada no fieldnome que é valuepara Status .

Se eu usar a mesma coisa para imagem campo de componente de imagem está desaparecido.

Nota : Não faço ideia por que o Magento não permite usar o nome como value.

Porque eu entrei na coleção, então estou recebendo valuecomo a chave da matriz.

** Pergunta: Como posso obter atributos de clientes neste formulário sem ingressar na coleção?

Além disso, se você tiver outra solução além da maioria, também será bem-vinda. **

TBS Mage
fonte
Você pode verificar se os novos atributos que você está usando estão no conjunto de atributos Padrão da entidade do cliente?
obscuro
Você poderia ler sua própria pergunta novamente: a pergunta não faz sentido para mim ao lê-la. E, portanto, isso não nos ajuda a resolver seu problema?
Herve Tribouilloy
Esqueça o resto, se você pode responder como posso exibir os atributos do cliente no meu formulário de interface do usuário personalizado? um é com imagem e outro é texto.
TBS Mago
é sua pergunta para criar um formulário no front-end ou back-end?
Herve Tribouilloy

Respostas:

0

Você precisa criar sua tabela personalizada com o relacionamento da tabela customer_entity usando o script de configuração da seguinte maneira:

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

Então você precisa carregar o modelo do cliente e ingressar na sua tabela personalizada na função getData () do DataProvider.php da seguinte maneira:

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

Agora você pode usar nomes de campos em ui_component da seguinte maneira:

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

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

Espero que esta solução possa resolver seu problema.

Dhara Bhatti
fonte
Preciso de ajuda, por favor, faça minha pergunta " magento.stackexchange.com/questions/257577/… "
Rv Singh