Я пытаюсь создать статический блок для отображения динамических продуктов. Это код, который должен получить каждую дочернюю категорию и распечатать изображение для каждого продукта в каждой категории.
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$category = $objectManager->get('Magento\Framework\Registry')->registry('current_category');
?><ol><?php
foreach ($category->getChildrenCategories() as $child_category) {
?><li>
<ul><?php
foreach ($child_category->getProductCollection() as $product) {
?><li><img src="<?php echo $product->getImage();?>"/><li><?php
}
?></ul>
</li><?php
}
?></ol>
Он почти работает, за исключением того, что img srcs - это только "/a/b/ab001.jpg" в качестве примера, а не полный путь, например "/ pub / media / catalog / product / cache / 1 / small_image / 240x300 / abc123def456 / a / b / 001.jpg ", поэтому изображения не могут быть найдены. Как правильно получить изображения товара?
Ответы:
Если ваш блок расширяется
Magento\Catalog\Block\Product\AbstractProduct
, вы можете использовать:Затем либо получите URL изображения с
или если вы хотите вывести его как
<img>
элемент:Если ваш блок не расширяет / не может расширять абстрактный блок продукта, вы можете создать
getImage()
метод самостоятельно:$this->imageBuilder
должен быть введен какMagento\Catalog\Block\Product\ImageBuilder
В
$imageType
или$imageId
переменных должен быть один из типов изображений , определенных в теме, напримерcategory_page_list
.См., Например,
app/design/frontend/Magento/luma/etc/view.xml
все типы изображений в теме Luma.В Magento 2 эти типы изображений используются вместо определения ширины и высоты непосредственно в шаблоне.
источник
Uncaught Magento\Framework\View\Asset\File\NotFoundException: Unable to resolve the source file for 'adminhtml/_view/en_US/Magento_Catalog/images/product/placeholder/.jpg'
category_page_list
. Смотрите: github.com/magento/magento2/blob/… в Magento 2 вы используете их вместо определения ширины и высоты непосредственно в шаблонеЕсли вам нужно изменить размер изображения продукта и использовать систему кэширования изображений Magento по умолчанию, и вы не находитесь в области внешнего интерфейса, вы можете использовать этот обходной путь.
Вариант использования: это может быть полезно, если вам нужно, чтобы URL-адреса изображений были изменены в вашем пользовательском API для внешнего приложения.
Код функции:
Пример вывода:
Комментарии :
Третий параметр функции startEnvironmentEmulation используется для принудительного использования области внешнего интерфейса, если вы уже находитесь в том же storeId. (полезно для области API)
Этот обходной путь позволяет избежать таких ошибок:
источник
Попытайся
источник
Попробуйте этот код ..
источник
getUrl()
не является правильным способом, даже если она может работать случайно. Он принимает$route
параметр в форме «модуль / контроллер / действие». «Паб / медиа / каталог» выглядит как маршрут, но это не так.Может быть,
Magento\Catalog\Helper\Product::getImageUrl()
может помочь. Я не понимаю, почему разработчики Magento не реализовали это вMagento\Catalog\Helper\Image
классе, так какgetUrl
метод в помощнике по изображениям не возвращает то, что можно ожидать ...источник
Пожалуйста, попробуйте этот код:
источник
Вы можете использовать ObjectManager или Block.
Менеджер объектов:
Блок:
Вызовите функцию:
источник
Попробуйте этот код
Надеюсь, что это поможет вам
источник
В вашем модуле:
Тогда в вашем блоке вы получите такой результат:
Ну, это не идеально, но это работает для меня.
Посмотрите на результат:
источник
В вашем классе вставьте зависимость StoreManagerInterface вроде:
после в вашем методе, для получения thumbail например
источник
Вы можете попробовать этот код ниже.
источник
Это еще один метод работы:
Или с учетом безопасного / ненадежного URL на основе текущего запроса:
Я оставлю объектный экземпляр на ваше собственное воображение.
источник
Мы можем получить URL базового изображения в файле phtml
источник