Ich versuche, ein Produktattribut in der Warenkorbvorlage zu erfassen. Aber ich arbeite einfach nicht! Das Attribut ist auf Sichtbar auf Katalogseiten in Storefront = yes und In Produktliste = yes festgelegt
Ich verwende ein benutzerdefiniertes Modul, um die folgende Vorlage zu überschreiben:
/vendor/magento/module-checkout/view/frontend/templates/cart/item/default.phtml
Ich habe das Produkt:
$_item = $block->getItem();
$product = $_item->getProduct();
Normalerweise würde ich erwarten, dass ein benutzerdefiniertes Attribut (in diesem Fall vom Typ Textbereich) mit dem Attributcode 'sample_attr' mit einem der folgenden Werte verfügbar ist:
$product->getData('sample_attr');
oder
$product->getSampleAttr();
Einige Attribute sind mit dieser Option verfügbar (Artikelnummer, Gewicht, Preis ...), aber für ein benutzerdefiniertes Attribut funktioniert beides nicht. Der enthaltene Helfer (\ Magento \ Msrp \ Helper \ Data) hat auch keine Attributmethode.
Ich kann alle Attributcodes erhalten mit:
$attributes = $product->getAttributes();
foreach($attributes as $a)
{
var_dump($a->getName());
}
Ich habe auch versucht:
$attribute = $product->getResource()->getAttribute('sample_attr');
var_dump($attribute->getFrontend()->getValue($product));
Dies gibt jedoch null zurück.
Wie erhalte ich den Wert des Attributs?
Ich habe Folgendes ausprobiert: Für jedes Produkt auf der Katalogseite ein bestimmtes Attribut abrufen
Benutzerdefiniertes Textattribut in Katalog list.phtml ausgeben (Magento 2)
quelle
magento setup:di:compile
, um das zum Laufen zu bringen, aber das macht Sinn. Hier ändern Sie den Abhängigkeitsbaum.Also habe ich einen Weg gefunden, an die Informationen zu kommen, nach denen ich gesucht habe. Ich muss das komplette Produkt aus dem ProductRepository laden! Beachten Sie, dass Sie sich, wenn Sie versuchen, es von dort zu laden,
\Magento\Catalog\Model\Product
wie ein Singleton verhalten, wodurch Sie für jede Schleife immer das gleiche Produkt erhalten.Ich habe die Hilfsklasse "modules" verwendet, da sie die folgende Methode definiert, um das Produkt von der productId zu laden:
Ich habe den Helfer in die Vorlage aufgenommen:
Ich lade das vollständige Produkt:
Und jetzt kann ich verwenden:
und
um die Daten zu bekommen.
quelle
Für diejenigen, die hier gelandet sind und nach einer einfachen Lösung suchen, hat es bei mir so funktioniert
Ich habe zu meinem
default.phtml
(inmodule-checkout/view/frontend/templates/cart/item
) folgendes hinzugefügt :dann kannst du
$customProduct->getData('your_attribute');
wie immer anrufenquelle
Mit den richtigen Administratoreinstellungen werden benutzerdefinierte Attribute in das Produktobjekt auf der Checkout-Seite geladen, wenn das
eav_attribute
Quellmodell in der SQL-Tabelle auf festgelegt istNULL
. So können Sie direkt mit$product->getSampleAttr()
auf die Checkout-Seite zugreifen .Wenn das Attribut jedoch ein Quellmodell hat
Magento\Eav\Model\Entity\Attribute\Source\Table
, müssen Sie das Produkt aus dem Repository laden.Erstellen Sie einen neuen Helfer und fügen Sie das Produkt-Repository hinzu. Der Konstruktor arbeitet noch an 2.2.6 (als die Lösung von Tecjam).
Beachten Sie, dass das Problem dasselbe ist, wenn Sie versuchen, den Artikelrenderer (auf der Checkout-Seite aufgerufen) zu überschreiben und das Produkt-Repository hier hinzuzufügen.
quelle
Benutzerdefinierte Attribute sind nicht im Produktobjekt enthalten, das sich in Quote / Cart befindet. Daher können Sie sie nicht über die Funktion getData ('custom_attribute') abrufen. Sie müssen lediglich die ID des Produkts aus dem Angebotsproduktobjekt abrufen und das Produkt über das Produktrepository laden. Nachdem Sie das Produkt über das Repository geladen haben, können Sie alle Daten einschließlich der ihm zugewiesenen benutzerdefinierten Attribute abrufen. später können Sie die Funktion getData ('custom_attribute') verwenden, um sie abzurufen.
Hoffe es macht Sinn.
quelle