Magento – Magento 2 – Product images from custom block

magento2product-images

I have 2 custom blocks, one is loading a product collection from category ID and another one loading a single product from product ID.

My blocks extends the core Magento product list block (\Magento\Catalog\Block\Product\ListProduct).

My template is also a duplicate of the core template.

When calling $block->getImage($_product, $image); It throws an error.

Unable to resolve the source file for 'frontend/_view/en_GB/Magento_Catalog/images/product/placeholder/.jpg'

I've been debugging this for quite a while and can't get to the bottom of it.

When comparing it to the collection on a category list page everything seems identical. The products are the same and have all the same data (including an image).

Any suggestions would be massively helpful.

Code in the template:

$productImage = $block->getImage($_product, $image);

Code in the block:

use Magento\Catalog\Api\CategoryRepositoryInterface;
use Magento\Catalog\Model\Product;

class Category extends \Magento\Catalog\Block\Product\ListProduct
{
 public function __construct(
        \Magento\Catalog\Block\Product\Context $context,
        \Magento\Framework\Data\Helper\PostHelper $postDataHelper,
        \Magento\Catalog\Model\Layer\Resolver $layerResolver,
        CategoryRepositoryInterface $categoryRepository,
        \Magento\Framework\Url\Helper\Data $urlHelper,
        array $data = []
    ) {
        parent::__construct(
            $context, $postDataHelper, $layerResolver, $categoryRepository, $urlHelper, $data
        );
    }
}

From further digging it seems to be something to do with a resize function that is called from getImage. Could this be something to do with xml?

Best Answer

I found the same issue in Magento 2.1.0.

After debugging I found that

1) the placeholder images were broken/missing in

Store -> Configuration -> Catalog -> Product Image Placeholders

2) Imagick library wasn't installed.

Updated those two things the error Unable to resolve the source file got fixed.

Hope it helps.