Buduję moduł CRUD dla Magento 2 przy użyciu komponentów interfejsu użytkownika do listy administracyjnej i formularza, a jedna z moich jednostek ma pole obrazu.
Ale nie mogę sprawić, żeby działało tak, jak powinno.
Oto jak powinno to działać.
W trybie dodawania lub w trybie edycji bez przesłanego obrazu powinno to wyglądać jak zwykły plik wejściowy.
Po przesłaniu plik powinien wyświetlać podgląd obrazu i pole usuwania poniżej.
Nie szukam dokładnie tego projektu. Może wyglądać inaczej, ale ma tę samą funkcjonalność.
W Magento 1 mogłem to zrobić, po prostu tworząc własny renderer bloków
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;
}
}
I dodając to w moim bloku formularza
$fieldset->addType(
'image',
Mage::getConfig()->getBlockClassName('{{namespace}}_{{module}}/adminhtml_{{entity}}_helper_image')
);
Ale nie mam bloku formularza w Magento 2.
Wiem, że mogę użyć nazwy klasy dla pola formularza w pliku składników interfejsu użytkownika
<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>
Oczywiście muszę stworzyć tę klasę, ale co mam przedłużyć?
Wiem tylko, że muszę wdrożyć interfejs, Magento\Framework\View\Element\UiComponentInterface
ale nie znalazłem nic, co mógłbym rozszerzyć.
Tak więc moje prawdziwe pytanie brzmi: czy mogę rozszerzyć klasę, aby osiągnąć pożądane zachowanie? Jeśli nie, jak mogę rozpocząć tworzenie tego mechanizmu renderującego elementy?