Magento 2 Afficher l'attribut client sous la forme ui_component


14

J'ai créé le formulaire ui_component .

Où je dois montrer les détails du client, Identique à la modification du client .

Mais, je peux montrer leurs données de customer_entitytable.

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

J'ai rejoint la customer_entity_texttable avec mon usine afin d'afficher status(Attribut client).

Maintenant, mon deuxième attribut est le filetype. C'est dans customer_entity_varchar, tout d'abord, je pensais que pour ajouter une autre jointure, mais je pense que ce n'est pas la bonne façon.

Alors, y a-t-il une solution à cela? Je dois afficher les deux Customer Attributedans mon formulaire.

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). Le composant ci-dessus fonctionne bien pour le statut, mais pas pour l' image de profil de type Image.

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

Même si je supprime un champ du même nom, form elementcela ne semble pas fonctionner.

Jetez un œil au fieldnom qui correspond valueau statut .

Si j'utilise la même chose pour le champ d'image, le composant d'image disparaît.

Remarque : je ne sais pas pourquoi Magento ne permet pas d'utiliser le nom comme value.

Parce que je me suis joint à la collection, je reçois donc valuela clé de tableau.

** Question: Comment puis-je obtenir des attributs client dans ce formulaire sans participer à la collection?

Aussi, si vous avez une autre solution que la plupart, la plupart sont les bienvenues. **


Pouvez-vous vérifier si les nouveaux attributs que vous utilisez se trouvent dans le jeu d'attributs par défaut de l'entité client?
— obscur

Pourriez-vous relire votre propre question: la question n'a pas de sens pour moi lorsque je la lis. Et donc cela ne nous aide pas à résoudre votre problème?
— Herve Tribouilloy

Oubliez le reste des choses, si vous pouvez répondre à la question de savoir comment puis-je afficher les attributs client dans mon formulaire d'interface utilisateur personnalisé? l'un est avec Image et l'autre est texte.
— TBS Mage

est votre question pour construire un formulaire dans le frontend ou le backend?
— Hervé Tribouilloy

Réponses:


0

Vous devez créer votre table personnalisée avec la relation de la table customer_entity à l' aide du script de configuration comme suit:

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

Ensuite, vous devez charger le modèle client et joindre votre table personnalisée dans la fonction getData () de DataProvider.php comme suit:

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

Vous pouvez maintenant utiliser les noms de champ dans ui_component comme suit:

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

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

J'espère que cette solution résoudra votre problème.


J'ai besoin d'aide, veuillez passer par ma question " magento.stackexchange.com/questions/257577/… "
— Rv Singh
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.