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

TBS Mage
la source
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.

Dhara Bhatti
la source
J'ai besoin d'aide, veuillez passer par ma question " magento.stackexchange.com/questions/257577/… "
Rv Singh