9

Magento 2 question here:

I've made a custom attribute (media type) with the name of 'bike_range_image', and tried googling and searching in the core and everything I could to get the image with a custom size and such, but can't find the right approach.

I can get it as text, but obviously that's not enough, so this won't cut it:

$productImage = $product->getCustomAttribute( 'bike_range_image' );

Now, some examples in themes that are out there suggest I do this:

$this->helper('Magento\Catalog\Helper\Image')->init($product, 'bike_range_image');

But this gives me an enormous Magento\Catalog\Helper\Image object that doesn't seem to have the right data. (I've got the right product if you're wondering).

Does anyone have some pointers for me?

3 Answers 3

19

I guess you want to do it in .phtml file. Try this way

<?php
$productImageAttr = $product->getCustomAttribute( 'bike_range_image' );
$productImage = $this->helper('Magento\Catalog\Helper\Image')
    ->init($product, 'bike_range_image')
    ->setImageFile($productImageAttr->getValue());
?>

and then in img tag

<img src="<?php echo $productImage->getUrl() ?>" alt="<?php echo $block->escapeHtml($product->getTitle()) ?>" />

The image size can be defined in xml file, for example view.xml

<media>
    <images module="Magento_Catalog">
        <image id="bike_range_image" type="thumbnail">
            <width>100</width>
            <height>100</height>
        </image>
    </images>
</media>
2
  • It was a while ago, but yes, ended up doing it like this. I can't vote it up yet, so please someone else do it!
    – TommyK
    Jul 15, 2016 at 15:10
  • 1
    $product->getCustomAttribute('bike_range_image') is NULL in catalog category pages when $product is loaded from $block->getLoadedProductCollection()
    – LucScu
    Oct 18, 2017 at 9:33
2

Use the following code:

$value = $_product->getCustomImage();
if(isset($value) && $value != 'no_selection'):
     $imageUrl = Mage::getHelper('catalog/image')->init($_product,'custom_image');
      echo "<img src='".$imageUrl."' />";
endif;
2
  • That is Magento 1 code, but still I managed to get it like that: $value = $product->getBikeRangeImage(); However, this is not working yet: $value = $product->getBikeRangeImage(); if( isset($value) && $value != 'no_selection' ): echo $this->helper( 'Magento\Catalog\Helper\Image' )->init( $product, 'bike_range_image' )->resize( 310 ); endif; That gives me an error saying it returns an object rather than an url as it should. Any idea?
    – TommyK
    Mar 14, 2016 at 14:51
  • can anyone shed a light to how I can call an image for a drop-down attribute? Thank you
    – roger
    Oct 18, 2016 at 16:55
1

You can do this trick mentioned here:

https://stackoverflow.com/questions/34082459/magento2-add-product-attribute-as-media-image

but with one thing that isn't mentioned there is you will be able to just do: $_product->getAttributeCode() it will work and give you the value.

As doing this

$product->getCustomAttribute( 'attribute_code' )->getValue() 

will return null;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.