Magento2 ui_component-form-画像ファイル入力フィールド


8

私は現在、UIコンポーネントをより深く掘り下げようとしていますが、私はここでちょっと行き詰まっています。

ここですべてのコードを投稿するのは少し時間がかかるので、関連する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

フォームのDataSourceはこちらです:https : //github.com/davidverholen/magento2-teaser/blob/develop/Model/TeaserItem/DataProvider.php

(ここでimage_urlをロードし、これをフィールドインデックスとして使用しようとしました)

これについてのドキュメントもあり、これを行う方法を理解するにはjsが愚かすぎる場合があります。http//devdocs.magento.com/guides/v2.0/ui-components/ui-form.html

これをすでに行ったアイデアや誰か?

事前にTHX!

更新:

これはメディアコンポーネント(画像に使用されます)で見つかりました: 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

あなたはどこかに質問やUI xmlコードを持っていますか?フォームのSetup / InstallDataとxmlを表示しますか?
LM_Fielding

@LM_Fielding、これが私の質問ですmagento.stackexchange.com/questions/140318/…。そちらをご覧ください。ありがとう
Nero
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.