J'essaie de récupérer les attributs du produit actuel dans un bloc dans Magento 2. Je peux obtenir un produit, comme l'id 1:
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product = $objectManager->create('\Magento\Catalog\Model\ProductRepository')->getById(1);
Je ne sais pas comment obtenir l'ID du produit actuel. Comment je fais ça?
getProduct()
dansMagento\Catalog\Block\Product\View
Réponses:
Afin d'obtenir le produit actuel, l'un des moyens recommandés est:
Magento\Catalog\Block\Product\View\AbstractView
.$block->getProduct()
dans votre fichier phtml.la source
Bien que d'autres réponses soient correctes, elles ne sont pas non plus la solution recommandée / appropriée.
L'utilisation de l'ObjectManager est absolument interdite dans Magento 2. Veuillez donc ne pas vous fier à cette solution, mais utilisez plutôt une DI appropriée pour y parvenir. Pour savoir comment utiliser DI dans Magento 2, consultez cette ressource: http://devdocs.magento.com/guides/v2.0/extension-dev-guide/depend-inj.html
Il n'est pas nécessaire d'étendre AbstractView. Si vous regardez la fonction d'origine dans AbstractView, vous pouvez voir que Magento a utilisé le registre pour récupérer le produit. Vous n'avez pas besoin d'étendre une classe spécifique pour ce faire, injectez simplement Magento \ Framework \ Registry dans votre constructeur et demandez l'élément de registre "produit".
Exemple de code complet:
la source
Si vous utilisez Magento 2.1 ou majeur, vous pouvez l'utiliser
helper
car l'ancienne méthode était obsolète.la source
La solution @Wesley Vestjens a également fonctionné pour moi. Assurez-vous simplement de prêter attention au modificateur d'accès, car privé peut ne pas être ce que vous voulez si vous utilisez
getProduct()
dans votre modèle. Dans l'exemple ci-dessus, cela fonctionne commegetProductName()
la méthode publique à utiliser.la source
getProduct()
est privé etgetProductName()
public. Dans les versions plus récentes de Magento (2.2 / 2.3 et suivantes), ces méthodes sont également considérées comme obsolètes et les modèles de vue doivent être utilisés à la place.