web-dev-qa-db-ja.com

Magentoで基本製品イメージを取得する

Magentoでbase商品画像を取得して、サイズを変更し、カートのサイドバーに表示したい。

残念ながらこれ:

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

magentoのプレースホルダー画像を印刷します。

この製品のベースイメージは適切に設定されています。小さい画像とサムネイルがうまく機能します。

何が起こっているのかわかりません。

編集:解決策:この方法で完全な製品データを取得します。

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

そして、あなたが望むようにそれを使用してください:

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

あなたはこれを探していると思います:

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

クレジットは BenMarks に与えられた人 answer

21
pzirkind

注意してください!

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

オブジェクトRL文字列ではないそれ自身。はい、エコーで直接使用できますが、varに割り当てるべきではありません。たとえば、このうまくいかない

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

Foreachの後、最後の1つの画像URLのみが保存されます。シンプルな方法は、本当に文字列のURLを取得することです:

$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

試してください:

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

これが発生する理由は、image属性が製品リストにロードされていないためです。通常、属性の編集中にこれを変更できますが、この属性の設定を編集することはできません。それはストック属性だからだと思います。

TLDR;

UPDATE catalog_eav_attribute SET used_in_product_listing = 1 WHERE attribute_id = 106;

**警告、catalog_productエンティティのimage attribute_idが106になるまで、この^^^クエリを実行しないでください!

いくつかの答えはこの方法を提案しています:

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

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

これをしてはいけません!これは、製品を完全にロードするためです!これは効率的ではなく、さらに悪いループの中で行われている可能性が高いです!叫んでごめんなさい!

私は通常、直接DB編集を容認しませんが、この場合、それは私にとって最も簡単な解決策でした:

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

これで、image属性データが製品リストページに自動的にロードされ、次のようにアクセスできます。

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

最良の部分は、製品全体をループでロードしないことです!絶対にしないでください

**また、これはMagentoの方法ではないと言ってもらうことになるので、コマンドを実行するSQLセットアップスクリプトを含むモジュールを作成することもできます。

1
nick.graziano

小さい画像とサムネイルがうまく機能します。

次に、次のように、イメージの代わりにsmall_imageを試してください。

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

変数に割り当てるマゼンタの製品画像

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

オブジェクトに割り当てられたマゼンタの製品画像

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

わたしにはできる....