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);
注意してください!
$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;
}
試してください:
$this->helper('catalog/image')->init($_product, 'image')->keepFrame(false)
->constrainOnly(true)->resize(38,38);
これが発生する理由は、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セットアップスクリプトを含むモジュールを作成することもできます。
小さい画像とサムネイルがうまく機能します。
次に、次のように、イメージの代わりにsmall_imageを試してください。
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\'/>
変数に割り当てるマゼンタの製品画像
$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).'';
わたしにはできる....