Magento2 ui_component - Formular - Eingabefeld für Bilddatei

8

Ich versuche gerade, tiefer in die UI-Komponenten einzudringen, aber ich stecke hier irgendwie fest.

Da es ein bisschen viel wäre, den gesamten Code hier zu posten, werde ich nur einige relevante Github-Links posten.

Was funktioniert, ist ein Bild hochzuladen und den Dateinamen in der Datenbank zu speichern.

Was nicht funktioniert, ist das erneute Laden der Datei in die Dateieingabe auf der Seite zum Bearbeiten des Formulars.

Die Bildeingabe wird hier definiert: https://github.com/davidverholen/magento2-teaser/blob/develop/view/adminhtml/ui_component/teaser_item_form.xml#L83

Die Klasse ist derzeit leer, ich habe heute viele Dinge ausprobiert, aber nichts schien zu vielversprechend und ich bin mir nicht einmal sicher, ob ich es brauche: https://github.com/davidverholen/magento2-teaser/blob/develop/Ui/Component/ Form / Element / TeaserItemImage.php

Die DataSource für das Formular finden Sie hier: https://github.com/davidverholen/magento2-teaser/blob/develop/Model/TeaserItem/DataProvider.php

(habe auch versucht, die image_url hier zu laden und diese als Feldindex zu verwenden)

Es gibt auch ein Dokument dafür und ich bin vielleicht zu dumm, um zu verstehen, wie das geht: http://devdocs.magento.com/guides/v2.0/ui-components/ui-form.html

Irgendwelche Ideen oder jemand, der dies bereits getan hat?

Danke im Voraus!

Aktualisieren:

Ich habe dies in der Medienkomponente gefunden (die für Bilder verwendet wird): vendor / magento / module-ui / view / base / web / js / form / element / media.js

return Abstract.extend({
        defaults: {
            links: {
                value: ''
            }
        },

Ich bin neu in der ganzen Sache mit knockout.js, aber dies scheint, als ob die Wertebindung entfernt wurde. Es muss also eine andere Möglichkeit geben, den Wert festzulegen?

Ich habe auch versucht, die Bindung in der Konfiguration erneut festzulegen, aber ohne Erfolg. Versuchte dies (fügte die image_path_abs zur Datenquelle hinzu, die den absoluten Dateipfad enthält):

<field name="image_path" class="DavidVerholen\Teaser\Ui\Component\Form\Element\TeaserItemImage">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="links" xsi:type="array">
                <item name="value" xsi:type="string">teaser_item_form.teaser_item_form_data_source.general.image_path_abs</item>
            </item>
            <item name="label" xsi:type="string">Image</item>
            <item name="visible" xsi:type="boolean">true</item>
            <item name="dataType" xsi:type="string">text</item>
            <item name="formElement" xsi:type="string">image</item>
            <item name="source" xsi:type="string">general</item>
        </item>
    </argument>
</field>
David Verholen
quelle

Antworten:

5

In Magento 2.1 ist dies tatsächlich viel einfacher geworden.

Ein gutes Beispiel für die Implementierung ist das Kategorieformular: https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/view/adminhtml/ui_component/category_form.xml#L148

Dann benötigen Sie auch einen Controller für den Image-Upload: https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Controller/Adminhtml/Category/Image/Upload.php

Und zu guter Letzt eine Logik im Save Controller, die hoffentlich bald überarbeitet wird:

https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php#L259 https://github.com/magento/magento2/blob/develop /app/code/Magento/Catalog/Controller/Adminhtml/Category/Save.php#L82

David Verholen
quelle
1
Hallo David, ich bin irgendwie in der gleichen Situation, die du in Frage gestellt hast. Ich habe die Upload-Funktion zum Laufen gebracht und den Bildnamen in der Datenbank gespeichert. Dies erfolgt im Formular "Neues Element hinzufügen". Wenn ich jedoch eines dieser vorhandenen Elemente ansehe, wird das Image-Element nicht angezeigt. Ich habe mich auch auf das Katalogmodul bezogen, als ich mein entwickelt habe. Ich habe noch nicht tief gegraben. Muss ich das Formular dataSource / Collection so ändern, dass es das Bild basePath enthält, um eine Bildshow zu erhalten?
Nero
Meins funktioniert standardmäßig. Ist der Feldcode der gleiche wie der Attributcode?
LM_Fielding
1
@LM_Fielding, sorry, ich verstehe deine Bedeutung nicht. Der Feldname ist ein Bild, das dem Spaltennamen in der Datenbank entspricht. Wenn ich das Bild als normales Eingabetextfeld behandle, kann es wie erwartet angezeigt werden. Das Bildfeld ist einfach eine Spalte aus einer Tabelle, keine EAV.
Nero
Haben Sie irgendwo eine Frage oder Ihren UI-XML-Code? Zeigen Sie Ihre Setup / InstallData und XML für das Formular an?
LM_Fielding
@LM_Fielding, hier ist meine Frage magento.stackexchange.com/questions/140318/… . Bitte schauen Sie dort. danke
Nero