2012-08-16 13 views
15

Quiero obtener base Imagen del producto en Magento para cambiar el tamaño y mostrar en la barra lateral del carrito.Obtener imagen del producto base en Magento

Desafortunadamente esto:

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

impresiones de imagen de marcador de Magento.

La imagen base está configurada para este producto correctamente. La imagen pequeña y la miniatura funcionan muy bien.

No tengo idea de lo que está pasando.

EDIT: Solución: Obtener datos completos de productos de esta manera:

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

y luego usarlo como desee:

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

Bienvenido a Stack Overflow. Es absolutamente [OK auto-respuesta] (http://meta.stackexchange.com/questions/12513/should-i-not-answermi-own-questions/12519#12519) su propia pregunta, pero por favor publíquela como respuesta real en lugar de dentro de la pregunta misma. Esto permite votar/aceptar la respuesta y nos ayuda a mantener la lista "Sin respuesta" más clara. –

Respuesta

3

Probar:

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

Creo que eres looki ng para esto:

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

de crédito se debe dar a BenMarks que dio este answer.

+1

'$ product-> getImage()' devuelve 'null'. Con pequeñas y miniaturas. ¿Importa su llamado en ** Mage_Checkout_Block_Cart_Sidebar **? – Dave

+0

si tiene $ artículo como producto en la cesta, intente primero: '$ product = Mage :: getModel ('category/product') -> load ($ item-> getId()); eco Mago :: getModel ('Catálogo/product_media_config') -> getMediaUrl ($ producto-> getImage()); ' –

+0

Jerzy, casi :) ' $ _Product = Mago :: getModel ('/ Catálogo de productos') -> load ($ _ item-> getProduct() -> getId()); ' Y finalmente está funcionando como se esperaba. Dzięki. – Dave

1

Imagen pequeña y miniatura funciona muy bien.

A continuación, intente small_image en lugar de la imagen, así:

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

Pero quiero obtener una imagen base, no small_image. Me importa – Dave

+2

¿alguien sabe por qué 'imagen' no va a funcionar? –

+0

@ marco ver mi respuesta debajo de –

3

tenga en cuenta!

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

es objeto, no string url si mismo. Sí, puede usarlo directamente con echo, pero no debería asignarlo a var. Por ejemplo, esto no funcionará :

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

Después foreach, que tendrá sólo una última imagen url salvó. Una manera sencilla es conseguir realmente String url es:

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

muchas gracias! Me ayudó mucho. En lugar de agregar. "Lo convertí en una (cadena). No estoy seguro de si es la mejor práctica. –

+2

Creo que la conversión más obvia a una cadena es poder ser un poco más claro - $ images [] = $ images_obj. '' >>> $ images [] = (string) $ images_obj; – Zippp

0
<img src='.$this->helper('catalog/image')->init($product, 'small_image')->resize(225, 225).' width=\'225\' height=\'225\'/> 
0

la imagen del producto Magento asignar a la variable

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

la imagen del producto Magento asignar a Objeto

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

Funciona para mí ....

+0

Adjuntarlo a una cadena es algo ambiguo, sería mejor encasillarlo en su lugar.'$ product_image = (cadena) Mage :: helper ('catalog/image') -> init ($ productmodel, 'small_image') -> keepFrame (true) -> resize (ancho, alto);' – Ben

+1

@Ben Tengo agregó '. ''' al final revisa mi respuesta ahora. –

0

La razón por la que esto sucede es porque el atributo image no está cargado en la lista de productos. Normalmente puede cambiar esto mientras edita el atributo, pero no puede editar esas configuraciones para este atributo. Creo que es porque es un atributo de stock.

TLDR;

UPDATE catalog_eav_attribute SET used_in_product_listing = 1 WHERE attribute_id = 106; 

** Advertencia, no debería ejecutar esta consulta ^^^ hasta que esté seguro de que su attribute_id image para la entidad catalog_product es de 106!

Algunas respuestas están sugiriendo que este método:

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

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

No deberías hacer esto! ¡Esto se debe a que realizarás una carga completa del producto! Esto no es eficiente, y lo más probable es que se realice dentro de un ciclo, ¡lo que es aún peor! Perdón por gritar!

Por lo general no justifico ediciones directos DB, pero en este caso era la solución más fácil para mí:

# 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; 

Ahora los datos de atributos image se cargarán automagicamente en el listado de productos páginas, a continuación, puede acceda de esta manera:

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

¡La mejor parte es que no está cargando todo el producto en un bucle! NO HAGAS NUNCA ALGUNA OCASIÓN

** Además, como sé que voy a hacer que la gente diga que esta no es la forma de Magento, la alternativa sería crear un módulo que tenga una secuencia de comandos de instalación de SQL que ejecute el comando .

Cuestiones relacionadas