Magento2 ui_component - formulario - campo de entrada del archivo de imagen

8

Actualmente estoy tratando de profundizar en los componentes de la interfaz de usuario, pero estoy un poco atrapado aquí.

Dado que sería un poco demasiado difícil publicar todo el código aquí, solo publicaré algunos enlaces de github relevantes.

Lo que funciona es cargar una imagen y guardar el nombre del archivo en la base de datos.

Lo que no funciona es cargar el archivo en la entrada del archivo en la página de edición de formulario nuevamente.

La entrada de la imagen se define aquí: https://github.com/davidverholen/magento2-teaser/blob/develop/view/adminhtml/ui_component/teaser_item_form.xml#L83

La clase está actualmente vacía, probé muchas cosas hoy pero nada parecía demasiado prometedor y ni siquiera estoy seguro de si lo necesito: https://github.com/davidverholen/magento2-teaser/blob/develop/Ui/Component/ Form / Element / TeaserItemImage.php

El DataSource para el formulario está aquí: https://github.com/davidverholen/magento2-teaser/blob/develop/Model/TeaserItem/DataProvider.php

(también intenté cargar el image_url aquí y usarlo como índice de campo)

También hay un documento para esto y puedo ser demasiado estúpido para entender cómo hacerlo: http://devdocs.magento.com/guides/v2.0/ui-components/ui-form.html

¿Alguna idea o alguien que ya haya hecho esto?

Gracias de antemano!

Actualizar:

Encontré esto en el componente de medios (que se usa para imágenes): vendor / magento / module-ui / view / base / web / js / form / element / media.js

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

Soy nuevo en todo el tema de knockout.js, pero parece que se eliminó el enlace de valor. Entonces, ¿debe haber otra forma de establecer el valor?

También intenté establecer el enlace nuevamente en la configuración pero sin éxito. Intenté esto (agregué el image_path_abs al origen de datos que contiene la ruta absoluta del archivo):

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

Respuestas:

5

En Magento 2.1, esto se ha vuelto mucho más fácil.

Un buen ejemplo para la implementación es el formulario de categoría: https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/view/adminhtml/ui_component/category_form.xml#L148

Entonces, también necesita un controlador para la carga de imágenes: https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Controller/Adminhtml/Category/Image/Upload.php

Y por último, pero no menos importante, algo de lógica en el controlador de guardado, que con suerte se refactorizará pronto:

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
fuente
1
hola David, estoy en la misma situación que describiste en cuestión. Obtuve la función de carga y el nombre de las imágenes se guardó en la base de datos. Para que quede claro, esto se hace en el formulario "Agregar nuevo elemento". Pero cuando veo cualquiera de esos elementos existentes, el elemento Imagen no se muestra. También me referí al módulo de catálogo cuando desarrollé el mío. Aún no cavo profundo. Pero para que se muestre la imagen, ¿debo cambiar el formulario DataSource / Collection para incluir la imagen basePath?
Nero
El mío funciona por defecto, ¿el código de campo es el mismo que el código de atributo?
LM_Fielding
1
@LM_Fielding, lo siento, no entiendo tu significado. El nombre del campo es imagen, que es el mismo que el nombre de la columna en la base de datos. Si trato la imagen como un campo de texto de entrada normal, se puede mostrar como se esperaba. El campo de imagen es simplemente una columna de una tabla, no EAV.
Nero
¿Tiene alguna pregunta o su código ui xml en alguna parte? ¿Mostrar su Setup / InstallData y xml para el formulario?
LM_Fielding
@LM_Fielding, aquí está mi pregunta magento.stackexchange.com/questions/140318/… . Por favor, eche un vistazo allí. gracias
Nero