Magento2 ui_component - formulaire - champ de saisie de fichier image

8

J'essaie actuellement de creuser plus profondément dans les composants de l'interface utilisateur, mais je suis un peu coincé ici.

Comme ce serait un peu trop de publier tout le code ici, je vais juste poster quelques liens github pertinents.

Ce qui fonctionne, c'est le téléchargement d'une image et l'enregistrement du nom de fichier dans la base de données.

Ce qui ne fonctionne pas, c'est de charger à nouveau le fichier dans l'entrée de fichier sur la page du formulaire d'édition.

L'entrée d'image est définie ici: https://github.com/davidverholen/magento2-teaser/blob/develop/view/adminhtml/ui_component/teaser_item_form.xml#L83

La classe est actuellement vide, j'ai essayé beaucoup de choses aujourd'hui mais rien ne semblait trop prometteur et je ne suis même pas sûr si j'en ai besoin: https://github.com/davidverholen/magento2-teaser/blob/develop/Ui/Component/ Form / Element / TeaserItemImage.php

La source de données du formulaire est ici: https://github.com/davidverholen/magento2-teaser/blob/develop/Model/TeaserItem/DataProvider.php

(également essayé de charger l'image_url ici et de l'utiliser comme index de champ)

il y a aussi un doc pour ça et je suis peut-être trop stupide pour comprendre comment faire: http://devdocs.magento.com/guides/v2.0/ui-components/ui-form.html

Des idées ou quelqu'un qui a déjà fait ça?

Merci d'avance!

Mise à jour:

J'ai trouvé cela dans le composant multimédia (qui est utilisé pour les images): vendeur / magento / module-ui / view / base / web / js / form / element / media.js

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

Je suis nouveau dans le domaine knockout.js, mais cela semble que la liaison de valeur est supprimée. Il doit donc y avoir une autre façon de définir la valeur?

J'ai également essayé de définir à nouveau la liaison dans la configuration, mais sans succès. J'ai essayé (ajouté le chemin_image_abs à la source de données qui contient le chemin absolu du fichier):

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

Réponses:

5

Dans Magento 2.1, cela est devenu beaucoup plus facile.

Un bon exemple pour la mise en œuvre est le formulaire de catégorie: https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/view/adminhtml/ui_component/category_form.xml#L148

Ensuite, vous avez également besoin d'un contrôleur pour le téléchargement d'images: https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Controller/Adminhtml/Category/Image/Upload.php

Et enfin et surtout, une logique dans le contrôleur de sauvegarde, qui, espérons-le, sera bientôt refactorisée:

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

David Verholen
la source
1
salut David, je suis un peu dans la même situation que celle que vous avez décrite en question. J'ai fait fonctionner la fonction de téléchargement et le nom des images a été enregistré dans la base de données. Pour être clair, cela se fait dans le formulaire "Ajouter un nouvel élément". Mais lorsque je regarde l'un de ces éléments existants, l'élément Image ne s'affiche pas. J'ai également fait référence au module de catalogue lorsque j'ai développé le mien. Je n'ai pas encore creusé profondément. Mais pour obtenir une image, dois-je changer le formulaire dataSource / Collection pour inclure l'image basePath?
Nero
Le mien fonctionne par défaut, le code de champ est-il le même que le code d'attribut?
LM_Fielding
1
@LM_Fielding, désolé, je ne comprends pas votre sens. Le nom du champ est image qui est le même que le nom de colonne dans la base de données. Si je traite l'image comme un champ de texte ordinaire, elle peut s'afficher comme prévu. Le champ d'image est simplement une colonne d'une table, pas EAV.
Nero
Avez-vous une question ou votre code ui xml quelque part? Afficher vos Setup / InstallData et xml pour le formulaire?
LM_Fielding
@LM_Fielding, voici ma question magento.stackexchange.com/questions/140318/… . Veuillez y jeter un œil. merci
Nero