Ответ 1
Я думаю, вы ищете это:
echo Mage::getModel('catalog/product_media_config')
->getMediaUrl( $product->getImage() ); //getSmallImage(), getThumbnail()
Кредит должен быть предоставлен BenMarks, который дал ответ .
Я хочу получить изображение base продукта в 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);
Я думаю, вы ищете это:
echo Mage::getModel('catalog/product_media_config')
->getMediaUrl( $product->getImage() ); //getSmallImage(), getThumbnail()
Кредит должен быть предоставлен BenMarks, который дал ответ .
Try:
$this->helper('catalog/image')->init($_product, 'image')->keepFrame(false)
->constrainOnly(true)->resize(38,38);
ОЗНАКОМЬТЕСЬ!
$this->helper('catalog/image')->init($_product, 'small_image')->resize(38, 38);
объект, не указывать строку. Да, вы можете использовать его непосредственно с эхом, но не должны назначать его var. Например, эта не работает:
$images = array();
foreach($products as $_product){
$images[]=$this->helper('catalog/image')->init($_product, 'small_image')
->resize(38, 38);
}
После foreach у вас будет сохранен только один последний 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;
}
Маленькое изображение и эскиз отлично работают.
Затем попробуйте 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\'/>
Изображение пользователя Magento, присвоенное переменной
$product_image = Mage::helper('catalog/image')->init($productmodel,'small_image')->keepFrame(true)->resize(width,height).'';
Изображение пользователя Magento, присвоенное объекту
$products[] = Mage::helper('catalog/image')->init($productmodel,'small_image')->keepFrame(true)->resize(width,height).'';
Это работает для меня....
Причина, по которой это происходит, заключается в том, что атрибут image
не загружен в список продуктов. Обычно вы можете изменить это при редактировании атрибута, но вы не можете редактировать эти параметры для этого атрибута. Я думаю, что это атрибут запаса.
TL;DR;
UPDATE catalog_eav_attribute SET used_in_product_listing = 1 WHERE attribute_id = 106;
** Предупреждение. Вы не должны выполнять этот запрос ^^^, пока не убедитесь, что ваш image
атрибут_id для объекта catalog_product
равен 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 script, которая запускает команду.