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);
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;
}
Provare:
$this->helper('catalog/image')->init($_product, 'image')->keepFrame(false)
->constrainOnly(true)->resize(38,38);
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);
<img src='.$this->helper('catalog/image')->init($product, 'small_image')->resize(225, 225).' width=\'225\' height=\'225\'/>
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.