Magento2 ui_component - форма - поле ввода файла изображения

8

В настоящее время я пытаюсь углубиться в компоненты пользовательского интерфейса, но я застрял здесь.

Поскольку было бы немного разместить здесь весь код, я просто опубликую некоторые соответствующие ссылки на github.

Что работает, так это загрузка изображения и сохранение имени файла в базе данных.

Что не работает, так это снова загрузка файла в файл ввода на странице формы редактирования.

Ввод изображения определяется здесь: https://github.com/davidverholen/magento2-teaser/blob/develop/view/adminhtml/ui_component/teaser_item_form.xml#L83

В настоящее время класс пуст, я попробовал много вещей сегодня, но ничего не показалось слишком многообещающим, и я даже не уверен, что мне это нужно: https://github.com/davidverholen/magento2-teaser/blob/develop/Ui/Component/ Форма / элемент / TeaserItemImage.php

Источник данных для формы находится здесь: https://github.com/davidverholen/magento2-teaser/blob/develop/Model/TeaserItem/DataProvider.php

(также попытался загрузить image_url здесь и использовать это как индекс поля)

для этого есть также документ, и я, возможно, слишком глуп, чтобы понять, как это сделать: http://devdocs.magento.com/guides/v2.0/ui-components/ui-form.html

Есть идеи или кто-нибудь, кто уже сделал это?

Спасибо заранее!

Обновить:

Я нашел это в медиа-компоненте (который используется для изображений): vendor / magento / module-ui / view / base / web / js / form / element / media.js

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

Я новичок во всем этом knockout.js, но похоже, что привязка значения удалена. Таким образом, должен быть другой способ установить значение?

Я также попытался установить привязку снова в конфигурации, но безуспешно. Попробовал это (добавил image_path_abs к источнику данных, который содержит абсолютный путь к файлу):

<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>
Дэвид Верхолен
источник

Ответы:

5

В Magento 2.1 это стало намного проще.

Хорошим примером для реализации является форма категории: https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/view/adminhtml/ui_component/category_form.xml#L148

Затем вам также нужен контроллер для загрузки изображений: https://github.com/magento/magento2/blob/develop/app/code/Magento/Catalog/Controller/Adminhtml/Category/Image/Upload.php

И последняя, ​​но не менее важная логика в контроллере сохранения, который, как мы надеемся, скоро будет изменен:

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

Дэвид Верхолен
источник
1
Привет, Дэвид, я в той же ситуации, что ты описал в вопросе. Я получил работающую функцию загрузки и имя изображения, сохраненное в базе данных. Чтобы было понятно, это делается в форме «Добавить новый элемент». Но когда я просматриваю любой из этих существующих элементов, элемент Image не отображается. Я также ссылался на модуль каталога, когда разрабатывал свой. Я еще не копал глубоко. Но чтобы показать изображение, нужно ли изменить форму dataSource / Collection, чтобы включить в него basePath изображения?
Nero
Мой работает по умолчанию, код поля совпадает с кодом атрибута?
LM_Fielding
1
@LM_Fielding, извини, я не понимаю твоего смысла. Имя поля - это изображение, которое совпадает с именем столбца в базе данных. Если я рассматриваю изображение как обычное текстовое поле ввода, оно может отображаться как ожидалось. Поле изображения - это просто столбец из таблицы, а не EAV.
Nero
У вас есть вопрос или ваш пользовательский код XML где-нибудь? Показать ваши Setup / InstallData и XML для формы?
LM_Fielding
@LM_Fielding, вот мой вопрос magento.stackexchange.com/questions/140318/… . Пожалуйста, посмотрите там. спасибо
Nero