J'essaie de créer un bloc statique pour afficher des produits dynamiques. Ce code est censé obtenir chaque catégorie enfant et imprimer l'image de chaque produit dans chaque catégorie.
<?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>
Il fonctionne presque sauf que les img srcs ne sont que "/a/b/ab001.jpg" à titre d'exemple et non le chemin complet par exemple "/ pub / media / catalog / product / cache / 1 / small_image / 240x300 / abc123def456 / a / b / 001.jpg "afin que les images ne soient pas trouvées. Quelle est la bonne façon d'obtenir des images de produits?
Réponses:
Si votre bloc s'étend
Magento\Catalog\Block\Product\AbstractProduct
, vous pouvez utiliser:Ensuite, obtenez l'URL de l'image avec
ou si vous voulez le sortir comme
<img>
élément:Si votre bloc ne prolonge pas / ne peut pas étendre le bloc de produit abstrait, vous pouvez créer vous-même une
getImage()
méthode:$this->imageBuilder
doit être injecté commeMagento\Catalog\Block\Product\ImageBuilder
Les variables
$imageType
ou$imageId
doivent être l'un des types d'images définis dans le thème, par exemplecategory_page_list
.Voir
app/design/frontend/Magento/luma/etc/view.xml
pour tous les types d'images dans le thème Luma, par exemple.Dans Magento 2, ces types d'images sont utilisés au lieu de définir la largeur et la hauteur directement dans le modèle.
la source
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
. Voir: github.com/magento/magento2/blob/… dans Magento 2, vous les utilisez au lieu de définir la largeur et la hauteur directement dans le modèleSi vous devez redimensionner l'image du produit et utiliser le système de cache d'image Magento par défaut et que vous n'êtes pas dans la zone frontend, vous pouvez utiliser cette solution de contournement.
Cas d'utilisation: il peut être utile si vous avez besoin de redimensionner les URL des images sur votre API personnalisée pour une application externe.
Code de fonction:
L'exemple de sortie:
Commentaires :
Le troisième paramètre de la fonction startEnvironmentEmulation est utilisé pour forcer l'utilisation de la zone frontend si vous êtes déjà sur le même storeId. (utile pour la zone API)
Cette solution de contournement vous évite d'avoir ce type d'erreurs:
la source
Essayez-le
la source
Essayez ce code ..
la source
getUrl()
n'est pas la bonne façon même si elle peut fonctionner accidentellement. Il prend un$route
paramètre sous la forme "module / contrôleur / action". "pub / media / catalog" ressemble à un itinéraire, mais ne l'est pas.Peut
Magento\Catalog\Helper\Product::getImageUrl()
- être pourrait aider. Je ne comprends pas pourquoi les développeurs de Magento ne l'ont pas implémenté enMagento\Catalog\Helper\Image
classe car lagetUrl
méthode dans l'image helper ne retourne pas ce à quoi on pourrait s'attendre ...la source
Veuillez essayer ce code:
la source
Vous pouvez utiliser ObjectManager ou Block.
Gestionnaire d'objets:
Bloquer:
Appelez la fonction:
la source
Essayez ce code
J'espère que ceci vous aidera
la source
Dans votre module:
Ensuite, dans votre bloc, vous obtiendrez ce résultat:
Eh bien, ce n'est pas parfait, mais ça marche pour moi.
Jetez un œil au résultat:
la source
Dans votre classe, injectez la dépendance StoreManagerInterface comme:
après dans votre méthode, pour obtenir la vignette par exemple
la source
Vous pouvez essayer ce code ci-dessous.
la source
Ceci est une autre méthode de travail:
Ou en respectant l'URL sécurisée / non sécurisée en fonction de la demande actuelle:
Je vais laisser l'instanciation de l'objet à votre imagination.
la source
Nous pouvons obtenir l'URL de l'image de base dans un fichier phtml
la source