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