Magento2 ui_component - form - campo de entrada do arquivo de imagem

8

Atualmente, estou tentando aprofundar os componentes da interface do usuário, mas estou meio preso aqui.

Como seria um pouco demais postar todo o código aqui, postarei alguns links relevantes do github.

O que funciona é fazer upload de uma imagem e salvar o nome do arquivo no banco de dados.

O que não funciona é carregar o arquivo na entrada de arquivo na página de edição do formulário novamente.

A entrada da imagem é definida aqui: https://github.com/davidverholen/magento2-teaser/blob/develop/view/adminhtml/ui_component/teaser_item_form.xml#L83

A aula está vazia no momento, tentei muitas coisas hoje, mas nada parecia muito promissor e nem tenho certeza se preciso: https://github.com/davidverholen/magento2-teaser/blob/develop/Ui/Component/ Form / Element / TeaserItemImage.php

O DataSource do formulário está aqui: https://github.com/davidverholen/magento2-teaser/blob/develop/Model/TeaserItem/DataProvider.php

(também tentou carregar o image_url aqui e use isso como o índice do campo)

também existe um documento para isso e eu posso ser burra demais para entender como fazer isso: http://devdocs.magento.com/guides/v2.0/ui-components/ui-form.html

Alguma idéia ou alguém que já fez isso?

Thx adiantado!

Atualizar:

Encontrei isso no componente de mídia (usado para imagens): vendor / magento / module-ui / view / base / web / js / form / element / media.js

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

Eu sou novo na coisa toda knockout.js, mas parece que a ligação de valor foi removida. Portanto, deve haver outra maneira de definir o valor?

Eu também tentei definir a ligação novamente na configuração, mas sem sucesso. Tentei isso (adicionou o image_path_abs à fonte de dados que contém o caminho absoluto do arquivo):

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

Respostas:

5

No Magento 2.1, isso realmente se tornou muito mais fácil.

Um bom exemplo para a implementação é o formulário da categoria: https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/view/adminhtml/ui_component/category_form.xml#L148

Então você também precisa de um Controlador para o upload de imagens: https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Controller/Adminhtml/Category/Image/Upload.php

E por último, mas não menos importante, alguma lógica no controlador de salvamento, que esperamos que seja refatorado em breve:

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
fonte
11
oi David, eu estou na mesma situação que você descreveu em questão. Eu tenho a função de upload funcionando e o nome das imagens salvo no banco de dados. Para ficar claro, isso é feito no formulário "Adicionar novo item". Mas quando visualizo um desses itens existentes, o elemento Image não aparece. Também me referi ao módulo de catálogo quando desenvolvi o meu. Eu não cavei ainda. Mas, para obter a exibição da imagem, preciso alterar o formulário dataSource / Collection para incluir a imagem basePath?
Nero
O meu funciona por padrão. O código do campo é igual ao código do atributo?
LM_Fielding
11
@LM_Fielding, desculpe, eu não entendo o seu significado. O nome do campo é a imagem que é igual ao nome da coluna no banco de dados. Se eu tratar a imagem como um campo de texto de entrada comum, ela poderá ser exibida conforme o esperado. O campo de imagem é apenas uma coluna de uma tabela, não EAV.
Nero
Você tem uma pergunta ou seu código xi da interface do usuário em algum lugar? Mostrar seus Setup / InstallData e xml para o formulário?
LM_Fielding 11/10
@LM_Fielding, aqui está minha pergunta magento.stackexchange.com/questions/140318/… . Por favor, dê uma olhada lá. obrigado
Nero