Получить образ базового продукта в Magento

Я хочу получить изображение 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);

Ответы

Ответ 1

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

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

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

Ответ 2

Try:

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

Ответ 3

ОЗНАКОМЬТЕСЬ!

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

Ответ 4

Маленькое изображение и эскиз отлично работают.

Затем попробуйте small_image вместо изображения, например:

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

Ответ 5

<img src='.$this->helper('catalog/image')->init($product, 'small_image')->resize(225, 225).' width=\'225\' height=\'225\'/>

Ответ 6

Изображение пользователя 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).'';

Это работает для меня....

Ответ 7

Причина, по которой это происходит, заключается в том, что атрибут 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, которая запускает команду.