Estou tentando criar um bloco estático para mostrar produtos dinâmicos. Esse é o código que deve obter todas as categorias filho e imprimir a imagem de cada produto em cada categoria.
<?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>
Está quase funcionando, exceto que os img srcs são apenas "/a/b/ab001.jpg" como exemplo e não o caminho completo, por exemplo, "/ pub / media / catalog / product / cache / 1 / small_image / 240x300 / abc123def456 / a / b / 001.jpg "para que as imagens não sejam encontradas. Qual é a maneira correta de obter imagens de produtos?
Respostas:
Se o seu bloco se estender
Magento\Catalog\Block\Product\AbstractProduct
, você pode usar:Em seguida, obtenha o URL da imagem com
ou se você deseja produzi-lo como
<img>
elemento:Se o seu bloco não / não puder estender o bloco abstrato do produto, você poderá criar um
getImage()
método sozinho:$this->imageBuilder
tem que ser injetado comoMagento\Catalog\Block\Product\ImageBuilder
As variáveis
$imageType
ou$imageId
devem ser um dos tipos de imagem definidos no tema, por exemplocategory_page_list
.Veja
app/design/frontend/Magento/luma/etc/view.xml
para todos os tipos de imagens no tema Luma, por exemplo.No Magento 2, esses tipos de imagem são usados em vez de definir largura e altura diretamente no modelo.
fonte
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
. Veja: github.com/magento/magento2/blob/... em Magento 2 você usá-los em vez de definir a largura ea altura diretamente no modeloSe você precisar redimensionar a imagem do produto e usar o sistema de cache de imagem Magento padrão e não estiver na área de front-end, poderá usar esta solução alternativa.
Caso de uso: pode ser útil se você precisar de URLs de imagem redimensionados em sua API personalizada para um aplicativo externo.
Código da função:
O exemplo de saída:
Comentários :
O terceiro parâmetro da função startEnvironmentEmulation é usado para forçar o uso da área de front-end se você já estiver no mesmo storeId. (útil para a área da API)
Esta solução alternativa evita que você tenha esse tipo de erro:
fonte
Tente
fonte
Experimente este código ..
fonte
getUrl()
não é o caminho certo, mesmo que funcione acidentalmente. É necessário um$route
parâmetro no formato "módulo / controlador / ação". "pub / media / catalog" parece uma rota, mas não é.Talvez
Magento\Catalog\Helper\Product::getImageUrl()
possa ajudar. Eu não entendo por que os desenvolvedores do Magento não o implementaram emMagento\Catalog\Helper\Image
classe, pois ogetUrl
método no auxiliar de imagem não retorna o que se poderia esperar ...fonte
Por favor, tente este código:
fonte
Você pode usar o ObjectManager ou o Block.
Gerenciador de objetos:
Quadra :
Chame a função:
fonte
Experimente este código
Espero que isso ajude você
fonte
No seu módulo:
Então, no seu bloco, você obterá este resultado:
Bem, não é perfeito, mas funciona para mim.
Veja o resultado:
fonte
Em sua classe, injete a dependência StoreManagerInterface como:
depois no seu método, para obter miniaturas, por exemplo
fonte
Você pode tentar este código abaixo.
fonte
Este é outro método de trabalho:
Ou respeitando o URL seguro / inseguro com base na solicitação atual:
Deixarei a instanciação do objeto para sua própria imaginação.
fonte
Podemos obter o URL da imagem base no arquivo phtml
fonte