risposta-alla-domanda-sullo-sviluppo-web-bd.com

Ottieni l'immagine del prodotto base in Magento

Voglio ottenere base immagine del prodotto in Magento per ridimensionarlo e visualizzarlo nella barra laterale del carrello.

Sfortunatamente questo:

echo $this->helper('catalog/image')->init($_product, 'image')->resize(38, 38);

stampa l'immagine segnaposto Magento.

L'immagine di base è impostata correttamente per questo prodotto. La piccola immagine e la miniatura funzionano alla grande.

Non ho idea di cosa sta succedendo.

EDIT: Soluzione: Ottieni i dati di prodotto completi in questo modo:

$_product = Mage::getModel('catalog/product')->load($_item->getProduct()->getId());

e poi usalo come desideri:

echo $this->helper('catalog/image')->init($_product, 'image')->resize(38, 38);
15
Dave

Penso che tu stia cercando questo:

echo Mage::getModel('catalog/product_media_config')
        ->getMediaUrl( $product->getImage() ); //getSmallImage(), getThumbnail()

Il credito dovrebbe essere dato a BenMarks che ha dato questo risposta .

21
pzirkind

ESSERE CONSAPEVOLI!

$this->helper('catalog/image')->init($_product, 'small_image')->resize(38, 38);

è object , non url string it self. Sì, puoi usarlo direttamente con echo, ma non devi assegnarlo a var. Ad esempio questo non funzionerà :

    $images = array();
    foreach($products as $_product){
        $images[]=$this->helper('catalog/image')->init($_product, 'small_image')
        ->resize(38, 38);
    }

Dopo foreach, avrai solo un ultimo URL immagine salvato. Il modo semplice è quello di ottenere veramente string stringhe è:

$images = array();
foreach($products as $_product){
    $images_obj = $this->helper('catalog/image')->init($_product, 'small_image')
    ->resize(38, 38);
    $images[] = (string)$images_obj;
}
3
Paulius

Provare:

$this->helper('catalog/image')->init($_product, 'image')->keepFrame(false)
->constrainOnly(true)->resize(38,38);
3
alfasin

La piccola immagine e la miniatura funzionano alla grande.

Quindi prova small_image anziché image, in questo modo:

echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(38, 38);
1
ADev
<img src='.$this->helper('catalog/image')->init($product, 'small_image')->resize(225, 225).' width=\'225\' height=\'225\'/>
0
Arthur Yakovlev

Immagine del prodotto Magento che assegna a Variabile

$product_image = Mage::helper('catalog/image')->init($productmodel,'small_image')->keepFrame(true)->resize(width,height).'';

Immagine del prodotto Magento che assegna all'oggetto

$products[] = Mage::helper('catalog/image')->init($productmodel,'small_image')->keepFrame(true)->resize(width,height).'';

Per me funziona....

Il motivo per cui ciò accade è dovuto al fatto che l'attributo image non è caricato nell'elenco dei prodotti. Normalmente puoi modificarlo mentre modifichi l'attributo, ma non puoi modificare quelle impostazioni per questo attributo. Penso che sia perché è un attributo di magazzino. 

TLDR;

UPDATE catalog_eav_attribute SET used_in_product_listing = 1 WHERE attribute_id = 106;

** Attenzione, non dovresti eseguire questa query ^^^ finché non sei certo che il tuo image attribute_id per l'entità catalog_product è 106!

Alcune risposte suggeriscono questo metodo:

$_product = Mage::getModel('catalog/product')->load($_item->getProduct()->getId());

echo $this->helper('catalog/image')->init($_product, 'image')->resize(38, 38);

Non dovresti farlo! Questo perché si farà un carico completo del prodotto! Questo non è efficiente, ed è molto probabile che venga fatto all'interno di un ciclo che è anche peggio! Scusa per l'urlo!

Di solito non condono le modifiche dirette di DB, ma in questo caso è stata la soluzione più semplice per me:

# First make sure we are using all the right IDs, who knows, I have seen some fubar'ed deployments

SELECT entity_type_id FROM eav_entity_type WHERE entity_type_code = 'catalog_product';
# 10
SELECT attribute_id FROM eav_attribute WHERE attribute_code = 'image' AND entity_type_id = 10;
# 106

# Now that we know the exact attribute_id....
UPDATE catalog_eav_attribute SET used_in_product_listing = 1 WHERE attribute_id = 106;

Ora i dati degli attributi image verranno automaticamente caricati nelle pagine di elenco dei prodotti, quindi potrai accedervi in ​​questo modo:

echo $this->helper('catalog/image')->init($_product, 'image');

La parte migliore è che non si sta caricando l'intero prodotto in un ciclo! NON FARLO MAI MAI

** Inoltre, poiché so che otterrò persone che dicono che questo non è il modo Magento, l'alternativa sarebbe creare un modulo che abbia uno script di installazione SQL che esegue il comando.

0
nick.graziano