Magento2: ottieni il percorso dell'immagine del prodotto


8

Ho creato una pagina personalizzata per ottenere prodotti. Ho ricevuto tutte le informazioni ma come ottenere il percorso completo dell'immagine. Sto usando getImage () sta mostrando l'immagine solo come ottenere il percorso completo.

      <a href="<?php echo $this->getBaseUrl().$_item->getUrlKey();?>" title="<?php echo $_item->getName() ?>" class="product-image"><img src="<?php echo $this->getImage();?>" alt="<?php echo $_item->getName() ?>" />

per favore condividi il tuo codice.
Rakesh Jesadiya,

hai bisogno di un'immagine di quale dimensione? full, dimensioni originali, miniature o può essere di medie dimensioni?
Bartosz Kubicki il

Risposte:


2

Si prega di utilizzare il codice seguente nel file modello:

$imageBlock =  $block->getLayout()->createBlock('Magento\Catalog\Block\Product\ListProduct');
$productImage = $imageBlock->getImage($product, 'category_page_grid');  /* $product pass product object here */
<a href="<?php echo $product->getProductUrl(); ?>"><?php echo $productImage->toHtml()  ?></a>

Come facciamo a sapere a cosa servono le opzioni disponibili $ImageTypein $imageBlock->getImage($product, $ImageType):?
Shawn Northrop,

1
Puoi controllare tutti i $ ImageType nel tema etc / view.xml
Sneha Panchal,

Questo ha notevolmente rallentato le mie pagine, tuttavia è esattamente quello che voglio.
harri,

@SnehaPanchal, possiamo usare $ productImage = $ this-> getBaseUrl (\ Magento \ Framework \ UrlInterface :: URL_TYPE_MEDIA). 'catalogo / prodotto'. $ _product-> getImage (); come sotto
jafar pinjar

2

Ottieni l'URL dell'immagine con

$image->getImageUrl();

o se vuoi emetterlo come elemento:

echo $image->toHtml();

O prova questo:

$store = $objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore();
$imageUrl = $store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA) . 'catalog/product' . $product->getImage();

Nota: è necessario creare objectmanager se si utilizza l'ultima soluzione.


cos'è $ image qui @
Ronak

come ottenere $ product
User0434

se stai utilizzando la pagina del prodotto rispetto a qualsiasi prodottoObject che stai utilizzando, passa un singolo prodotto qui
Ronak Chauhan,

Condividi il tuo codice di blocco, quindi ottieni la soluzione corretta
Ronak Chauhan,

2

Una cosa da tenere a mente quando si ottiene una raccolta personalizzata di prodotti è il modo in cui si filtra la raccolta per avere valori che è necessario chiamare nel front-end. Dici di avere una pagina personalizzata, quindi suppongo che stai creando anche una raccolta personalizzata.

Quando lo fai devi filtrare ciò di cui avrai bisogno. All'interno della classe di blocco, avrai bisogno di qualcosa del genere:

<?php

namespace Vendor\Namespace\Block;

use Magento\Catalog\Model\Product;

class Custompage extends \Magento\Framework\View\Element\Template {

    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
        \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
        array $data = []
    ){
        $this->_productCollectionFactory = $productCollectionFactory;
        $this->_catalogProductVisibility = $catalogProductVisibility;
        parent::__construct($context, $data);
    }

    public function getProductCollection() {       
        $attrId = $this->getAttrId();
        $collection = $this->_productCollectionFactory->create();
        $collection->setVisibility($this->_catalogProductVisibility->getVisibleInCatalogIds());
        $collection->addFieldToSelect('name');
        $collection->addFieldToSelect('price');
        $collection->addFieldToSelect('small_image');

        return $collection;
    }
}

Prendi nota che abbiamo $collection->addFieldToSelect('small_image');un campo tra cui scegliere. Se non lo fai, quando passi la chiamata getImage()all'oggetto prodotto non avrà l'URL dell'immagine (e questo è difficile da vedere poiché gli oggetti m2 sono enormi e difficili var_dump). Quindi finiresti con il valore di NULLtornare quando richiedi l'URL dell'immagine.

Quindi nel tuo modello puoi usare:

<?php $productCollection = $block->getProductCollection(); ?>
<?php $imageBlock =  $block->getLayout()->createBlock('Magento\Catalog\Block\Product\ListProduct'); ?>
<?php if (count($productCollection)): ?>
    <?php foreach ($productCollection as $product): ?>
        <?php $productImage = $imageBlock->getImage($product, 'category_page_grid'); ?>
        <a href="<?php /* @escapeNotVerified */ echo $product->getProductUrl() ?>" class="product photo product-item-photo" tabindex="-1"><?php echo $productImage->toHtml(); ?></a>   
    <?php endforeach; ?>
<?php endif; ?>

1

Dai un'occhiata a come è stato realizzato in magento nella pagina prodotto / vista

Magento \ Catalog \ Blocco \ prodotto \ Visualizza \ Gallery

/**
 * Retrieve collection of gallery images
 *
 * @return Collection
 */
public function getGalleryImages()
{
    $product = $this->getProduct();
    $images = $product->getMediaGalleryImages();
    if ($images instanceof \Magento\Framework\Data\Collection) {
        foreach ($images as $image) {
            /* @var \Magento\Framework\DataObject $image */
            $image->setData(
                'small_image_url',
                $this->_imageHelper->init($product, 'product_page_image_small')
                    ->setImageFile($image->getFile())
                    ->getUrl()
            );
            $image->setData(
                'medium_image_url',
                $this->_imageHelper->init($product, 'product_page_image_medium_no_frame')
                    ->setImageFile($image->getFile())
                    ->getUrl()
            );
            $image->setData(
                'large_image_url',
                $this->_imageHelper->init($product, 'product_page_image_large_no_frame')
                    ->setImageFile($image->getFile())
                    ->getUrl()
            );
        }
    }

    return $images;
}

dove si $_imageHelpertrova:

/**
 * @var \Magento\Catalog\Helper\Image
 */
protected $_imageHelper;

0

Se desideri solo ottenere l'URL dell'immagine senza dover eseguire il rendering del codice HTML dell'immagine completa e senza chiamare più blocchi, puoi procedere in questo modo:

$imageUrl = $product->getMediaConfig()->getMediaUrl($product->getImage());
// Returns "https://www.example.com/media/catalog/product/y/o/your_image.jpg"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.