Sto costruendo un modulo CRUD per Magento 2 utilizzando i componenti dell'interfaccia utente per l'elenco e il modulo di amministrazione e una delle mie entità ha un campo immagine.
Ma non posso farlo funzionare come dovrebbe.
Ecco come dovrebbe funzionare.
In modalità Aggiungi o Modifica senza immagini caricate, dovrebbe apparire come un semplice input di file.
Quando un file viene caricato, dovrebbe mostrare l'anteprima dell'immagine e una casella di eliminazione sotto di essa.
Non sto cercando esattamente questo design. Potrebbe avere un aspetto diverso ma avere la stessa funzionalità.
In Magento 1 sono stato in grado di farlo, semplicemente creando il mio renderizzatore di blocchi
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;
}
}
E aggiungendo questo nel mio blocco di moduli
$fieldset->addType(
'image',
Mage::getConfig()->getBlockClassName('{{namespace}}_{{module}}/adminhtml_{{entity}}_helper_image')
);
Ma non ho un blocco modulo in Magento 2.
So che posso usare un nome di classe per un campo modulo nel file dei componenti dell'interfaccia utente
<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>
Ovviamente devo creare questa classe, ma cosa dovrei estendere?
Tutto quello che so è che devo implementare l'interfaccia Magento\Framework\View\Element\UiComponentInterface
ma non ho trovato nulla da estendere.
Quindi la mia vera domanda è: posso estendere un po 'di classe per ottenere il comportamento desiderato? In caso contrario, come posso iniziare a creare questo renderer di elementi?