Magento 2 Kundenattribut in Form von ui_component anzeigen


14

Ich habe ein ui_component- Formular erstellt.

Wo ich Kundendaten anzeigen muss, Entspricht der Kundenbearbeitung .

Aber ich kann ihre Daten aus der customer_entityTabelle anzeigen.

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

Ich habe customer_entity_textTabelle mit meiner Fabrik verbunden, um anzuzeigen status(Kundenattribut).

Jetzt lautet das Attribut "Mein zweites" " fileTyp". Es ist in customer_entity_varchar, Erstens dachte ich, dass ein weiterer Join hinzugefügt werden soll, aber ich denke, es ist nicht der richtige Weg.

Gibt es dafür eine Lösung? Ich muss beide Customer Attributein meinem Formular anzeigen .

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). Die obige Komponente funktioniert für den Status , nicht jedoch für das Profilbild mit dem Image-Typ.

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

Selbst wenn ich ein Feld mit demselben Namen entferne, form elementscheint es nicht zu funktionieren.

Schauen Sie sich den fieldNamen an, der valuefür Status steht .

Wenn ich dasselbe für das Bildfeld benutze, ist die Bildkomponente verschwunden.

Hinweis : Ich habe keine Ahnung, warum Magento die Verwendung des Namens als nicht zulässt value.

Weil ich mich der Sammlung angeschlossen habe, erhalte ich valueals Array-Schlüssel.

** Frage: Wie kann ich Kundenattribute in diesem Formular erhalten, ohne der Sammlung beizutreten?

Auch wenn Sie eine andere Lösung als die meisten haben, sind Sie herzlich willkommen. **


Können Sie überprüfen, ob die neuen Attribute, die Sie verwenden, im Standardattributsatz der Kundenentität enthalten sind?
Obskure

Könnten Sie Ihre eigene Frage noch einmal lesen: Die Frage ergibt für mich beim Lesen keinen Sinn. Und deshalb hilft es uns nicht, Ihr Problem zu lösen?
Herve Tribouilloy

Vergessen Sie den Rest der Dinge. Wenn Sie antworten können, wie kann ich Kundenattribute in meinem benutzerdefinierten UI-Formular anzeigen? Einer ist mit Bild und der andere ist Text.
TBS Mage

ist Ihre Frage, ein Formular im Frontend oder Backend zu erstellen?
Herve Tribouilloy

Antworten:


0

Sie müssen Ihre benutzerdefinierte Tabelle mit der Beziehung customer_entity mithilfe des Setup-Skripts wie folgt erstellen :

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

Anschließend müssen Sie das Kundenmodell laden und Ihre benutzerdefinierte Tabelle in der Funktion getData () von DataProvider.php wie folgt verknüpfen:

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

Jetzt können Sie Feldnamen in ui_component wie folgt verwenden:

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

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

Hoffe, dass diese Lösung Ihr Problem beheben kann.


Ich brauche Hilfe, bitte gehen Sie meine Frage durch " magento.stackexchange.com/questions/257577/… "
Rv Singh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.