it-swarm.com.de

Holen Sie sich das Basisprodukt-Image in Magento

Ich möchte base product image in Magento erhalten, um es zu verkleinern und in der Warenkorbleiste anzuzeigen.

Leider dies:

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

druckt ein Magento-Platzhalterbild.

Das Basisbild ist für dieses Produkt richtig eingestellt. Kleines Bild und Miniaturbild funktionieren gut.

Keine Ahnung was los ist.

EDIT: Lösung: Erhalten Sie auf diese Weise vollständige Produktdaten:

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

und dann verwenden Sie es wie Sie möchten:

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

Ich denke du suchst das:

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

Gutschrift sollte an BenMarks geben, die diese Antwort gegeben haben .

21
pzirkind

SEI VORSICHTIG!

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

ist object , nicht url string es selbst. Ja, Sie können es direkt mit echo verwenden, sollten es aber nicht var zuweisen. Zum Beispiel funktioniert diese nicht :

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

Nach foreach haben Sie nur noch eine letzte Bild-URL gespeichert. Ein einfacher Weg, um wirklich String-URL zu bekommen, ist:

$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

Versuchen:

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

Kleines Bild und Miniaturbild funktionieren gut.

Dann versuchen Sie small_image anstelle von image wie folgt:

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

Magento-Produktabbildung, die Variable zuweist

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

Magento-Produktabbildung wird dem Objekt zugewiesen

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

Für mich geht das....

Der Grund dafür ist, dass das image-Attribut nicht in die Produktliste geladen wird. Normalerweise können Sie dies während der Bearbeitung des Attributs ändern, jedoch können Sie diese Einstellungen für dieses Attribut nicht bearbeiten. Ich denke, das liegt daran, dass es ein Aktienattribut ist. 

TLDR;

UPDATE catalog_eav_attribute SET used_in_product_listing = 1 WHERE attribute_id = 106;

** Achtung, Sie sollten diese ^^^ -Anfrage erst ausführen, wenn Sie sicher sind, dass Ihre image-Attribut-ID für die catalog_product-Entität 106 ist!

Einige Antworten schlagen diese Methode vor:

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

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

Das solltest du nicht tun! Dies liegt daran, dass Sie eine vollständige Produktladung durchführen! Dies ist nicht effizient und wird höchstwahrscheinlich innerhalb einer Schleife ausgeführt, die noch schlimmer ist! Entschuldigung für das Schreien!

Ich akzeptiere direkte DB-Bearbeitungen normalerweise nicht, aber in diesem Fall war es die einfachste Lösung für mich:

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

Jetzt werden die image-Attributdaten automatisch auf die Produktlistenseiten geladen. Anschließend können Sie darauf wie folgt zugreifen:

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

Das Beste ist, dass Sie nicht das gesamte Produkt in einer Schleife laden! TUN SIE NIEMALS

** Da ich weiß, ich werde die Leute dazu bringen, zu sagen, dass dies nicht der Magento-Weg ist, wäre die Alternative, ein Modul mit einem SQL-Setup-Skript zu erstellen, das den Befehl ausführt.

0
nick.graziano