Estoy tratando de crear un bloque estático para mostrar productos dinámicos. Este es un código que se supone que debe obtener cada categoría secundaria e imprimir la imagen de cada producto en cada categoría.
<?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>
Casi funciona, excepto que los img srcs son solo "/a/b/ab001.jpg" como ejemplo y no la ruta completa, por ejemplo, "/ pub / media / catalog / product / cache / 1 / small_image / 240x300 / abc123def456 / a / b / 001.jpg "para que no se puedan encontrar las imágenes. ¿Cuál es la forma correcta de obtener imágenes de productos?
Respuestas:
Si su bloqueo se extiende
Magento\Catalog\Block\Product\AbstractProduct
, puede usar:Luego, obtenga la URL de la imagen con
o si quieres mostrarlo como
<img>
elemento:Si su bloque no puede / no puede extender el bloque de producto abstracto, puede crear un
getImage()
método por su cuenta:$this->imageBuilder
tiene que ser inyectado comoMagento\Catalog\Block\Product\ImageBuilder
Las variables
$imageType
o$imageId
deberían ser uno de los tipos de imagen definidos en el tema, por ejemplocategory_page_list
.Ver
app/design/frontend/Magento/luma/etc/view.xml
todos los tipos de imágenes en el tema Luma, por ejemplo.En Magento 2, estos tipos de imágenes se utilizan en lugar de definir el ancho y la altura directamente en la plantilla.
fuente
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
. Ver: github.com/magento/magento2/blob/… en Magento 2 los usas en lugar de definir el ancho y la altura directamente en la plantillaSi necesita cambiar el tamaño de la imagen del producto y usar el sistema de caché de imagen Magento predeterminado y no está en el área de la interfaz, puede usar esta solución alternativa.
Caso de uso: puede ser útil si necesita cambiar el tamaño de las URL de las imágenes en su API personalizada para una aplicación externa.
Código de función :
El ejemplo de salida:
Comentarios:
El tercer parámetro de la función startEnvironmentEmulation se usa para forzar el uso del área frontend si ya está en el mismo storeId. (útil para el área API)
Esta solución evita que tenga este tipo de errores:
fuente
Intentalo
fuente
Prueba este código ...
fuente
getUrl()
no es la forma correcta, incluso si puede funcionar accidentalmente. Toma un$route
parámetro en la forma "módulo / controlador / acción". "pub / media / catalog" parece una ruta, pero no lo es.Tal vez
Magento\Catalog\Helper\Product::getImageUrl()
podría ayudar. No entiendo por qué los desarrolladores de Magento no lo implementaron enMagento\Catalog\Helper\Image
clase ya que elgetUrl
método de ayuda de imagen no devuelve lo que uno podría esperar ...fuente
Por favor intente este código:
fuente
Puede usar ObjectManager o Block.
Administrador de objetos:
Bloque:
Llama a la función:
fuente
Prueba este código
Espero que esto te ayudará
fuente
En tu modulo:
Luego en tu bloque obtendrás este resultado:
Bueno, no es perfecto, pero funciona para mí.
Echa un vistazo al resultado:
fuente
En su clase, inyecte la dependencia StoreManagerInterface como:
después en su método, para obtener miniaturas por ejemplo
fuente
Puedes probar esto debajo del código.
fuente
Este es otro método de trabajo:
O respetando la URL segura / insegura basada en la solicitud actual:
Dejaré la instanciación del objeto a tu propia imaginación.
fuente
Podemos obtener la URL de la imagen base en el archivo phtml
fuente