Magento 2 Mostrar atributo del cliente en forma ui_component

14

He creado el formulario ui_component .

Donde necesito mostrar los detalles del cliente, igual que Customer Edit .

Pero, puedo mostrar sus datos de la customer_entitytabla.

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

Me uní a la customer_entity_texttabla con mi Fábrica para mostrar status(Atributo del cliente).

Ahora mi segundo atributo es filetipo. Está en customer_entity_varcharprimer lugar, pensé que agregar otra unión, pero creo que no es la buena manera.

Entonces, ¿hay alguna solución para esto? Necesito mostrar ambos Customer Attributeen mi 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) El componente anterior funciona bien para el estado pero no para la imagen de perfil que es tipo de imagen.

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

Incluso si elimino un campo con el mismo nombre form element, no parece ser un trabajo.

Eche un vistazo al fieldnombre que corresponde valuea Estado .

Si utilizo el mismo para la imagen de campo de componente de imagen está desaparecido.

Nota : No tengo idea de por qué Magento no permite usar el nombre como value.

Porque me uní a la colección, así que estoy obteniendo valuecomo clave de matriz.

** Pregunta: ¿Cómo puedo obtener los atributos del cliente en este formulario sin unirme a la colección?

Además, si tiene otra solución que la mayoría, también será bienvenido. **

TBS Mage
fuente
¿Puede verificar si los nuevos atributos que está utilizando están en el conjunto de atributos predeterminado de la entidad del cliente?
oscuro
¿Podrías leer tu propia pregunta otra vez? La pregunta no tiene sentido para mí al leerla. ¿Y por lo tanto no nos ayuda a resolver su problema?
Herve Tribouilloy
Olvide el resto de las cosas, si puede responder, ¿cómo puedo mostrar los atributos del cliente en mi formulario de interfaz de usuario personalizado? uno es con imagen y otro es texto.
TBS Mage
Cuál es tu pregunta para construir un formulario en el frontend o backend?
Herve Tribouilloy

Respuestas:

0

Debe crear su tabla personalizada con la relación de la tabla customer_entity utilizando el script de configuración de la siguiente manera:

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

Luego debe cargar el modelo del cliente y unirse a su tabla personalizada en la función getData () de DataProvider.php de la siguiente manera:

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

Ahora puede usar nombres de campo en ui_component de la siguiente manera:

<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 solución pueda resolver su problema.

Dhara Bhatti
fuente
Necesito ayuda, por favor revisa mi pregunta " magento.stackexchange.com/questions/257577/… "
Rv Singh