Magento 2 Mostra l'attributo del cliente in forma ui_component


14

Ho creato il modulo ui_component .

Dove devo mostrare i dettagli del cliente, lo stesso di Modifica cliente .

Ma posso mostrare i loro dati dalla customer_entitytabella.

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

Ho aderito alla customer_entity_texttabella con la mia fabbrica per visualizzare status(Attributo cliente).

Ora il mio secondo attributo è filetype. È dentro customer_entity_varchar, in primo luogo ho pensato che aggiungere un altro join, ma penso che non sia il modo giusto.

Quindi, c'è qualche soluzione per questo? Devo visualizzare entrambi Customer Attributenella mia forma.

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). Il componente sopra funziona bene per lo stato ma non per l' immagine del profilo che è di tipo Immagine.

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

Anche se rimuovo un campo con lo stesso nome form elementnon sembra funzionare.

Dai un'occhiata al fieldnome che è valueper Status .

Se uso la stessa cosa per l'immagine di campo di componente dell'immagine è scomparso.

Nota : non ho idea del perché Magento non permetta di usare il nome come value.

Perché mi sono unito alla raccolta, quindi ricevo valuela chiave dell'array.

** Domanda: come posso ottenere gli attributi del cliente in questo modulo senza partecipare alla raccolta?

Anche se hai altre soluzioni oltre alla maggior parte anche benvenute. **


Puoi verificare se i nuovi attributi che stai utilizzando si trovano nel set di attributi predefinito dell'entità cliente?
oscuro

Potresti rileggere la tua stessa domanda: la domanda non ha senso per me quando la leggo. E quindi non ci aiuta a risolvere il tuo problema?
Herve Tribouilloy,

Dimentica il resto delle cose, se riesci a rispondere per come posso visualizzare gli attributi del cliente nel mio modulo di interfaccia utente personalizzato? uno è con l'immagine e l'altro è il testo.
TBS Mage,

è la tua domanda per creare un modulo nel frontend o nel backend?
Herve Tribouilloy,

Risposte:


0

È necessario creare una tabella personalizzata con la relazione della tabella customer_entity utilizzando lo script di installazione come segue:

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

Quindi è necessario caricare il modello del cliente e unire la tabella personalizzata nella funzione getData () di DataProvider.php come segue:

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

Ora puoi usare i nomi dei campi in ui_component come segue:

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

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

Spero che questa soluzione possa risolvere il tuo problema.


Ho bisogno di aiuto, per favore, rispondi alla mia domanda " magento.stackexchange.com/questions/257577/… "
Rv Singh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.