Hello,
using 2.2.1 here. I need to override module-catalog/Block/Product/ImageBuilder.php block, so I did define my own:
<?php namespace Hoop\Util\Block\Product; use Mageno\Catalog\Helper\ImageFactory as HelperFactory; class ImageBuilder {..}
but when I call it I get:
4 exception(s): Exception #0 (Magento\Framework\Exception\LocalizedException): Invalid block type: Magento\Catalog\Block\Product\ListProduct Exception #1 (ReflectionException): Class Hoop\Util\Block\Product\ImageFactory does not exist Exception #2 (ReflectionException): Class Hoop\Util\Block\Product\ImageFactory does not exist Exception #3 (RuntimeException): Source class "\Hoop\Util\Block\Product\Image" for "Hoop\Util\Block\Product\ImageFactory" generation does not exist.
ofc I want to use magento's ImageFactory, not redefine it.
what am I doing wrong?
Thanks a lot
Solved! Go to Solution.
ok I found the solution myself:
<?php class ImageBuilder extends \Magento\Catalog\Block\Product\ImageBuilder { public function create() { /** @var \Magento\Catalog\Helper\Image $helper */ $helper = $this->helperFactory->create() ->init($this->product, $this->imageId); $template = $helper->getFrame() ? 'Magento_Catalog::product/image.phtml' : 'Magento_Catalog::product/image_with_borders.phtml'; $imagesize = $helper->getResizedImageInfo(); $data = [ 'data' => [ 'template' => $template, 'image_url' => $this->product->load($this->product->getId())->getMyCustomAttributeImage(), 'width' => $helper->getWidth(), 'height' => $helper->getHeight(), 'label' => $helper->getLabel(), 'ratio' => $this->getRatio($helper), 'custom_attributes' => $this->getCustomAttributes(), 'resized_image_width' => !empty($imagesize[0]) ? $imagesize[0] : $helper->getWidth(), 'resized_image_height' => !empty($imagesize[1]) ? $imagesize[1] : $helper->getHeight(), ], ]; return $this->imageFactory->create($data); } }
I see the problem must be in the constructor:
public function __construct( HelperFactory $helperFactory, ImageFactory $imageFactory ) { //$this->helperFactory = $helperFactory; $this->imageFactory = $imageFactory; }
which I don't understand in the original magento block either, because in fact I can't find any ImageFactory inside Helper folder.
Any hint?
thanks
nobody on this topic? I really need help with this.
Thanks
What do you want to do for ImageBuilder Class? Are you want to override or what need to do and please give a full details for your queru.
Hello Rakesh,
thanks for your answer. I need to override the create function, in order to fill the $data array with my own info, in particular the 'image_url' parameter will be filled with my own custom attribute.
thanks a lot
ok I found the solution myself:
<?php class ImageBuilder extends \Magento\Catalog\Block\Product\ImageBuilder { public function create() { /** @var \Magento\Catalog\Helper\Image $helper */ $helper = $this->helperFactory->create() ->init($this->product, $this->imageId); $template = $helper->getFrame() ? 'Magento_Catalog::product/image.phtml' : 'Magento_Catalog::product/image_with_borders.phtml'; $imagesize = $helper->getResizedImageInfo(); $data = [ 'data' => [ 'template' => $template, 'image_url' => $this->product->load($this->product->getId())->getMyCustomAttributeImage(), 'width' => $helper->getWidth(), 'height' => $helper->getHeight(), 'label' => $helper->getLabel(), 'ratio' => $this->getRatio($helper), 'custom_attributes' => $this->getCustomAttributes(), 'resized_image_width' => !empty($imagesize[0]) ? $imagesize[0] : $helper->getWidth(), 'resized_image_height' => !empty($imagesize[1]) ? $imagesize[1] : $helper->getHeight(), ], ]; return $this->imageFactory->create($data); } }