Utworzyłem formularz ui_component .
Gdzie muszę pokazać dane klienta, tak samo jak edycja klienta .
Ale mogę wyświetlić ich dane z customer_entity
tabeli.
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;
}
Dołączyłem do
customer_entity_text
stołu z moją Fabryką, aby wyświetlićstatus
(Atrybut klienta).Teraz moim drugim atrybutem jest
file
typ. Jest na początku.customer_entity_varchar
Po pierwsze pomyślałem, że dodać kolejne złączenie, ale myślę, że to nie jest dobry sposób.
Czy jest na to jakieś rozwiązanie? Muszę wyświetlić oba Customer Attribute
w mojej formie.
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). Powyższy komponent działa dobrze dla statusu, ale nie dla obrazu profilu, który jest typem obrazu.
<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>
Nawet jeśli usunę jedno pole o tej samej nazwie form element
, nie będzie to działać.
Spójrz na field
nazwę value
dla Statusu .
Jeśli używam samo dla obrazu pola niż komponentu obrazu jest zniknął.
Uwaga : nie mam pojęcia, dlaczego Magento nie pozwala używać nazwy jako value
.
Ponieważ dołączyłem do kolekcji, więc otrzymuję
value
jako klucz tablicy.
** Pytanie: Jak mogę uzyskać atrybuty klienta w tym formularzu bez dołączenia do kolekcji?
Również jeśli masz inne rozwiązanie niż większość, również zapraszamy. **
Odpowiedzi:
Musisz utworzyć niestandardową tabelę z relacji customer_entity tabeli przy użyciu skryptu instalacyjnego w następujący sposób:
Następnie należy załadować model klienta i dołączyć tabelę niestandardową w funkcji getData () DataProvider.php w następujący sposób:
Teraz możesz używać nazw pól w ui_component w następujący sposób:
Mam nadzieję, że to rozwiązanie może rozwiązać problem.
źródło