Ich erstelle ein CRUD-Modul für Magento 2 unter Verwendung von UI-Komponenten für die Administratorliste und das Formular, und eine meiner Entitäten verfügt über ein Bildfeld.
Aber ich kann es nicht so machen, wie es sollte.
So sollte es funktionieren.
Im Hinzufügungs- oder Bearbeitungsmodus ohne hochgeladenes Bild sollte es wie eine einfache Dateieingabe aussehen.
Wenn eine Datei hochgeladen wird, sollte die Bildvorschau und ein Löschfeld darunter angezeigt werden.
Ich suche nicht genau diesen Entwurf. Es könnte anders aussehen, aber die gleiche Funktionalität haben.
In Magento 1 konnte ich dies tun, indem ich meinen eigenen Block-Renderer erstellte
class {{Namespace}}_{{Module}}_Block_Adminhtml_{{Entity}}_Helper_Image extends Varien_Data_Form_Element_Image
{
protected function _getUrl()
{
$url = false;
if ($this->getValue()) {
$url = Mage::helper('{{namespace}}_{{module}}/{{entity}}_image')->getImageBaseUrl().$this->getValue();
}
return $url;
}
}
Und dies in meinem Formularblock hinzufügen
$fieldset->addType(
'image',
Mage::getConfig()->getBlockClassName('{{namespace}}_{{module}}/adminhtml_{{entity}}_helper_image')
);
Ich habe aber keinen Formularblock in Magento 2.
Ich weiß, dass ich einen Klassennamen für ein Formularfeld in der UI-Komponentendatei verwenden kann
<field name="image" class="Class\Name\Here">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="dataType" xsi:type="string">text</item>
<item name="label" xsi:type="string" translate="true">Resume</item>
<item name="formElement" xsi:type="string">image</item>
<item name="source" xsi:type="string">[entity]</item>
<item name="dataScope" xsi:type="string">image</item>
</item>
</argument>
</field>
Natürlich muss ich diese Klasse erstellen, aber was soll ich erweitern?
Ich weiß nur, dass ich das Interface implementieren muss, Magento\Framework\View\Element\UiComponentInterface
aber ich habe nichts gefunden, was ich erweitern könnte.
Meine eigentliche Frage lautet also: Kann ich eine Klasse erweitern, um das gewünschte Verhalten zu erreichen? Wenn nicht, wie kann ich diesen Elementrenderer erstellen?