J'essaie de récupérer un attribut de produit dans le modèle de panier. Mais je ne fonctionne tout simplement pas! L'attribut est défini sur Visible sur les pages de catalogue sur la vitrine = oui et utilisé dans la liste des produits = oui
J'utilise un module personnalisé pour remplacer le modèle suivant:
/vendor/magento/module-checkout/view/frontend/templates/cart/item/default.phtml
J'ai le produit:
$_item = $block->getItem();
$product = $_item->getProduct();
Normalement, je m'attendrais à ce qu'un attribut personnalisé (de type zone de texte dans ce cas) avec un code d'attribut 'sample_attr' soit disponible avec l'un d'eux:
$product->getData('sample_attr');
ou
$product->getSampleAttr();
Certains attributs sont disponibles en utilisant ceci (sku, poids, prix ..), mais pour un attribut personnalisé, cela ne fonctionne pas. L'assistant inclus (\ Magento \ Msrp \ Helper \ Data) n'a également aucune méthode d'attribut.
Je peux obtenir tous les codes d'attribut en utilisant:
$attributes = $product->getAttributes();
foreach($attributes as $a)
{
var_dump($a->getName());
}
J'ai aussi essayé:
$attribute = $product->getResource()->getAttribute('sample_attr');
var_dump($attribute->getFrontend()->getValue($product));
mais cela renvoie null.
Alors, comment puis-je obtenir la valeur de l'attribut?
J'ai essayé ceux-ci: obtenir un attribut spécifique pour chaque produit sur la page du catalogue
Attribut de texte personnalisé en sortie dans le catalogue list.phtml (Magento 2)
la source
magento setup:di:compile
pour que cela fonctionne, mais cela a du sens. Vous modifiez ici l'arborescence des dépendances.J'ai donc trouvé un moyen d'obtenir les informations que je recherchais. Je dois charger le produit complet depuis ProductRepository! Notez que si vous essayez de le charger,
\Magento\Catalog\Model\Product
il se comportera comme un singleton, vous donnant toujours le même produit pour chaque boucle.J'ai utilisé ma classe d'assistance de modules car elle définit la méthode suivante pour charger le produit à partir de productId:
J'ai inclus l'aide dans le modèle:
Je charge le produit complet:
Et maintenant je peux utiliser:
et
pour obtenir les données.
la source
Pour ceux qui ont atterri ici à la recherche d'une solution simple, c'est comme ça que ça a fonctionné pour moi
J'ai ajouté à mon
default.phtml
(enmodule-checkout/view/frontend/templates/cart/item
) ceci:alors vous pouvez appeler
$customProduct->getData('your_attribute');
comme toujoursla source
Avec des paramètres d'administration corrects, les attributs personnalisés sont chargés dans l'objet produit dans la page Checkout si le modèle source dans la
eav_attribute
table sql est défini surNULL
. Vous pouvez donc accéder directement à$product->getSampleAttr()
sur la page de paiement.Mais si l'attribut a un modèle source en tant que
Magento\Eav\Model\Entity\Attribute\Source\Table
, vous devez charger le produit à partir du référentiel.Créer un nouvel assistant et ajouter le référentiel de produits dans le constructeur fonctionne toujours sur 2.2.6 (comme solution de tecjam)
Veuillez noter que le problème est le même si vous essayez de remplacer le rendu d'élément (appelé dans la page de paiement) et d'ajouter le référentiel de produit ici.
la source
Les attributs personnalisés ne sont pas inclus dans l'objet produit trouvé dans Quote / Cart, donc vous ne pouvez pas l'obtenir via la fonction getData ('custom_attribute'). ce que vous devez faire est d'obtenir l'ID du produit retourné à partir de l'objet produit Quote et de charger le produit à l'aide du référentiel de produit, une fois que vous avez chargé le produit via le référentiel, vous pouvez obtenir toutes les données, y compris les attributs personnalisés qui lui sont attribués, plus tard, vous pouvez utiliser la fonction getData ('custom_attribute') pour l'obtenir.
J'espère que cela a du sens.
la source