2012-08-16 5 views
15

ベース製品イメージをMagentoで入手して、サイズを変更してカートのサイドバーに表示したいと考えています。Magentoの基本的な製品イメージを取得する

生憎、この:

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

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

この製品のベースイメージは正しく設定されています。小さな画像とサムネイルは素晴らしい作品です。

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

EDIT: ソリューション: 完全な製品データを取得し、この方法:その後、

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

、あなたが望むようにそれを使用する:

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

ようこそスタックオーバーフロー。それは絶対に自己回答になります(http://meta.stackexchange.com/questions/12513/should-i-not-answer-my-own-questions/12519#12519)あなた自身の質問ですが、投稿してください質問自体の中ではなく、実際の答えとして。これにより、回答を投票/承認することができ、「未回答」リストをより明確にするのに役立ちます。 –

答えて

3

試してみてください。

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

を私はあなたがlookiだと思うこのためngの:

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

クレジットは、このanswerを与えたBenMarksに与えられるべきです。

+1

'$ product-> getImage()'は 'null'を返します。小さなサムネイル作品で。 ** Mage_Checkout_Block_Cart_Sidebar **で呼び出されるのは重要ですか? – Dave

+0

カートの商品として$ itemがある場合は、最初に試してみてください: '$ product = Mage :: getModel( 'category/product') - > load($ item-> getId()); エコーメイジ:: getModel( 'カタログ/ product_media_config') - > getMediaUrl($製品 - >のgetImage()); ' –

+0

イェジー、ほとんど:) ' $の_product =メイジ:: getModel( 'カタログ/製品' ) - > load($ _ item-> getProduct() - > getId()); ' そして最後にそれは意図したとおりに動作しています。 Dzięki。 – Dave

1

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

次に、このように、イメージの代わりsmall_imageしてみてください:

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

たい任意のサイズにこのサイズを変更することはできません。しかし、私はsmall_imageない、ベース画像を取得したい。それは私のために重要。 – Dave

+2

を「画像」は動作しません、なぜいくつかのいずれかが知っている? –

+0

@ marcoは私の答えを参照してください –

3

は注意してください!

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

オブジェクトないURL文字列それが自己です。はい、エコーで直接使用することはできますが、それをvarに割り当てるべきではありません。たとえば、この文句を言わない仕事:foreachの後

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

、あなただけの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; 
} 
+0

私は1トンを助けました。追加する代わりに、私は(文字列に)変換しました。そのベストプラクティスがわからない –

+2

私は文字列にもっと明白な変換がありそうです$ 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

Magentoの製品画像は

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

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

Magentoの製品画像割り当てるに割り当てます

私のために働く....

+0

文字列に追加するのはやや曖昧ですが、代わりに型変換する方がいいでしょう。@end($ productmodel、 'small_image') - > keepFrame(true) - >サイズ変更(幅、高さ); ' – Ben

+1

@Ben私は持っている最後に私の答えをチェックしてください。 –

0

これは、製品リストに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セットアップスクリプトを持つモジュールを作成する方法もあります。

関連する問題