Получить образ базового продукта в 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); 

Solutions Collecting From Web of "Получить образ базового продукта в Magento"

Я думаю, вы ищете это:

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

Кредит должен быть предоставлен BenMarks, который дал этот ответ .

Пытаться:

 $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); 

это объект , а не url string it self. Да, вы можете использовать его непосредственно с эхом, но не должны назначать его 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 не загружен в список продуктов. Обычно вы можете изменить это при редактировании атрибута, но вы не можете редактировать эти параметры для этого атрибута. Я думаю, это потому, что это атрибут запаса.

TLDR;

 UPDATE catalog_eav_attribute SET used_in_product_listing = 1 WHERE attribute_id = 106; 

** Предупреждение, вы не должны выполнять этот запрос ^^^, пока не убедитесь, что ваш атрибут catalog_product объекта 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, который запускает команду.