Ich versuche, einen statischen Block zum Anzeigen dynamischer Produkte zu erstellen. Dies ist Code, mit dem jede untergeordnete Kategorie abgerufen und das Bild für jedes Produkt in jeder Kategorie gedruckt werden soll.
<?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>
Es funktioniert fast, außer dass die img-srcs nur "/a/b/ab001.jpg" als Beispiel und nicht der vollständige Pfad sind, z. B. "/ pub / media / catalog / product / cache / 1 / small_image / 240x300 / abc123def456 / a / b / 001.jpg ", damit die Bilder nicht gefunden werden können. Was ist der richtige Weg, um Produktbilder zu erhalten?
Antworten:
Wenn sich Ihr Block verlängert
Magento\Catalog\Block\Product\AbstractProduct
, können Sie Folgendes verwenden:Dann holen Sie sich entweder die Bild-URL mit
oder wenn Sie es als
<img>
Element ausgeben wollen :Wenn Ihr Block den abstrakten Produktblock nicht erweitert / nicht erweitern kann, können Sie eine eigene
getImage()
Methode erstellen :$this->imageBuilder
muss gespritzt werden alsMagento\Catalog\Block\Product\ImageBuilder
Die Variablen
$imageType
oder$imageId
sollten beispielsweise einer der im Thema definierten Bildtypen seincategory_page_list
.Siehe
app/design/frontend/Magento/luma/etc/view.xml
zum Beispiel für alle Bildtypen im Thema Luma.In Magento 2 werden diese Bildtypen verwendet, anstatt Breite und Höhe direkt in der Vorlage zu definieren.
quelle
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
. Siehe: github.com/magento/magento2/blob/… in Magento 2 verwenden Sie diese, anstatt Breite und Höhe direkt in der Vorlage zu definierenWenn Sie die Größe des Produkt-Images ändern und das Standard-Magento-Image-Cache-System verwenden müssen und sich nicht im Frontend-Bereich befinden, können Sie diese Problemumgehung verwenden.
Anwendungsfall: Dies kann hilfreich sein, wenn Sie für eine externe Anwendung Bild-URLs benötigen, deren Größe in Ihrer benutzerdefinierten API geändert wurde.
Funktionscode:
Das Ausgabebeispiel:
Bemerkungen :
Der dritte Parameter der Funktion startEnvironmentEmulation wird verwendet, um die Verwendung des Frontend-Bereichs zu erzwingen, wenn Sie sich bereits in derselben storeId befinden. (nützlich für den API-Bereich)
Diese Problemumgehung vermeidet, dass Sie diese Art von Fehlern haben:
quelle
Versuch es
quelle
Versuchen Sie diesen Code ..
quelle
getUrl()
ist nicht der richtige Weg, auch wenn sie möglicherweise versehentlich funktioniert. Es nimmt einen$route
Parameter in der Form "Modul / Regler / Aktion" an. "pub / media / catalogue" sieht aus wie eine Route, ist es aber nicht.Könnte vielleicht
Magento\Catalog\Helper\Product::getImageUrl()
helfen. Ich verstehe nicht, warum Magento-Entwickler es nicht inMagento\Catalog\Helper\Image
Klasse implementiert haben , da diegetUrl
Methode in Image Helper nicht das zurückgibt, was man erwarten könnte ...quelle
Bitte versuchen Sie diesen Code:
quelle
Sie können ObjectManager oder Block verwenden.
Objektmanager:
Block :
Rufen Sie die Funktion auf:
quelle
Versuchen Sie diesen Code
Hoffe das wird dir helfen
quelle
In Ihrem Modul:
Dann erhalten Sie in Ihrem Block das folgende Ergebnis:
Nun, es ist nicht perfekt, aber es funktioniert bei mir.
Schauen Sie sich das Ergebnis an:
quelle
In Ihrer Klasse injizieren Abhängigkeit StoreManagerInterface wie:
Nach in Ihrer Methode, um zum Beispiel ein Vorschaubild zu erhalten
quelle
Sie können dies unter Code versuchen.
quelle
Dies ist eine andere Arbeitsmethode:
Oder respektieren Sie eine sichere / unsichere URL basierend auf der aktuellen Anfrage:
Ich überlasse die Objektinstanziierung Ihrer eigenen Vorstellungskraft.
quelle
Wir können die Base Image-URL in einer HTML-Datei erhalten
quelle